Chinaunix首页 | 论坛 | 博客
  • 博客访问: 697164
  • 博文数量: 113
  • 博客积分: 7070
  • 博客等级: 少将
  • 技术积分: 930
  • 用 户 组: 普通用户
  • 注册时间: 2007-03-02 21:03
文章分类

全部博文(113)

文章存档

2012年(2)

2011年(10)

2010年(19)

2009年(39)

2008年(20)

2007年(23)

我的朋友

分类: 嵌入式

2009-09-22 08:36:44

Question
如何通过软件复位AVR?
Answer
如果你想通过软件复位AVR,你应该使用内部看门狗。简单的使能它和让它溢出。当看门狗触发后,程序计数器返回到0,清除所有的寄存器和其他正在执行的任务,这与将RESET脚拉低有同样的效果。

你不应该处理:
--用另一个AVR的引脚连接外部RESET引脚。在短暂的复位时间,AVR的引脚会三态失效,这会导致RESET无效。
--跳到程序地址0,跳到程序地址0,这不会清除全部的寄存器,所以你不会得到一个完整的“复位”。

下列是每30mS复位一次AVR的例子代码(GCC):

#include
#include

int main(void)
{
wdt_enable(WDTO_30MS);
while(1) {};
}

或者你可以生成一个宏:

#include
#include

#define Reset_AVR() wdt_enable(WDTO_30MS); while(1) {}

int main(void)
{
Reset_AVR();
}

阅读(1998) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~