在ARMZ中提供两种中断,FIQ和IRQ,一般情况下都用IRQ中断。其中有七种异常中断模式。中断分为源中断,和子中断源,比如说外部中断可以都是源中断,只要设置好触发的条件,就可以直接跳进中断程序,但是串口不是,他的触发类型很多,接收,发送,错误,超时都可以触发中断,所以这类中断源出了一个源中断,下面还有子中断,
其中对于外部中断跟串口中断区别比较:
对于外部中断源,没有子中断源的时候,设置好是什么触发类型以后我们只需要以下语句就可以使能中断:
pISR_EINT0=(unsigned)Eint0Handler;//告诉中断处理中断函数的入口地址
EnableIrq(BIT_EINT0);//开中断
在退出该中断的时候:
ClearPending(BIT_EINT0);//清除中断标示,防止中断反复触发
就可以了
对于串口就不行了,除了需要使能源中断,也需要使能子中断源类型:
EnableIrq(BIT_UART0);//打开UART0中断
pISR_UART0 =(unsigned)UART0Handler;
EnableSubIrq( BIT_SUB_RXD0);//使能子中断源
在退出中断时候也需要:
ClearPending(BIT_UART0);//清除中断标示,防止中断反复触发
ClearSubPending(BIT_SUB_RXD0);//清除子中断标志
中断中常用得寄存器SRCPND(哪个中断源在等待中断请求被处理)其只SRCPND寄存器每一位都是由中断源自动设置,不管INTTMSK(中断屏蔽寄存器)寄存器中对应位是否为1,在指定中断源的程序中,寄存器对应的位必须先被清除,这样才能正确处理来自中断源的程序。
中断模式寄存器INTMOD,是对ARM内核将以FIQ,还是IRQ模式相应的中断.
外部中断判断寄存器EINTPND 外部中断判断寄存器是用来判断外部中断源INT[23:4]
2410外部中断实验。
中断流程
ENT0中断流程
1将端口设置为中断模式
2端口上拉disable
3通过~CON设置端口为输出功能、
4通过EXINT设置中断触发方式
5建立中断向量到中断服务程序
6中断服务程序
7开中断INTMSK
8清除中断
阅读(979) | 评论(0) | 转发(0) |