【问题标题】:ATTiny20 Stuck in Reset Loop after Watchdog Reset看门狗复位后 ATtiny20 卡在复位循环中
【发布时间】:2013-07-18 14:09:33
【问题描述】:

我目前正在使用中断来重置 ATtiny20。以下是相关代码:

int main(void)
{
    ...

    // Set up interrupt for reset button (PCINT5)
    SREG |= 1<<7;           // Enable global interrupts
    GIMSK |= 1<<PCIE0;      // Enable Pin Change Interrupt 0 (enables interrupts on PCINT[7:0]
    PCMSK0 |= 1<<PCINT5;    // Enable PCINT5 (physical pin 8) interrupt
    ...
}

中断处理函数:

ISR(PCINT0_vect)
{
    if (!(BUTTON_1_PORT & 1<<BUTTON_1_PIN))    // Only reset if button is pushed
    {   
        wdt_enable(WDTO_2S);
        while(1){};
    }
}

这很好用——当按下按钮时,系统会冻结 2 秒,然后重置……并立即卡在重置循环中。一些谷歌搜索发现了罪魁祸首:在较新的芯片上,看门狗定时器在看门狗复位后保持启用(以其最短的延迟设置)。以下代码旨在解决此问题:

// Disable watchdog on reset
void wdt_init(void) __attribute__((naked)) __attribute__((section(".init3")));
void wdt_init(void)
{
    // MCUSR = 0;    // See below for reason for commenting this line
    wdt_disable();
    return;
}

*注MCUSR = 0 被注释掉,因为 MCUSR 在 ATTiny20 上不存在。我尝试用SREG = 0 替换它,但无济于事。

即使使用此代码(应该禁用看门狗定时器),问题仍然存在。设备上闪烁的 LED 表明程序在重置之前正在运行 main() 函数的一部分,但将 wdt_disable(); 放在 main() 的顶部也没有帮助。

我是否缺少重要的东西:ATTiny20?我在数据表中遗漏了什么?问题 - 和解决方案 - 看起来很明显,但我很难过。我正在使用 Atmel Studio 6.1。

【问题讨论】:

  • 绝对会调用 wdt_init 吗?你有什么调试能力?也许当看门狗即将重置芯片时会触发一个中断......也许你可以禁用它?
  • @gcb 不幸的是,ATTiny20 没有调试功能。我确实找到了答案,并在下面添加了它。刚睡了一晚,早上喝了杯咖啡,就注意到数据表中的这一行:WDE 在 RSTFLR 中被 WDRF 覆盖。这意味着在设置 WDRF 时始终设置 WDE。要清除 WDE,必须先清除 WDRF。此功能可确保在导致故障的条件下进行多次重置,并在故障后安全启动。

标签: c embedded avr


【解决方案1】:
// Disable watchdog on reset
void wdt_init(void) __attribute__((naked)) __attribute__((section(".init3")));
void wdt_init(void)
{
    // This is the flag that must be cleared on an ATTiny20 before the WDT can be disabled
    /***************/
    /* RSTFLR = 0; */
    /***************?

    wdt_disable();
    return;
}

【讨论】:

  • 我的ATTiny10也是一样,在特殊的init3部分wdt_disable()之前需要有RSTFLR = 0。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-28
  • 1970-01-01
相关资源
最近更新 更多