关于AT91SAM7S64的PIOA中断触发问题!

    技术2022-05-13  3

    这是实验代码。

    void __irq Key_ISR_Handler(void)  {   uint32 status = *AT91C_PIOA_ISR;     *AT91C_AIC_ICCR = (1 << AT91C_ID_PIOA); if(!((1<<15) & *AT91C_PIOA_PDSR)) {  LedAllOff();  LedOn(1);  } else if(!((1<<16) & *AT91C_PIOA_PDSR)) {  LedAllOff();  LedOn(2);  } else if(!((1<<20)& *AT91C_PIOA_PDSR)) {  LedAllOff();  LedAllOn();  } else if(!((1<<23) & *AT91C_PIOA_PDSR)) {  LedAllOff();  LedOn(3);  } *AT91C_AIC_EOICR = 1; }

    void KeyIrqInit(void){ *AT91C_PMC_PCER |= 0x00918000; //PMC外设时钟时能 *AT91C_PIOA_PER |= 0x00918000; //KEY1-4为I/0使用 *AT91C_PIOA_ODR |= 0x00918000; //输出禁止 *AT91C_PIOA_SODR |= 0x00918000; //置位输出 *AT91C_PIOA_IER |= 0x00918000; //key1-key4中断使能// *AT91C_PIOA_IDR |= 0x00918000; //中断禁止   *AT91C_PIOA_IFER |= 0x00918000; //毛刺滤波器使能 *AT91C_PIOA_PPUER |= 0x00918000; //上拉/时能禁止

     *AT91C_AIC_IDCR |= 1<<AT91C_ID_PIOA;   //系统里面禁止中断    *AT91C_AIC_ICCR |= 1<<AT91C_ID_PIOA; //中断清除 *AT91C_AIC_IECR |= 1<<AT91C_ID_PIOA; //中断使能???? pAIC->AIC_SMR[AT91C_ID_PIOA] = AT91C_AIC_SRCTYPE_EXT_LOW_LEVEL | 0; //设置触发模式和优先级 pAIC->AIC_SVR[AT91C_ID_PIOA] =  (uint32) Key_ISR_Handler; pAIC->AIC_IECR |= (1 << AT91C_ID_PIOA);  //打开AIC中断

    }

     

    上面打??的地方是遇到问题的地方。

    当改用下降沿触发时容易挂。。。不知道为什么。尚在研究中?

    希望有知道的兄弟留言解释下。

     


    最新回复(0)