ATmega64看门狗问题

来源:互联网 发布:知乎有mac版吗 编辑:程序博客网 时间:2024/06/04 19:43

编译:Win AVR

调试:AVR Studio 4

问题:设置的看门狗是2秒中断,但实际明显小于两秒


发现问题过程:

使用片内的eeprom时,发现超过4个写语句不喂狗就会发生看门狗复位,然而设置的是看门狗2秒复位,4个写语句无论如何也不会花2秒的时间吧。


用AVR Studio 4调试,看了下WDTCR的值是0x08,这就不对了,按照初始化的设置应该是0x0f才对,怀疑看门狗设置写错了,查了写代码:

WDTCR = 0x18;

WDTCR = 0x0f;

看来看去就两行代码,也是按照手册里的方法写的,但试了好几AWDTCR 的值一直是0x08... ...

最后在Disassembler窗口里查看了下编译后的汇编代码,发现灰色部分的汇编代码里对WDCE和WDS写完“1”后有多条代码,使得写WDP的时候已经超过了手册要求的4个时钟周期:


这是手册里的要求,这里是安全级别1:


想了想用汇编写看门狗的的初始化应该靠谱,于是在c语言里嵌了汇编:


这是更改后的汇编代码,可以看到灰色字体的汇编代码和手册里的一致了:


实际测试结果和预计的一致了。

结论:使用c语言编写和单片机指令周期相关的代码时,如果出现问题可以查看下编译后的汇编代码是否符合时序,用嵌汇编的方式编写这部分代码是一种解决问题的途径!


原创粉丝点击