嵌入式- 按键中断实验

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

按键中断实验
实验目的:1掌握IO口的使用
2掌握中断处理程序编写
3掌握按键中断的使用
实验器材:Sinosys-EA2440实验箱PC机
实验原理:在SinoSys-EA2440a中,已经将EINT0、EINT2、EINT19、EINT11作为外部中断源和开发板上位号为SW1、SW2、SW3、SW4的这四个小按键相连,中断按钮的连接图如图1.1:
1.1中断按钮结构电路
在SinoSys-EA2440a 中,已将EINT0、EINT2、EINT19、EINT11 作为外部中断源和开发板上位号为SW1、SW2、SW3、SW4 的这
四个小按键相连,其中,EINT0、EINT2、EINT11、EINT19 分别和GPF0、GPF2、GPG3、GPG11 复用,当GPFCON[5:4]=10、GPFCON[1:0]=10、GPGCON[7:6]=10、GPGCON[23:22]=10 时,I/O 为中断方式。

通过寄存器的控制,可以达到开启中断和控制中断的目的。

实验总结:将4个按键端口设置成EINT0、EINT2、EINT11、EINT19模式。

rGPGCON = rGPGCON & (~((3<<22)|(3<<6))) | ((2<<22)|(2<<6)) ;
rGPFCON = rGPFCON & (~((3<<4)|(3<<0))) | ((2<<4)|(2<<0)) ;
通过EXTINT寄存器对外部中断触发方式进行设置,这里设置下降沿触发。

rEXTINT0 &= ~(6|(6<<8));
rEXTINT0 |= (0|(0<<8));// EINT0、EINT2
rEXTINT1 &= ~(7<<12);
rEXTINT1 |= (0<<12); // EINT11
rEXTINT2 &= ~(0xf<<12);
rEXTINT2 |= (0<<12); // EINT19
对外部中断挂起寄存器清零,对外部中断屏蔽寄存器时能,同时设置中断服务程序的地址,将中断挂起寄存器清零,开启中断。

rEINTPEND |= (1<<11)|(1<<19);//clear eint 11,19
rEINTMASK &= ~((1<<11)|(1<<19));//enable eint11,19
ClearPendidng(BIT_EINT0|BIT_EINT2|BIT_EINT8_23);
//SRCPND and INTPND 相应位1 使能中断
pISR_EINT0 = pISR_EINT2 = pISR_EINT8_23 = (U32)Key_ISR;//中断服务程序地址
EnableIrq(BIT_EINT0|BIT_EINT2|BIT_EINT8_23);//INTMASK 相应位置0
中断程序首先需要将产生中断的中断标志位清楚,然后改变LED显示标志位,同时通过键盘扫描程序显示在DNW上。

if(rINTPND==BIT_EINT8_23) {
ClearPending(BIT_EINT8_23);
if(rEINTPEND&(1<<11)) {
rEINTPEND |= 1<< 11;
}
if(rEINTPEND&(1<<19)) {
rEINTPEND |= 1<< 19;
}
}
if(rINTPND==BIT_EINT0) {
ClearPending(BIT_EINT0);
}
if(rINTPND==BIT_EINT2) {
ClearPending(BIT_EINT2);
}
key=Key_Scan();
if( key != 0xff ){
flag=~flag;
Uart_Printf( "Interrupt occur... K%d is pressed!\n", key ) ;定时器实验:
1 设置5个变量作为定时器产生中断的次数:variable0, variable1, variable2, variable3, variable4
打开定时器中断,通过对中断屏蔽寄存器INTMSK设置实现:将INT_TIME0,INT_TIME1,INT_TIME2,INT_TIME3,INT_TIME4相应位置0。

通过按键中断,达到了控制流水灯的目的,实现了中断。

相关文档
最新文档