1. DM355中断控制器架构解析
DM355的中断控制器(INTC)采用典型的两级中断处理机制,支持64个独立中断源。作为ARM926EJ-S内核的配套组件,其设计充分考虑了实时性需求与资源占用的平衡。
1.1 核心寄存器组布局
INTC通过内存映射方式提供16个关键寄存器,按功能可分为三类:
- 状态寄存器:FIQ0/1、IRQ0/1,分别反映0-63号中断在FIQ和IRQ线上的触发状态
- 控制寄存器:EINT0/1(中断使能)、INTCTL(操作模式)、EABASE(入口表基址)
- 优先级寄存器:INTPRI0-7,每3bit控制一个中断源的优先级(0-7级)
实际开发中需注意:所有寄存器必须按32位访问,即使某些字段保留未用。误用16位或8位访问可能导致总线错误。
1.2 中断响应流程详解
当中断事件发生时,硬件按以下顺序处理:
- 外设置位中断标志,对应EINTx寄存器位必须已使能
- INTC比较当前中断与正在处理中断的优先级
- 若新中断优先级更高,INTC将:
- 冻结INTPRIx寄存器值
- 更新FIQENTRY/IRQENTRY为对应向量地址
- 向ARM核发送FIQ或IRQ信号
- ARM内核响应中断,跳转到0x1C(FIQ)或0x18(IRQ)异常向量
c复制// 典型的中断服务例程(ISR)框架
void __irq fiq_handler(void)
{
uint32_t vector = *(uint32_t*)FIQENTRY; // 读取向量地址
void (*isr)(void) = (void(*)(void))vector;
isr(); // 跳转到实际ISR
INTC->FIQ0 = 0xFFFFFFFF; // 写1清除中断状态
}
1.3 优先级仲裁机制
优先级比较遵循两个维度:
- 中断类型优先级:FIQ > IRQ
- 编号优先级:同类型中断中,编号小的优先
INTPRIx寄存器可动态调整各中断源的软件优先级(共8级)。实际开发中建议:
- 实时性要求高的中断(如DMA完成)设为FIQ+高优先级
- 批量数据处理中断(如UART接收)设为IRQ
