中断控制器对soc 中的各个外设进行中断管理,进行优先权排队,并送出IQR信号给CPU;
中断控制器在整个系统中的结构:
IRQ<n>来源于不同的中断源,比如:I2C,SPI等,INTC收集这些中断,进行优先权排队,最后会发送到cpu.
硬件互联结构:
对于设计而言:中断源模块三组中断寄存器是必须存在的:中断使能,中断状态,中断屏蔽;
软件层面实现过程:
当cpu收到中断,会进入软件服务程序,此时中断产生,在中断服务程序中会确认中断类型,清除中断,屏蔽其他中断,并进入中断处理程序,处理完毕之后取消中断mask;
如果涉及到中断嵌套,会优先处理高级中断,保护低级中断现场,待高级中断处理完成后,继续执行低级中断。
中断控制器在整个soc中的位置
INTC 一般挂载到apb总线上,可以收集来自I2C, SPI,Watchdog等中断,后通过仲裁会将中断信号给到CPU。
中断控制器信号列表
- APB标准接口信号
- 外设中断源信号(num 自定义)
- 输出的cpu 的irq (普通中断)/fiq(快速中断)
中断控制器基本框架
apb_interface:
是INTC与总线的接口模块,同时也是INTC的控制模块,里边包含了INTC所有的寄存器信息;
int_gen:
接收中断源信息,确认中断源(irq/fiq),进行其他中断屏蔽,软件中断;
Priority_logic:
用于软件中断优先级屏蔽,对未屏蔽的中断进行优先权选择,选择最高优先级中断,产生中断信号;
普通中断寄存器介绍
IRSR:
普通中断状态寄存器,当中断源无效时,置为0;
IMSR:
中断屏蔽状态寄存器,对应的中断源,使能位无效,或屏蔽位有效时,置为1;
IFR:
普通中断软件强制中断寄存器,是否软件强制该位对应的中断源发出中断信号;
IFSR:
最终中断状态寄存器,只有当优先级大于IPLR寄存器所设置的中断源时才能在此寄存器相应位置1;
IPLR:
中断优先级寄存器,设置普通中断的优先级门槛,只有优先级大于此设置值的中断,才会通过优先级过滤逻辑将该中断送到cpu.
IER:
中断允许寄存器,是否允许对应中断源的IRQ信号;
ISR:
中断状态寄存器,当对应中断源或使能位(IER)无效时,该位置为0;
IMR:
中断屏蔽寄存器,是否屏蔽对应的IRQ中断信号;
快速中断寄存器介绍
快速中断寄存器和普通中断寄存器类似;
中断源
可能的内部中断:
- RTC: real time counter,可以产生秒中断,分中断,定时中断,watchdog 中断;
- UART:数据发送结束中断,数据接受有效中断;
- Timer: 定时/计时中断;
- CMAC:DMA错误,DMA传输完成中断;
- LCDC:错误响应,帧结束,帧起始;
- SPI:FIFO空满,发送FIFO 下溢,接受FIFO上溢;
可能的外部中断:
- 比内部中断复杂,不可控
- 通常和GPIO口复用
- 中断源触发方式(上升沿,下降沿,高电平,低电平)
- 外部中断信号特殊处理(去毛刺,寄存,同步到总线时钟)
- 外部中断需要清除
外部中断使用过程
- 清除外部中断,在使用中断前,必须先清除之前的中断;
- 配置GPIO控制寄存器, a.配置管脚方向为输入b.配置中断触发类型c.配置管脚模式为中断模式)
- 配置中断寄存器,设置INTC 屏蔽寄存器的相应位的屏蔽中断,设置INTC相应位以允许该中断源产生中断
ARM 中断向量表