S3C2440系统中断
时间:11-20
来源:互联网
点击:
| 寄存器名 | 地址 | 是否读写 | 描述 | 复位默认值 |
| INTSUBMSK | 0x4A00001C | R/W | 子中断源信号屏蔽存寄存器,设置相应位来屏蔽中断信号: 0:未屏蔽,中断可用 1:屏蔽中断信号 | 0xFFFF |
| INTSUBMSK | 位 | 描述 | 初始值 |
| Reserved | [31:15] | 未使用 | 0 |
| INT_AC97 | [14] | 0 =未屏蔽1 =屏蔽中断 | 1 |
| … | … | … | … |
| INT_RXD0 | [0] | 0 =未屏蔽1 =屏蔽中断 | 1 |
该寄存器用来屏蔽子中断源信号,默认值为全部子中断都被屏蔽掉,因此要想处理某个硬件中断,必须要打开中断屏蔽位,通过写入0来取消屏蔽中断。
(3)SRCPND中断源暂存寄存器
表3-9中断源暂存寄存器(SRCPND)
| 寄存器名 | 地址 | 是否读写 | 描述 | 复位默认值 |
| SRCPND | 0x4A000000 | R/W | 中断源暂存寄存器,保存中断请求状态: 0:没有中断请求信号 1:中断请求信号产生 | 0x00000000 |
| SRCPND | 位 | 描述 | 初始值 |
| INT_ADC | [31] | 0 =未产生中断1 =产生中断 | 0 |
| … | … | … | … |
| EINT0 | [0] | 0 =未产生中断1 =产生中断 | 0 |
该寄存器用来保存中断源信号,当某个中断信号产生之后,SRCPND对应位被自动置1,该位会一直保持被置位,只到中断处理程序将其清除为止,需要注意一下,清除中断是通过向对应位写入1来清除,而不是写入0,写入0无效。
(4)INTMSK中断源屏蔽寄存器
表3-10中断源屏蔽寄存器(INTMSK)
| 寄存器名 | 地址 | 是否读写 | 描述 | 复位默认值 |
| INTMSK | 0x4A000008 | R/W | 中断源信号屏蔽存寄存器,设置相应位来屏蔽中断信号: 0:未屏蔽,中断可用 1:屏蔽中断信号 | 0xFFFFFFFF |
| INTMSK | 位 | 描述 | 初始值 |
| INT_ADC | [31] | 0 =未屏蔽1 =屏蔽中断 | 1 |
| … | … | … | … |
| EINT0 | [0] | 0 =未屏蔽1 =屏蔽中断 | 1 |
该寄存器用来屏蔽中断源信号,默认值为全部中断都被屏蔽掉,因此要想处理某个硬件中断,必须要打开中断屏蔽位,通过写入0来取消屏蔽中断。
(5)INTPND最高优先级中断暂存寄存器
表3-11最高优先级中断暂存寄存器(INTPND)
| 寄存器名 | 地址 | 是否读写 | 描述 | 复位默认值 |
| INTPND | 0x4A000010 | R/W | 最高优先级中断暂存寄存器里面保存有经过优先级仲裁的结果: 0:没有中断请求信号 1:中断请求信号产生 | 0x00000000 |
| INTPND | 位 | 描述 | 初始值 |
| INT_ADC | [31] | 0 =未产生中断1 =产生中断 | 0 |
| … | … | … | … |
| EINT0 | [0] | 0 =未产生中断1 =产生中断 | 0 |
该寄存器保存了经过优先级仲裁出的中断信号位,它是所有当前中断请求里优先级别最高的中断,因此该寄存器里的值最多有一位被置1,通常中断处理程序中会通过读取该寄存器的值来获得当前正在处理的中断请求。中断处理完成之后,通过写入1来清除中断。
(6)INTOFFSET中断号偏移量寄存器
表3-12中断号偏移量寄存器(INTOFFSET)
| 寄存器名 | 地址 | 是否读写 | 描述 | 复位默认值 |
| INTOFFSET | 0x4A000014 | R | 中断号偏移量寄存器,用来保存当前处理的中断号 | 0x0000000 |
该寄存器里存放的是经过优先级仲裁出的中断信号对应的中断号,是一个0~31之间的整数,其实它就是INTPND里对应的位号,比如:INT_UART0产生了中断,INTPND里第28位置1,INTOFFSET里保存的整数就是28,多出来这个寄存器的目的主要是方便中断处理程序查询中断源,清除中断源:
#define TIMER0_IRQ_OFT10//时钟0定时中断
#define EINT0_IRQ_OFT0//开发板K1按键1对应外部中断EINT0
voidhandle_irq()
{
unsigned long irqOffSet = INTOFFSET;//取得中断号
switch(irqOffSet)
{
case TIMER0_IRQ_OFT://当前中断为定时器0中断
do_timer();//跳入定时器0处理程序
break;
case EINT0_IRQ_OFT://当前中断为K1按键触发
do_key1_pressed();//处理K1按下事件
break;
}
SRCPND &= (1
}
(7)INTMOD中断模式寄存器
表3-13中断模式寄存器(INTMOD)
| 寄存器名 | 地址 | 是否读写 | 描述 | 复位默认值 |
| INTMOD | 0x4A000004 | R/W | 中断模式寄存器,指定对应中断模式: 0 = IRQ一般中断模式 1 = FIQ快速中断模式 | 0x0000000 |
| INTMOD | 位 | 描述 | 初始值 |
| INT_ADC | [31] | 0 = IRQ 1 = FIQ | 0 |
| … | … | … | … |
| EINT0 | [0] | 0 = IRQ 1 = FIQ | 0 |
通过设置ARM内核产生中断。需要注意的是,快速中断不存在优先级仲裁,只能有一位被设置为FIQ模式。
S3C2440系统中 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)
