سلام عرض میشه
توی این برنامه که AIC فعال شده و PA20 به عنوان وقفه خروجی تعیین شده، وقتی که PA20 تحریک شد، می ره و روال وقفه رو بدرستی اجرا می کنه و بعدش میره دنبال بقیه برنامه. اما وقتی که دوباره PA20 تحریک شد، دیگه نمیره تو روال وقفه!
توی تایمر هم همین طور بود که وقتی یکبار سرریز می شد، برای بار دوم نمی رفت وقفه رو انجام بده.
توی این برنامه که AIC فعال شده و PA20 به عنوان وقفه خروجی تعیین شده، وقتی که PA20 تحریک شد، می ره و روال وقفه رو بدرستی اجرا می کنه و بعدش میره دنبال بقیه برنامه. اما وقتی که دوباره PA20 تحریک شد، دیگه نمیره تو روال وقفه!

توی تایمر هم همین طور بود که وقتی یکبار سرریز می شد، برای بار دوم نمی رفت وقفه رو انجام بده.
کد:
#include <at91sam7s64.h> #include <delay.h> #include <pio.h> __irq void IRQ0_handler(void) { porta_set=0x1; delay_ms(900); porta_rset=0x1; delay_ms(900); } int main() { porta_output=0x3; AT91C_BASE_PMC->PMC_PCER = ( 1<<AT91C_ID_PIOA ); // AT91C_ID_PIOA=2 AT91C_BASE_PIOA->PIO_PER=(1<<0); AT91C_BASE_PIOA->PIO_OER=(1<<0); AT91C_BASE_PIOA->PIO_PDR = (1<<20); AT91C_BASE_PIOA->PIO_MDER = (1<<20); AT91C_BASE_PIOA->PIO_BSR = (1<<20); AT91C_BASE_AIC->AIC_SVR[AT91C_ID_IRQ0] = (unsigned int) IRQ0_handler; AT91C_BASE_AIC->AIC_SMR[AT91C_ID_IRQ0] = 0x12; AT91C_BASE_AIC->AIC_ICCR = (1<<AT91C_ID_IRQ0); AT91C_BASE_AIC->AIC_IECR = (1<<AT91C_ID_IRQ0); while (1) { porta_set=0x2; delay_ms(200); porta_rset=0x2; delay_ms(200); } }
دیدگاه