关于飞思卡尔单片机9S12出现看门狗COP不复位且系统出现死机现象,所有功能或管脚无输出并卡死等问题的总结
更新时间:2023-11-15 08:26:01 阅读量: 教育文库 文档下载
关于飞思卡尔单片机MC9S12XET256A出现看门狗COP不复位且系统出现死机现象,所有功能或管脚无输出并卡死等问题的总结,希望给遇到同样问题的朋友提供参考。
由于对飞思卡尔的看门狗COP不是很了解,导致工作过程遇到了一些麻烦,后来经过很长时间的搞鼓,并通过NXP官网技术支持的帮助,解决了问题,现总结如下:
?与其他单片机不同的是看门狗计数溢出后:9S12是先复位系统(寄存器和所有外设
都恢复到默认状态),然后PC指向看门狗中断向量所保存的看门狗中断服务程序地址)。 注意!看门狗中断是不可屏蔽中断,且它并不是一个中断服务函数,只是一个路径。系统复位以后,执行的第一动作就是将系统指针PC首先跳到该路径上,因此必须在代码里声明该路径的地址向量,声明的地方在一个后缀名为.prm的文件里。
默认只有VECTOR 0 _Startup,但9s12有三种复位的情况,分别指向三个地址,0号是系统上电,非法地址等复位;1号是时钟异常复位;2号就是我们需要的看门狗复位;我们让系统复位后,都把PC指向启动首地址。注意!如果不定义,系统指针就一直指向对应中断标号的地址上,且不会再跳转移动,整个系统像跑飞或卡死的现象。 这个问题外国朋友Radek说得通俗易懂,如下:
Hi XJC,
I am glad that it works now.
The problem is that the COP do not cause any watchdog interrupt and CopInterrupt() isn’t an interrupt routine (ISR).
When COP is not triggered properly, it will reset MCU. If COP is detected as reset source, vector at address 0xFFFA will be fetched. This vector points to your CopInterrupt() routine.
Similar is valid also for CM reset (vector at 0xFFFC).
POR/External/Illegal Address resets will fetch reset vector at address 0xFFFE.
So, the CopInterrupt() routine is executed as first code after MCU reset (while the stack is not initialized yet) and RTI instruction at end of routine doesn’t have sense (there isn’t any context which might be restored). The CopInterrupt() (CMInterrupt()) routine must end by jump into some code. For example: asm jmp _Startup;
If you do not want different behavior/code for POR/CM/COP resets, you may define _Startup() routine for all three vectors inside prm file. For example: VECTOR 0 _Startup //Power On, External, Illegal Address resets VECTOR 1 _Startup //Clock Monitor reset VECTOR 2 _Startup //COP Watchdog reset
In that case you don’t need to define CopInterrupt()/CMInterrupt() routines.
I hope it helps you.
Have a great day, Radek
?正常情况下,很多人容易配置成如下图所示的示例,那么就会出现两种情况:当在中断
里面放while(1);语句,可以正常产生看门复位;当放一个很长的for循环(超过看门狗溢出的时间),则马上出现卡死现象,不复位情况。(注意!图片的代码 while(1)和for是写在Main函数里,其实在Main里是不会出现这种情况的,一定是要放在中断里才会出现所说的情况)
对于这个现象,外国朋友Radek是这么解释的:
Hi XJC,
It hard to say what exactly happened in this extreme situation. Theoretically, it might be debugged on assembler level.
It is like a jump from the window. Sometimes you may fall on your legs, sometimes on your head. It might depend left or right leg used for the jump start. And always it depends on floor level from which you jumped.
Since, the CopInterrupt() is not ended properly by asm JMP command, the RTI will restore some data from the stack. I suppose that the difference will be just in stack content or stack pointer during MCU reset.
The Situation 2 is a just happy coincidence where RTI instruction will fill program counter by some valid data.
I suppose that i and j variables are probably not static and they exist on the stack. This may cause different stack pointer value and the program counter is filed by invalid data after the watchdog reset.
Anyway, it is code runaway in both situations with happy end only in one case. I hope it helps you. Have a great day, Radek
总结:大概意思就是无解,让我们按套路出牌,不然出现的情况也是无可预知的。
?还有一种情况,如果是有做低功耗处理的,那么在进入WAIT或STOP前,要么关闭看门
狗,要么要想一个办法在低功耗的时候又可以喂狗,又要符合你的功耗要求。否则也会出现如题所说的一些情况。这个解决方法还是按外国朋友Edward说的来解决。配置CLKSEL寄存,使进入wait后看门狗无效,如果是STOP那就自己查DataSheet看是哪个寄存器吧。 It looks like you keep COP enabled in WAIT mode and COP times out while you are in WAIT mode. Of course each reset resets all I/O settings. I think also that you didn't define COP reset vector, at least your map file shows defined only vector 66 @ 0xFF7A. No wonder than that MCU on COP reset can land in state you wrote: \wake\
COP can be disabled in WAIT mode. Look at COPWAI bit in CLKSEL. Please keep in mind that COPWAI bit is write once bit in normal (non debug) mode, so first write to CLKSEL (any CLKSEL bit) must initialize COPWAI to desired level.
Edward
注意!CLKSEL 任何位只能被写一次,后面代码再写的就无效了;抑或是先配置时间时写了该位,再写这个位要关闭看门狗,那就是无效操作了。
正在阅读:
关于飞思卡尔单片机9S12出现看门狗COP不复位且系统出现死机现象,所有功能或管脚无输出并卡死等问题的总结11-15
词语大辨析03-05
周巷镇纪委2012年上半年工作总结03-22
农产品质量安全抽样技术规范08-11
岱岳区旅游规划09-11
中国钱币学会第六届理事会领导名单11-23
山东省潍坊市2018届高三第二次模拟考试语文试卷及答案解析04-23
大体积混凝土专项施工方案11-12
数据的7种寻址方式12-15
第五章 重量分析和沉淀分析法05-29
- exercise2
- 铅锌矿详查地质设计 - 图文
- 厨余垃圾、餐厨垃圾堆肥系统设计方案
- 陈明珠开题报告
- 化工原理精选例题
- 政府形象宣传册营销案例
- 小学一至三年级语文阅读专项练习题
- 2014.民诉 期末考试 复习题
- 巅峰智业 - 做好顶层设计对建设城市的重要意义
- (三起)冀教版三年级英语上册Unit4 Lesson24练习题及答案
- 2017年实心轮胎现状及发展趋势分析(目录)
- 基于GIS的农用地定级技术研究定稿
- 2017-2022年中国医疗保健市场调查与市场前景预测报告(目录) - 图文
- 作业
- OFDM技术仿真(MATLAB代码) - 图文
- Android工程师笔试题及答案
- 生命密码联合密码
- 空间地上权若干法律问题探究
- 江苏学业水平测试《机械基础》模拟试题
- 选课走班实施方案
- 卡尔
- 于飞
- 出现
- 复位
- 看门
- 单片机
- 死机
- 输出
- 现象
- 功能
- 总结
- 所有
- 问题
- 系统
- 管脚无
- 9S12
- COP
- 2013-14(1)概率试卷(A卷)
- 现代汉语中\\"V+的+N\\" 结构的歧义现象
- 晚期浪漫主义的音乐特征及风格特征
- 居家老人护理
- OpenFOAM求解算例过程
- 08 三角形三内角和 - 欧氏几何、罗氏几何、黎曼几何的比较
- 高电压技术试题库(多选)50
- 民事诉讼法试题
- 根据尸体现象综合推断死亡时间
- 爱学习爱劳动爱祖国国庆节电子小报欢度国庆手抄报模板歌颂祖国妈妈板报金秋十月颂祖国热爱祖国海报A4
- 经济地理题库
- 串讲建筑材料与建筑构造 - 图文
- 医院关于审计整改报告
- 还原反应论文
- 关于设置我院视光中心的可行性报告(2)(3)
- 浙江省宁波市十校2020届高三上学期期末联考语文答案
- 高中政治会考必备知识点汇总
- 2015消费心理学期中测试卷(含答案)
- 山东省利用外资现状分析
- 北师大版五年级数学下册第二单元测试题及答案