ARM7TDMI体系的中断向量的地址是动态分配在中断向量控制器的寄存器中,例如,意法半导体(ST)公司生产的STR71x系列ARM微控制器,其增强型的中断控制器(EIC)的EIC_IVR寄存器(中断向量寄存器)、EIC_SIRn寄存器(源中断寄存器)都是用于存储相关中断通道的中断服务程序在存储器中的地址,内核响应IRQ中断后,再根据当前对应的中断通道的中断向量进行散转,执行相应的中断服务程序。对于一般的8位MCU,通常是将向量中断人口固定分配ROM中,例如MCS-51单片机各个中断的人口地址是固定的。两者相比,ARM的中断体系具有较大的灵活性,但却降低了安全性和可靠性;MCU的中断向量体系虽然失去了灵活性,但确保了系统的安全性和可靠性。
在系统长时间运行和强干扰的作用下,保存在寄存器中的ARM的各个中断地址很容易受干扰信号的影响。当中断向量地址被改写后,程序必定跑飞,这种情况是无法忍受的,特别是在工控系统中。针对这种情况,本文提出了基于STR71x系列ARM微控制器将中断向量固化到ROM的思路,可以提高系统的安全性和可靠性。
2 STR71x结构分析
STR71x系列是意法半导体(ST)公司生产的基于ARM7TDMI内核的微控制器,片上集成高达256 KB+16 KB的Flash和64 KB的RAM,拥有丰富的外设和增强的I/O功能,具有高性价比。STR71x内部有一个独立的增强型中断控制器,可完成多个中断通道的硬件处理、中断优先级决策和自动产生中断向量等功能,如图1所示。
EIC中的优先级解码器是一个不断计算挂起IRQ最高优先级的组合模块,当决策出最高优先级中断后,它把EIC_IVR寄存器(中断向量寄存器)更新为最高优先级中断服务程序的地址,并且拉低nIRQ内部信号。软件读取EIC_IVR寄存器的内容后。获得当前中断通道所对应的中断服务程序的地址,从而散转执行对应的中断服务程序。而在读取EIC_IVR寄存器值的一个时钟周期后,EIC_CICR寄存器(当前中断通道寄存器)被更新为当前响应的IRQ中断通道的标号,EIC_CIPR寄存器(当前中断优先级寄存器)被更新为当前响应的IRQ中断通道的优先级。
中断向量寄存器EIC_IVR是一个32位的寄存器,其中,高16位IVR[31:16]不依赖于当前响应的中断。对于所有的IRQ中断通道来说,这16位都是相同的,它是在初始化时由用户程序配置的。而低16位IVR[15:0]则依赖于当前响应的中断(即当前具有最高优先级的有效中断),并且它是当前系统响应的中断通道所对应的EIC_SIR寄存器中源中断向量(SIV)的副本。EIC_SIRn是通道n的源中断寄存器,其高16位SIV[31:16]是中断通道n对应的中断服务程序的存储器地址的低16位。EIC_IVR寄存器的高16位IVR[31:16]与EIC_SIRn的高16位SIV[31:16]构成了中断通道n对应的中断服务程序的存储器地址的首址。
3 IRQ中断防御体系的构建
根据上面的分析可知,STR71x ARM中各个IRQ中断通道的中断服务程序入口地址是动态存放在EIC_IVR、EIC_SIRn等可读写的寄存器中,即存放在RAM中的,这样很容易受干扰信号影响。当这些寄存器中的中断服务程序地址被干扰信号改写,产生中断时,系统肯定无法正确进入相应的中断服务程序,系统程序必定跑飞。所以,保护各个IRQ中断通道的中断服务程序入口地址就显得相当必要。
软件根据EIC_IVR寄存器中存放的地址去散转执行对应的中断服务程序的具体实现代码。下面列举了ST公司公布的标准固件代码中关于IRQ中断部分处理的代码:
在上述程序中,系统响应中断后,首先把R0~R12、SPSR等寄存器入栈保护,然后再通过读取E-IC_IVR寄存器获得当前响应的中断通道所对应的中断服务程序入口地址。 [page]
由前面的分析可知,EIC_CICR寄存器是存储当前响应的IRQ中断通道的标号,EIC_CICR寄存器在此成为构建防御体系的关键,利用它可将中断向量固化到ROM中。
在构建的防御体系中,EIC响应IRQ中断,软件读取一次EIC_IVR后,EIC_CICR寄存器更新当前响应的IRQ中断通道的标号,然后获取此标号的值,跳转到固化在ROM的对应当前中断通道的中断服务程序入口,执行所响应的中断通道的中断服务程序。在上述所列出代码的基础上,修改了代码如下,实现防御体系的构建。
比较修改前后的代码,修改后每次执行的代码只比原来增加了5条指令,中断响应处理的实时性有所下降,但是,在高速的ARM微控制器上,牺牲5条指令周期的时间来换取系统的可靠和安全是完全值得的。
一般情况下,程序员不会对未使能的中断通道编写中断服务程序,故此,在32个IRQ中断通道散转向量表中,可以把没有使能的中断通道直接链接到复位向量进行强行复位,代码如下:
4 结束语
本文提出的IRQ中断防御体系的构建,通过了Kell ARM3.04的开发环境调试。并成功应用在基于STR71x ARM微控制器的某数控切割加工的控制系统。在持续一个月的系统运行测试中,对在程序中没有构建IRQ中断防御体系的系统(简称“A系统”)和构建了IRQ中断防御体系的系统(简称“B系统”)相比较,发现A系统曾经出现过两次的程序跑飞现象,而B系统的运行稳定,未出现程序跑飞的情况。可见,采用了该防御体系后,大大提高ARM微控制器的抗干扰能力,增强了系统的可靠性和安全性。
上一篇:AT91RM9200处理器同步串口SSC的特性分析与应用
下一篇:基于ARM+uClinux的嵌入式系统的开发
推荐阅读最新更新时间:2024-03-16 13:58