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

这是实验代码。

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中断

}

 

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

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

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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值