我正在尝试使用看门狗超时来完成 arduino 的重置,以使其返回到要编程的引导加载程序。然而,总体目标只是能够通过串行命令重置设备并重新启动引导加载程序。很多挑战是我认为我没有提出正确的问题,或者使用正确的术语来搜索它。我有一个运行 Arduino 1.5 附带的 optiboot 版本的 UNO。提前感谢任何回答这个问题的人。
问问题
1400 次
2 回答
1
不确定您的问题是什么?
但我听起来你在问如何使用看门狗执行软重置。
有几种方法可以导致软复位。我使用的最快/最简单的是;
#include <avr/wdt.h>
...
wdt_enable(WDTO_15MS); // provides a Soft Reset when connected to FDTI Port, that provides power
for(;;) {} // wait for it to reset and start over at the boot loader...
于 2014-01-23T02:44:21.753 回答
1
如果您不想使用看门狗定时器并且您的部件支持它,您可以从此线程中设置 RST_CTRL 中的RESET位
#define RST_SWRST_bm 0x01
#define CCP_IOREG_gc (0xD8<<0)
void force_sw_reset(void)
{
__disable_interrupt();
CCP = (uint8_t)CCP_IOREG_gc;
RST.CTRL = (uint8_t)RST_SWRST_bm
}
如果您不需要完全重置,您可以从该线程跳转到重置向量:
#define RESET_VECTOR 0
void (*ptrToFunction)(); // pointer to a function
ptrToFunction = RESET_VECTOR;
(*ptrToFunction)(); // reset!
如果您想使用看门狗计时器 mpflaga 有正确的答案,但请记住,取决于您的部分,看门狗计时器可能会或可能不会在复位后启用,请参阅此处的 Atmels 软复位页面。如果您的 atmega 在您不期望的情况下在引导加载程序中重置,这可能是您的问题。
于 2015-07-02T16:35:03.093 回答