首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

ARM7键盘工作原理及中断方式实现(2)

ARM7键盘工作原理及中断方式实现(2)

//此处可依次添加判定代码。
AT91F_PIO_ClearOutput(AT91C_BASE_PIOA,PIN_COL_1|PIN_COL_2|PIN_COL_3);     //全部置低电平
  for(i=0;i<100;i++);
PA_ROW_Status = (unsignedchar)((AT91F_PIO_GetInput(AT91C_BASE_PIOA)>>25)&0x1F);   

while(PA_ROW_Status!=0x1F)                                                                                                       //等到按键抬起再退出中断
  {
          PA_ROW_Status = (unsignedchar)((AT91F_PIO_GetInput(AT91C_BASE_PIOA)>>25)&0x1F);
  }      
AT91F_AIC_AcknowledgeIt(AIC0);
//End of Interrupt      
AT91F_AIC_ClearIt(AIC0,AT91C_ID_IRQ0);        //Clear the Interrupt
AT91F_AIC_EnableIt(AIC0,AT91C_ID_IRQ0);    //Enable ENDRX Interrupt
}
void IRQ_Init(void)
//config the AIC
{
  AT91F_AIC_ConfigureIt(AT91C_BASE_AIC,AT91C_ID_IRQ0,6,
                             AT91C_AIC_SRCTYPE_EXT_NEGATIVE_EDGE,(void(*)())IRQ_Keyboard_Handler);     //配置为边沿触发。
  AT91F_AIC_EnableIt(AT91C_BASE_AIC, AT91C_ID_IRQ0);            //Enable IRQ Interrupt        
}

void main(void)
{
         PMC_Init();
//使能外设引脚
         Config_Pio();
//引脚配置初始化

IRQ_Init();

While(1)
{
         ;
}
}
继承事业,薪火相传
返回列表