做素材网站服务器,ui设计的软件,保定建设工程信息网,高端企业网站建设蓦然郑州网站建设TQ210——S5PV210中断体系 中断是指 CPU 在执行程序的过程中#xff0c;遇到异常情况需要处理#xff0c; CPU停 止当前程序的运行#xff0c;保存当前程序运行处的必要参数#xff0c;转去处理这些异常情况#xff0c; 处理结束后再返回当前程序的间断处#xff0c;继续…TQ210——S5PV210中断体系 中断是指 CPU 在执行程序的过程中遇到异常情况需要处理 CPU停 止当前程序的运行保存当前程序运行处的必要参数转去处理这些异常情况 处理结束后再返回当前程序的间断处继续执行原程序。
1、异常向量表 2、一级异常处理 #define pExceptionIRQ ( *((volatile unsigned long *)(0xD0037418)) )
pExceptionIRQ (unsigned long)IRQ_handle;
IRQ_handle: sub lr, lr, #4 // 保存现场 stmfdsp!, {r0-r12, lr} bl irq_handler // 跳转到中断处理函数ldmfd sp!, {r0-r12,pc}^ // 恢复现场3、VICX S5PV210共有4个VICVectored Interrupt Controller向量中断控制器以菊花链的方式互连共同支持了多达93个中断源。 这些中断源分别为系统DMA、定时器、外设、多媒体、音频、安全等模块提供中断服务 中断种类有IRQ和FIQ可选配在中断处理级别上都属于二级。 菊链方式的4个TZIC和4个VIC是为了能支持93个中断源。在可信域设计里TZIC为安全中断系统提供一个软中断。它提供nFIQ中断的安全控制和在没安全边际的系统(vic)上中断控制器掩盖中断源。用后者来生成nIRQ信号。 菊链一种沿总线传输信号的方法其中设备串联而信号则从一台设备传向下一台设备。菊花链连接方法可根据设备在总线上的电气地位分配其优先级
4、寄存器
1IRQSTATUS 中断状态 2VICINTSELECT中断类型选择irq或者fiq 如何保证FIQ具有最佳的中断响应速度
1、FIQmode具有更多的banked register因此进入FIQ的ISR后可以避免因保存寄存器而浪费的时间。
2、FIQ在异常向量表中处于末端因此ISR可以不用跳转到别处而直接在向量表末端开始ISR。 3VICINTENABLE/VICINTENCLEAR中断使能/失能设置 中断允许寄存器中每个bit代表一个中断源。向VICINTENABLE寄存器中相应bit写1可以使能该中断写0无效读取时若该中断允许则返回1若未允许则返回0而向VICINTENCLEAR寄存器相应bit写1可以禁止该中断写0无效。
在另一些CPU中只有一个INTENABLE寄存器。写1可以使能中断写0则会禁止中断。 4ISR相关 ISR如何设置
S5PV210的中断体系采用如下的ISR确定策略
1、将93个中断源分为4组每组的ISR组成一个数组以中断号为数组索引。
2、4组ISR数组的首地址分别存放在VICVECTADDR0VICVECTADDR3中。
绑定ISR时只需将用户自己编写的ISR地址放入ISR数组中以中断号为索引的位置即可
ISR如何获得
当中断发生并且在一级异常向量表中跳转入IRQ后首先要保护现场然后转入相应的ISR执行。
获取相应的ISR时只需读取VICADDRESS寄存器即可。因为S5PV210的中断系统会自动将当前发生的中断对应的ISR从ICVECTADDRx中推入VICADDRESSx中。这省去了我们使用查询方式确认中断号的麻烦提高了IRQ的响应速度。 5、中断处理
中断处理过程
1、硬件事件发生SRCPENDING位响应挂起
2、根据中断允许设置决定是否产生中断挂起INTPENDING并根据INTSELECT决定中断种类为IRQ还是FIQ
3、响应中断CPU根据一级异常向量表自动跳转到IRQ或FIQ异常入口
4、对于IRQ在二级中断表中根据INTNUM进行判断跳转入相应的ISR执行
5、中断返回本次中断事件结束 如何使用中断
1、全局性设置。包括设置一级异常向量表、清理所有中断挂起、禁止所有中断源等。
2、针对要使用的中断进行具体设置。包括设置中断种类为IRQ/FIQ中断允许、优先级等。
3、绑定中断处理程序。以便在二级中断处理时能够跳转到正确的ISR。
4、设置中断允许位以允许中断发生。 不同平台中断处理差异有些平台是置1允许中断而另一些平台是清0允许中断二级中断时获取中断号意味着获取中断ISR的方式不同。这些不同会影响平台的中断响应速度。 6、外部中断 外部中断意为来自SoC外部的中断是相对于内部中断来自SoC内部即各种内部外设产生的中断譬如定时器中断来说的。 S5PV210共支持32个通道的外部中断每个外部中断有对应的GPIO接收来自外部的中断信号。中断触发方式有电平高、低、边沿上升沿、下降沿、Both等5种方式可选配。
1EXT_INT_0_CON外部中断控制寄存器 EXT_INT_x_CON(x 0~3)用来配置32个外部中断通道的触发模式。 2EXT_INT_0_MASK外部中断允许/禁止 EXT_INT_x_MASKx03用来使能/禁止相应的外部中断通道 3EXT_INT_0_PEND外部中断挂起寄存器 EXT_INT_xPENDx03用来标识外部中断挂起。向相应bit写1可以清除中断挂起 6、外部中断设置流程
1、全局的中断初始化
2、设置相应的GPIO为XEINTx
3、绑定中断处理程序
4、设置EXT_INT_x_CON以配置触发方式
5、写EXT_INT_x_PEND清中断
6、设置EXT_INT_x_MASK以使能相应通道
7、最后使能相应外部中断通道
分析
1、中断挂起产生CPU自动跳转到一级异常向量表中IRQ入口地址中。
2、由IRQSTATUS和VICADDRESS机制得到相应ISR地址并进入执行。
3、ISR内部内容应该包含三部分
(1)、有效isr处理按键对应的任务
(2)、向VICxADDR写入任意值清中断
(3)、向EXT_INT_x_PEND写1清除相应中断