- 3
- 0
- 约1.29万字
- 约 10页
- 2021-11-30 发布于福建
- 举报
44b0 中断介绍
一般的 ARM7 核是软件判断优先级, if there are 10 interrupt requests at the same time, you
can determine the interrupt service priority by reading the interrupt pending register 。这会耗费
大量时间。而 44B0 支持向量中断,多个中断请求产生时,硬件逻辑会跳转至相应 ISR 。
向量中断:
只有 IRQ 支持向量中断。
有个复杂的硬件逻辑来查找 ISR ,有什么主从什么 GA/GB ,还有一堆专用 REG ,都是以 I打
头的,如 I_PSLV 之流。
代码里那个 0XEA000000 也是在这里用的。
暂时不用看这块,无所谓。
44B0 默认没有中断嵌套。
30个中断源,其中 EINT4567 是 OR在同一个源上, UART0 和 1的ERROR 中断也是。共 26
个中断位,优先级大致为:
EINT0-7 — DMA —WDT —T/C0-5 — URX — IIC — UTX — RTC—ADC
INTCON R/W 0X7
中断控制 REG :I/F位为屏蔽中断位,即清零为开中断。
INTPND R 0X0
中断标志 REG :只要产生中断请求,则置位,必须向 I/F_ISPC 相应位写一清除
I_ISPC/F_ISPC W UNDEF
中断标志清除 REG ,用来清除 INTPND 相应位
INTMOD R/W 0X0 IRQ/FIQ 选择, 0 为 IRQ
INTMSK R/W 0X7FFFFFF
中断屏蔽 REG : 1为屏蔽中断, 0 则中断可用,最高位为 GLOBAL 位
当INTMSK 在 ISR 中置位且向量中断,则 INTMSK 不会屏蔽已在 INTPND 中置位的向量。( bug )
应先清除 INTPND 再置位 INTMSK 。
I_ISPR R 0X0
指示正在被处理的中断,即使 INTPND 中多个标志位置位, I_ISPR 也只有一个位会置位
EXTINT R/W 0X0
外部中断控制 REG :决定每个 EINT 的触发方式和触发极性,每个 EINT 占三位,各 5 种配置方式
每个 EINT 引脚都有数字滤波器,所以大于 3 时钟周期的信号会被识别。
EXTINTPND R/W 0X0
外部中断 4567 标志 REG :指示哪个 EINT 发生。必须在 ISR 中写一清除( R/W? )
外部中断 4567 ,非向量模式的配置
一、配置寄存器
rINTCON = 0x5 ; // 无向量中断模式
rINTMOD = 0x0 ; //All=IRQ mode
rPCONG = rPCONG | ( 0xff 8 ); //EINT7~4
rPUPG = rPUPG (~(0xf 4)) ; //pull up resister is enable
rEXTINT = rEXTINT (~(0xffff 16)) ; //EINT4567 低电平触发中断
pISR_EINT4567 = (unsigned)Key_Interrupt ; //将中断 isr 地址放入 ISR 区
rINTMSK = ~( BIT_GLOBAL | BIT_EINT4567 ) ; //start INT
//#define BIT_GLOBAL (0x126)
原创力文档

文档评论(0)