PIC32中断原理之浅析
中断是基于微控制器或微处理器的系统中,衡量系统性能的一个方面,具体指标有响应时间,中断数量;其中,响应时间是比较重要的一个概念,指系统发生中断(起始)到cpu开始处理中断的时间。因为cpu要保存/恢复上下文环境,保存/恢复时间是处理中断过程中的另外一个参量。在pic32单片机中,mips32内核采用了寄存器shadow与向量中断方式,保证了cpu响应的快速性,在pic32架构中,响应时间非常短,几乎固定为3到4指令周期;在其他32位架构的中断机制中,共同点是缓存、总线不确定仲裁模块会影响到整个的响应时间,因此增加了响应时间的不确定性。
在pic32单片机中,中断的出现是以最终结果-exception表现出来的,停止cpu执行当前任务的有两种情况:error和exception。
error往往是由reset、soft reset、NMI reset以及cache error引起的,error产生后,系统会产生复位。cp0协处理器寄存器Status中ERL位置位。
exception发生的原因则有多种,协处理器cp0寄存器Cause中提供exception的缘由。
代码值 十六进制 记忆码 详细描述
0 16#00 Int Interrupt(中断)
4 16#04 AdEL Address error exception (load or instruction fectch):地址错误,发生在装载或指令预取
5 16#05 AdES Address error exception (store):地址错误,
发生在数据存储
6 16#06 IBE Bus error exception (instruction fetch):总线错 误,发生在指令预取
7 16#07 DBE Bus error exception (data reference: load or store):总线错误,发生在数据引用时,装载或存储
8 16#08 Sys Syscall exception:系统调用
9 16#09 Bp Breakpoint exception:断点位置
10 16#0a RI Reserved instruction exception:保留指令异常
11 16#0b CPU Coprocessor Unusable exception:协处理器不可用
12 16#0c Ov Arithmetic Overflow exception:计算溢出异常
13 16#0d Tr Trap exception:陷阱异常
14-18 16#0e- 16#12 – Reserved
发生exception后,cpu根据Cause寄存器中的IV标志判断为是中断还是异常,并自动跳转到exception(0x180)或interrupt(0x200)入口处执行中断处理(Status寄存器BEV位为0)。若cp0中Status寄存器BEV位为1,发生异常(pic32不支持BEV位为1时产生中断)时,cpu执行bootstrap exception处理程序。
系统复位时,BEV位置0;
pic32的集成开发环境提供了基本的库函数,如_bootstrap_exception_handler, _general_exception_handler, 其中前者执行引导异常错误的简单处理,后者执行通常异常错误的处理。开发指令才能清除者可以对二者重新定义,以此替换该库函数。处理函数必须调用eret才能清除异常标志或erl标志。
对于中断函数的声明则与通常的c语言开发相同。具体形式有两种:
第一种 #pragma interrupt foo ipl4 vector vect_num
void foo (void)
第二种
void __attribute__ ((interrupt(ipl4)),((at_vector(vect_num)))) foo (void)
以上中断函数声明了优先级为4,中断向量号为vect_num的中断处理函数
对于中断的处理,可以设定位单向量入口处理与多向量入口处理两种方式。在硬件实现上,单向量其实是多向量的一种极化形式;通过设定INTCON寄存器中的MVEC位可以实现两种方式的切换。单向量模式下,中断控制器提供给cpu的Vector数永远是0;多向量模式下,Vector值就是中断源的向量。显然,在单向量模式下,程序设计者要考虑区分究竟是那个源产生中断的问题,这个可以通过查询中断标志位进行判断;这将带来软件判断造成的延迟问题。而在多向量模式下,cpu会计算出跳转目标位置,相应的简化了程序设计,提高了程序的可观性。
多向量模式下,同样存在软件延迟的问题。上下文环境的保存/恢复是客观存在的,大量寄存器的入栈与出栈造成了不可避免的延迟。与arm内核相比,该寄存器值的保护机制较不利于频繁发生中断的应用。为了减少这种开销,mips32内核引入了寄存器shadow的概念,即组优先级别为7(最高级)的中断与一组潜在的寄存器组(寻址同正常寄存器)绑定的方法,这样硬件寄存器的冗余可以减少软件延迟时间。寄存器的入栈和出栈过程有两个术语与其相对应,prologue与endlogue。通常编译器会自动生成prologue与endlogue。
专栏文章内容及配图由作者撰写发布,仅供工程师学习之用,如有侵权或者其他违规问题,请联系本站处理。 联系我们
相关推荐
高性能系列DSP上TCP2/VCP2协处理器
应用材料公司亮相SEMICON China 2026
DDR5内存,价格首降
有源晶振、无源晶振与MCU的时钟关联
几个关于BGA的问题
Maxim MAX9856功能方框图
人工智能初创企业两个月累计融资额达 2200 亿美元
Maxim MAX9856评估套件电路图(2)
微软或将起诉OpenAI、亚马逊
C64+ 系列DSP上Cache 的应用(第一部分)
基于DSP的PC加密卡
串口的-12v电源最大能提供多大电流
MSP430 电表解决方案
Maxim MAX9856评估套件电路图(1)
基于DSP的仿生机器蟹多关节控制系统的实现
日本最强AI被曝套壳DeepSeek
TI Zigbee 射频芯片RF4CE 以及RemoTI 开发包
请指教,谢谢
MAXIM 共模滤波器的电路图,增强了对ESD尖峰和共模过压的抑制能力
ADS62C17 数据转换器
Gartner预测,在AI组合中纳入中国LLM和多模态模型的全球企业占比,2027年将升至50%
英伟达携手工业软件巨头推动人工智能工程技术发展
从质疑到验证:TI 八颗 DMD 芯片跨越 30 年的实验
三星面临大罢工,存储价格或加速上涨
MAX9856评估板最少元件配置图
基于DSP的低功耗高速数据采集系统
基于DSP的电力线载波OFDM调制解调器
关于SED1520点阵液晶求助
基于DSP的USB口数据采集分析系统
请问