at91sam7s, keil uVision i przerwania

Mar 14, 2008 2 Replies

Witam



Problem polega na tym, ¿e w czasie trwania symulacji przerwania s± wywo³ywane tylko raz . Pó¼niej mimo tego, ¿e w oknie AIC jest przy nich pending nic siê nie dzieje. Zaznaczony jest te¿ bit NIRQ. Gdy program wchodzi do funkcji obs³ugi przerwania ustawiana jest flaga I w Current:CPSR i nie jest czyszczona przy wyj¶ciu z niego. Co zrobiæ, ¿eby kolejne przerwania nie by³y blokowane? Mo¿e trzeba samemu wyczy¶ciæ flagê I, ale w przyk³adach nic takiego nie widzia³em.



kod:



void Przerwanie2(void) { unsigned int dummy; ... dummy = AT91C_BASE_PIOA->PIO_ISR; dummy = dummy; AT91F_AIC_AcknowledgeIt(AT91C_BASE_AIC);//nie zauwa¿y³em ró¿nicy w dzia³aniu programu gdy to polecenie jest lub go nie ma. }



int main(void) { ... AT91F_PMC_EnablePeriphClock ( AT91C_BASE_PMC, 1 << AT91C_ID_PIOA ) ; AT91F_PIO_CfgInput(AT91C_BASE_PIOA, 0x100); AT91F_AIC_ConfigureIt ( AT91C_BASE_AIC, AT91C_ID_PIOA,



2,AT91C_AIC_SRCTYPE_INT_HIGH_LEVEL, Przerwanie2); AT91F_PIO_InterruptEnable(AT91C_BASE_PIOA,0x100); AT91F_AIC_EnableIt (AT91C_BASE_AIC, AT91C_ID_PIOA); ... i = 0; for(;;) { i++;} }

pozdrawiam tn


dodatkowa informacja: W oknie Regs jest pogrubion± czcionk± pisana grupa rejestrów "aktualnego" trybu. Przed wej¶ciem do funkcji obs³ugi przerwania jest to grupa User/System, po wej¶ciu do przerwania i po jego obs³udze program pozostaje w grupie Interrupt.

Uda³o mi siê rozwiazaæ problem po intensywnym googlaniu. Funkcja przerwania powinna wygl±daæ nastêpuj±co:

__irq void Przerwanie (void) { volatile unsigned int dummy;

...{kod w³a¶ciwy}...

dummy = AT91C_BASE_TC0->TC_SR; dummy = dummy; AT91F_AIC_AcknowledgeIt(AT91C_BASE_AIC); }

A przerwanie powinno byæ w³±czone nastêpuj±co:

AT91F_AIC_ConfigureIt(AT91C_BASE_AIC, AT91C_ID_TC0, AT91C_AIC_SRCTYPE_HIGH_LEVEL, AT91C_AIC_SRCTYPE_INT_HIGH_LEVEL, (void (*)()) Przerwanie); AT91F_AIC_EnableIt (AT91C_BASE_AIC, AT91C_ID_TC0);

kluczem do sukcesu okaza³y siê __irq i (void (*)()). Nie wiem tylko dlaczego w przyk³adach jakie napotka³em w sieci przerwania dzia³a³y bez tego, a u mnie trzeba jakie¶ dodatkowe zabiegi robiæ... life.

pozdrawiam tn

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required