关闭

14.Interrupt 草稿

989人阅读 评论(0) 收藏 举报

14、中断控制器

概总

2440可以接受60个中断源请求。这些中断有内部的DMA,UART,IIC等提供中断源请求。在这些中断源中,UART,AC97以及EINT中断??OR关系。

当接受到内部或者外部的多个中断请求时候,中断控制器处理请求相应FIQ(快速中断),IRQ。

 中断处理程序依据硬件逻辑优先级,并将结果写入中断Pending寄存器(就是所谓的INTPND,EINTPND),帮助用户来注意是那个中断源产生中断。

中断控制操作

F-bit和I-bit编程状态寄存器(PSR)

如果ARM920T 的F-bit设置为1,则CPU不接受快速中断请求(FIQ)。如果I-bit设置为1,那么不接受中断请求(IRQ).因此中断控制器能够接受中断,通过设置F-bit或者I-bit置0,并且设置相应的INTMSK位置0,来接受处理中断。

中断模式

有FIQ,IRQ

中断pendig 寄存器2440有2个中断pending寄存器:Source pending register(SRCPND)以及interrupt pending register(INTPND).这些pending 寄存器指明是否有发生了中断请求。当中断源请求响应中断服务程序时候,SRCPND的相应位置位要置为1,同时,INTPND寄存器只有一位是会被自动设置为1的。如果中断被掩盖掉了,那么SRCPND寄存器的相应bit寄存器会设置为1,这样就不会引起INTPND寄存器的变化了。如果当INTPND的某一个寄存器的值相应位设置为1,中断服务程序就开始了。SRCPND&INTPND寄存器都能够读写,因此中断服务程序处理时候,必须先将SRCPND寄存器置1,然后清除INTPND的寄存器相应位。

 中断掩盖寄存器

这个寄存器指明中断disable,如果相应位置位为1的时候。如果INTMSK的某个位设置为0的时候,那么这个中断可以正常的响应。

 中断优先级发生模块

优先级逻辑由P355页的表格所示,有6个第一中断,一个第二中断组成。

优先级模块的设置,主要由ARB_MODE&ARB_SEL的设置bit位,来进行6个中断源的优先级命令设置。

模块0始终处于最高优先级,模块5时钟处于最低优先级。因此通过修改ARB_SEL可以设置改变REQ1和REW4的优先级顺序。

如果ARB_MODE的相应bit设置为0,ARB_SEL?????????

 

中断控制特殊寄存器

有5个寄存器:Source pending register,  interrupt mode register,  mask register  ,priority register ,and interrupt pending register.

Source pending register 通常都是第一个寄存器被访问的,然后通过mode register分成FIQ还是IRQ这两组,最后多个IRQ中断基于优先级寄存器

SRCPND寄存器

总的一句话来说,就是当发生中断的时候,需要将SRCPND相应位置1,这样你的中断才有效。

    rEINTPEND = 0xffffff;
    rSRCPND = BIT_EINT0|BIT_EINT1|BIT_EINT2|BIT_EINT8_23; //to clear the previous pending states
    rINTPND = BIT_EINT0|BIT_EINT1|BIT_EINT2|BIT_EINT8_23;

这样就认为你的中断是合法的请求。

 

INTMOD 中断模式选择  0:IRQ。1:FIQ

INTMSK 中断掩盖:  0:中断服务可以用,1:掩盖,不能用

优先级PRIORITY :IRQ模式下的优先级

INTPND寄存器: 总的来说,0:不能响应中断,1:可以中断请求    有优先级模式下 only one bit can be set to 1.

 

 

 

 

 

 

 

 

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:50422次
    • 积分:748
    • 等级:
    • 排名:千里之外
    • 原创:23篇
    • 转载:1篇
    • 译文:0篇
    • 评论:18条
    linux博客