打印
[ZLG-ARM]

S3C44B0X中断控制器

[复制链接]
1345|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
米其林r|  楼主 | 2012-2-29 22:41 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
对S3C44B0X datasheet第十一章中断控制器的总结
1.向量中断和非向量中断:
(1)向量中断—由硬件提供ISR的入口地址
     非向量中断—由软件计算ISR的入口地址
(2)S3C44B0X只支持IRQ模式中断的向量中断模式,FRQ不行。
(3)向量中断有效地减少了中断延迟
2.PSR(程序状态寄存器)中的I-BIT和F-BIT
置‘1’—CPU不处理相应的中断
清‘0’—CPI处理相应的中断,但中断的屏蔽位必须清零
3.中断源
S3C44B0X有30个中断源,进中断控制器26个中断源,EINT4/5/6/7 、UERROR0/1
为同一个中断源。
4.中断优先级
只有IRQ模式有优先级,中断优先级包括5个uints—1个主unit和4个从units
units模块图如下:

左边一个为主优先级单元(master unit),右边为4个从优先级单元(slave unit),每个slave unit包括4个可编程优先级的中断源,和两个固定优先级的中断源,master unit也一样。master unit优先级可编程的中断源来自4个slave unit—mGn(n = A,B,C,D),还有两个来自固定优先级的RTC和ADC中断源。
5.中断控制器SFR
(1).INTCON—中断控制寄存器
此寄存器与编程有关的位有bit2,bit1,bit0
bit2:0 = 向量中断模式,1 = 非向量中断模式
bit1:0 = IRQ中断使能,1 = 保留
bit0:0 = FRQ中断使能, 1 = 保留
(2).INTPND—中断请求寄存器
此寄存器中有用的位为25:0,1 = 相应的中断源产生请求,0 = 相应的中断源没有产生请求
(3).INTMOD—中断模式寄存器
此寄存器中有用的位也为25:0, 1 = 相应的中断源为FRQ, 0 = 相应的中断源为IRQ
(4).INTMSK—中断屏蔽寄存器
此寄存器中有用的位为26:0
bit26:全局中断屏蔽位,1 = 屏蔽所有中断,0 = 不屏蔽所有中断。
bit25:0,1 = 屏蔽相应的中断, 0 = 不屏蔽相应的中断。
(5).I_PSLV—IRQ priority of slave register
此寄存器分为几个位域:[31:24] : 决定去mater unit的mGA unit中4个可编程优先级的中断源的 优先级,这个域又分为几个子域:[31:30],[29:28],[27:26],[25:24]。分别决定四个中断源的优先级,00:优先级1,01:优先级2,10:优先级3,11:优先级4。如位域[31:24]类似,[23:16],[15:8],  [7:0]分别决定着其他slave unit的优先级分配。
要注意的是:必须为四个中断源分配不同的优先级
(6).I_PMST—IRQ priority of master register
此寄存器决定四个可编程的slave unit的优先级,有用的位如下:
bit12: 0 = master unit为轮转调度(round-robin)优先级模式, 1 = 固定优先级模式
bit[11:8]: 这四位分别决定四个slave unit的优先级模式。0 = 轮转调度优先级模式, 1 = 固定优先级模式
bit[7:6]: 决定mGA slave uint的优先级。01:优先级2,10:优先级3,11:优先级4。
与bit[7:6]类似,位域[5:4],[3:2],[1:0]分别决定其他三个slave uint 的优先级。
需要注意的是:即使不使能中断源,此寄存器也要为4个slave uint分配不同的优先级。
(7).I_CSLV—Current IRQ priorities of slave register
此寄存器保存着当前IRQ中断的优先级(slave unit),如果使能round-robin模式,此寄存器的值与I_PSLV寄存器的值不同,(呵呵~~也不清楚why)

(8).I_CMST—Current IRQ priority of master register
与I_CSLV意义一样。
(9).I_ISPR—IRQ interrupt service pending register
此寄存器有用的位为[25:0], 这26为分别指示CPU正在处理某一中断,
1 = 表示CPU正在处理某一中断,0 = 表示CPU没有服务某一中断。
需要注意的是:这个寄存器始终只有一位为‘1’。
(10).I_ISPC/F_ISPC —IRQ/FIQ INTERRUPT SERVICE PENDING CLEAR REGISTER
此寄存器用来清除INTPND寄存器中请求的中断(通过向相应为写'1' )
这是由于INTPND寄存器是只读的,同时这也能减少代码的尺寸,但这不是初衷。

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

340

主题

1587

帖子

3

粉丝