按键中断实验
实验目的: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) { }
if(rINTPND==BIT_EINT0) { }
if(rINTPND==BIT_EINT2) { }
ClearPending(BIT_EINT2);
ClearPending(BIT_EINT0); ClearPending(BIT_EINT8_23); if(rEINTPEND&(1<<11)) { }
if(rEINTPEND&(1<<19)) { }
rEINTPEND |= 1<< 19; rEINTPEND |= 1<< 11;
key=Key_Scan(); if( key != 0xff ){
flag=~flag;
Uart_Printf( \"Interrupt occur... K%d is pressed!\\n\ 定时器实验:
1 设置5个变量作为定时器产生中断的次数:variable0, variable1, variable2, variable3, variable4
打开定时器中断,通过对中断屏蔽寄存器INTMSK 设置实现:将INT_TIME0,INT_TIME1,INT_TIME2,INT_TIME3,INT_TIME4相应位置0。
通过按键中断,达到了控制流水灯的目的,实现了中断。
因篇幅问题不能全部显示,请点此查看更多更全内容