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