学习2440外部按键中断后的理解和疑问
扫描二维码
随时随地手机看文章
一、2440按键中断的步骤
1,初始化寄存器GPGCON,设置对应的GPG0,GPG3,GPG5,GPG6,GPG7,GPG11为外部中断的功能接口,它们分别对应外部中断EINT8,EINT11,EINT13,EINT14,EINT15,EINT19
2,设置外部按键中断的触发方式
这里包括EXTINT1和EXTINT2两个寄存器的配置,分别对EINT8,EINT11,EINT13,EINT14,EINT15,EINT19六个外部中断设定!按键没按下时为高电平,被按下后为低电平;所以设定为低电平触发!
3,设定各个按键的中断源不屏蔽!
这里就是设置寄存器EINTMASK,将对应EINT8,EINT11,EINT13,EINT14,EINT15,EINT19的位,置0!也就是不屏蔽! 置1表示屏蔽,初始化时为屏蔽的!
4,设定寄存器EINTPEND,SRCPND,INTPND(2440官方代码中设置了,个人觉得没必要,测试通过了)
官方设置是这样的: 将EINTPEND,SRCPND,INTPND中对应的EINT8,EINT11,EINT13,EINT14,EINT15,EINT19位全部置1处理;根据2440文档9-33,14-8,14-15的说明,1=Occur interrupt.表示中断发生!It is cleard by writing “1” PS:因为是中断的初始化,复位后怎么会立马有中断请求呢?可能我没能理解这里置1的意思.所以,我对这三个寄存器初始化时 没有设置,取默认的复位值,即0x00
5,将中断服务函数的地址传给对应的中断向量处(重点理解,解释pISR_EINT8_23=(U32)extint8_23)
代码为pISR_EINT8_23=(U32)extint8_23;//extint8_23为中断服务函数的地址!pISR_EINT8_23为指向中断向量表的HandleEINT8_23(2440init.s中). //#define pISR_EINT8_23 (_ISR_STARTADDRESS+0x34) 这里的_ISR_STARTADDRESS=0x33ffff00,为什么是这个数呢,在网上查了很多,有位网友是这样解释的:_ISR_STARTADDRESS=_RAM_ENDADDRESS-0x100,那么_RAM_ENDADDRESS又是多少呢(参考2440用户手册1.3.2),因为2440采用了2片32M的SDRAM芯片并接形成32位总线数据宽度。物理起始地址为0x30000000,再加上64M的空间,就是_RAM_ENDADDRESS的值0x34000000,那这里为什么是_RAM_ENDADDRESS-0x100呢,为什么是减去0x100(256字节的空间)呢?谁能帮我解释下,谢谢
答: