MPS+Ov6

Øvelse 6

i denne del af øvelsen skal skal der reqestes og frigives et interupt. Selve Reqesten af interrupten sker i initfunktionen code request_irq(IRQ,myInteruptHandler,IRQF_TRIGGER_RISING,"gpio",NULL); code
 * a)**

i exitfunktionen frigives interrupten igen ved at bruge funktionen (se neden for). Det er vigtigt at frigive vores interrupt igen når modulet lukkes for ikke fortsat at optage denne code free_irq(IRQ,NULL); code

ved at bruge dmesg der printer kerne bufferen kan vi se den IQR vi har fået tildelt, eller kan vi bruge cat/proc/interrupts til at finde vores IRQ. vi kan her se det er IRQ 290 der er blevet os tildelt.

Routinen skal indtil videre blot indeholde en printk(”IRQ event!!!\n); således at vi kan se at den faktisk bliver kaldt.
 * b) Implementer ISR**

code static irqreturn_t myInteruptHandler(int irq, void *dev_id) {	printk("\n irq event \n"); return IRQ_HANDLED; } code

vi kan ved at kigge på outputtet se at vores ISR er blevet kalt når GPIO benet bliver påvirket.

code irq event irq event irq event irq event irq event irq event irq event irq event irq event code


 * c) Implementer ”read”**

til at implementerer read funktionen bruges wait_event ( se nedenfor ) denne står og venter til den får et wakup call fra ISR grunden til at vi sætter vores wait_evet funktion inden get_value funktion er at vi herved vænter til dataen er klar code wait_event_interruptible(wg, irqflag==1); g_value = gpio_get_value(gpio[minor].num); interruptflag = 0; code

i vores ISR indsættes funktionen wake_up(se nedenfor) denne bruges til at vægge vores wait_event funktion.

code request_irq(IRQ,myInteruptHandler,IRQF_TRIGGER_RISING,"gpio",NULL); code

i denne opgave har vi valgt at ligge request_irq i init funktionen dette medføre dog at at irq'en er i brug allerede fra initialiseringen af kerneobjektet det havde været bædre at kalde funktionen i open da vi herved kun ville bruge interruptet nå vi rent faktisk skulle bruge denne. dette afhænger af situationen. i vores tilfælde er det nok at gøre det i read funktionen men var der tale om et tilfælde hvor det skal gøres inden at resultatet bliver overskrevet skal det gøres i ISR.
 * gennerelle overvejelser**
 * **Hvor skal request_irq ligges (init / open)?**
 * **Hvor skal værdien af gpio’en læses (ISR / read)?**