单片机嵌入式系统软件复位的几种方式
来源:21IC 作者:—— 时间:2012-09-06 14:05
飞思系列的8位单片机没有特定的控制寄存器可以实现软件复位,当程序运行过程中代码需要强行产生一个复位时必须通过一些软件技巧实现:
软复位,程序从头运行,硬件不复位。复位脚无复位脉冲输出
这可以通过直接获取复位向量的方式来实现:
void ForceReset(void)
{
uniON {
void (*vector)(void);
byte c[2];
} softReset;
softReset.c[0] = *(byte*)0xFFFE; //get the reset vector
softReset.c[1] = *(byte*)0xFFFF;
softReset.vector(); //re-STart the code flow
}
硬复位,程序从头运行,内部所有硬件模块和寄存器同时复位,复位脚有复位脉冲输出
这必须结合FSL 8位单片机内部的架构特点来实现:
1)COP(看门狗)复位
这是最简单的一种方式。程序死循环然后等看门狗作用产生复位。你必须事先启动看门狗功能,复位过程将有少许延时。
void ForceReset(void)
{
DisableInterrupts; //disable all interrupt
for(;;); //wait for watch-dog reset
}
2)非法寻址复位
当指令对某一个不存在的内存空间进行寻址操作时单片机会产生硬件复位。
void ForceReset(void)
{
asm JMP 0xD000; //jump to illegal address will result a RESET
}
注意不同芯片其有效内存空间配置不同,具体地址需参考芯片数据手册做适当调整。
3)非法指令复位
当执行一条不存在的指令编码时单片机会产生硬件复位。这里又可以分两种手段:
a) 利用“合法”指令在特定配置模式下的“非法性”,例如STOP指令。
如果在芯片的配置寄存器SOPT中设定STOPE位为0禁止STOP指令,你若再执行STOP就会认为是非法指令从而立即产生复位。
void ForceReset(void)
{
asm STOP; //illegal STOP will result a RESET, note SOPT_STOPE must be 0
}
如果你的应用中正常情况下不会用到STOP,就可以用这种方式。如果你本来就要用STOP指令就不能用这种方式产生复位,因为SOPT寄存器在复位后只能被写一次。
b) 人为制造非法指令然后强行运行。
这是比较通用的一种方法,这个S08内核系列均可适用。在单片机的指令表中确认一条不可能出现的指令编码,例如0x9E10,将其填入RAM中然后强制运行,即可立即产生复位。
void ForceReset(void)
{
byte illegalCode[2];
illegalCode[0] = 0x9e;
illegalCode[1] = 0x10; //illegal instruction
((void (*)(void))illegalCode)(); //execute illegal instruction will result a RESET
}
上一篇:液晶显示器RSDS输出接口介绍
- •瑞萨电子推出R-Car S4入门套件 实现汽车网关系统的快速软件开发2023-07-11
- •立即领票 | 芯片+封测+嵌入式系统大展9.15-17深圳福田见!国产化元器件一站式选型2022-08-23
- •江苏:支持集成电路企业和软件企业加强知识产权运用2022-01-24
- •深圳国际电子展暨嵌入式系统展在深圳举行2021-09-27
- •软件比芯片更赚钱?美式收购“两通”树大招风!2021-07-13
- •硬件or软件:“智算”时代 究竟谁更重要?2021-03-26
- •老榕树广告联盟移动推广CPC这点你必须知道2021-02-07
- •EDA公司芯华章获融资 部署下一代验证EDA系统和软件2020-11-09
- •莱迪思将其FPGA拓展至智能和嵌入式视觉系统2020-09-11
- •瑞淀光学系统推出全新VIP(视觉检测工具包)软件许可2020-05-29