mboost-dp1
Embedded Linux, fra fysisk interaktion til registreret tryk! how?
- Forside
- ⟨
- Forum
- ⟨
- Programmering
Hey, jeg troede jeg viste det, men åbenbart ikke godt nok.
Er der nogen der kan forklare i form af trin hvordan et tryk på en knap siddende på en gpio bliver til en besked i consollen...
det er noget med at trykket genererer en irq som trigger en printk, men hvor er det den irq samles op og fortolkes?
Er der nogen der kan forklare i form af trin hvordan et tryk på en knap siddende på en gpio bliver til en besked i consollen...
det er noget med at trykket genererer en irq som trigger en printk, men hvor er det den irq samles op og fortolkes?
Qw_freak (3) skrev:Ved jeg godt, har den, men håbede nogen der vidste det kunne opridse grund trindene for hvordan det gøres...
Det vil jeg skam også gerne, men dit spørgsmål er så bredt, at man skulle skrive et helt kapitel for at svare fyldestgørende...
I korte træk:
IRQ'et har et nummer.
Driveren registrerer en interrupt-handler til det nummer.
Kernen får et interrupt.
Kernen kigger efter registrerede handlers til det nummer.
Kernen kalder _flere_ handlers indtil en af dem "consumer" interruptet.
Handleren printer med printk.
Så vidt jeg ved er det ikke normalt for en GPIO enhed at generere interrupts. Rent teknisk kan det selvfølgelig lade sig gøre, men jeg tror bare det kræver en lidt mere avanceret GPIO enhed. Så allerførst synes jeg du skal checke dit datasheet for at finde ud af om GPIO enheden overhovedet understøtter interrupts.Qw_freak (1) skrev:Er der nogen der kan forklare i form af trin hvordan et tryk på en knap siddende på en gpio bliver til en besked i consollen...
det er noget med at trykket genererer en irq som trigger en printk, men hvor er det den irq samles op og fortolkes?
Jep, det bliver straks interessant hvis ingen af handlerne er interesseret i det interrupt. Det er vist den situation der resulterer i beskeder i kerneloggen om spurious interrupt. Hvis det sker flere gange i træk er kernen nødt til at afbryde interruptet for at undgå en interrupt storm som lægger hele systemet ned. Så vil ingen af driverne modtage interrupts.hundeboll (5) skrev:Kernen kalder _flere_ handlers indtil en af dem "consumer" interruptet.
Det var vist lidt af et sidespor, men det er godt nok at vide, hvis man selv skal i gang med at skrive handlers, specielt hvis man skal skrive handlers til delte interrupts.
hundeboll (5) skrev:Det vil jeg skam også gerne, men dit spørgsmål er så bredt, at man skulle skrive et helt kapitel for at svare fyldestgørende...
I korte træk:
IRQ'et har et nummer.
Driveren registrerer en interrupt-handler til det nummer.
Kernen får et interrupt.
Kernen kigger efter registrerede handlers til det nummer.
Kernen kalder _flere_ handlers indtil en af dem "consumer" interruptet.
Handleren printer med printk.
Tak, lige præcis det jeg manglede... :)
Gå til top
Opret dig som bruger i dag
Det er gratis, og du binder dig ikke til noget.
Når du er oprettet som bruger, får du adgang til en lang række af sidens andre muligheder, såsom at udforme siden efter eget ønske og deltage i diskussionerne.