您好:
为了编写Bootloader程序,我的程序计划完全采用免表中断,并取消使用中断向量表。
按照说明,我将mtevc的低2位设置为全0:
根据调试信息,将mtvec设置为函数allPficEnter的地址
接着,我启动了串口2中断,调试可以看到,这段代码正确运行:
但是当我发送数据时,程序立即进入之前设置的中断向量
此时读到的mcause为0x36 = 54 既串口2中断
请问,免表中断是否要求mtvec必须配置成中断向量表?
您好:
为了编写Bootloader程序,我的程序计划完全采用免表中断,并取消使用中断向量表。
按照说明,我将mtevc的低2位设置为全0:
根据调试信息,将mtvec设置为函数allPficEnter的地址
接着,我启动了串口2中断,调试可以看到,这段代码正确运行:
但是当我发送数据时,程序立即进入之前设置的中断向量
此时读到的mcause为0x36 = 54 既串口2中断
请问,免表中断是否要求mtvec必须配置成中断向量表?
总结上述问题:
我将mtvec 设置为 0x7C (也就是allPficEnter()函数的地址,最低2byte为 0 0 ),然后启动串口2的免表中断,
发现免表中断不起作用,程序进入了allPficEnter()函数。
在函数中,读到mcause值为0x80000036 也就是十进制的54号中断(串口2的中断)
这说明免表中断在这种情况下失效了。
经过验证,只需要下图中的改动,就能让程序正确运行,进入免表中断:
这些改动将中断从所有中断共用一个入口改为了使用中断向量表并自动跳转。
请问免表中断和mtvec配置为统一中断服务函数是否相互冲突?
只有mtvec配置为向量表的情况,才能使用免表中断?
能否mtvec配置为统一入口,同时使用免表中断?