您好、
我正在尝试创建一个失效防护例程、该例程在通常为 RTC 供电的 XT1 时钟发生故障时执行。
代码可以正常工作、成功地将 RTC 重新配置为 REFO、但 RTC 不会继续运行。 我发现,芯片的设计有一个问题(这里在第 11 页: www.ti.com/.../slaz722h.pdf ) ,我尝试了建议的解决方法,但它仍然不起作用。
下面是我执行重新配置的代码的一部分、以及建议的修复程序:
RTCCTL = 0; // Stop the RTCRTCMOD = 64 - 1; // Modulo register.do{ trash = RTCIV; // Make sure RTCIV is empty.}while(trash != 0);RTCCTL = RTCSS_1 | RTCPS_6 | RTCSR | RTCIE; // Configure RTC for operation from ACLK (REFO) and reset the counters.// Workaround from ErrataP2SEL0 &= ~BIT7; // Set XIN to GPIO functionP2SEL1 &= ~BIT7;P2DIR |= BIT7; // XIN pin as outputP2OUT |= BIT7; // Toggle the pin 2xP2OUT &= ~BIT7;P2OUT |= BIT7;P2OUT &= ~BIT7;P2SEL0 &= ~(BIT6 | BIT7); // Set the crystal pins back for oscillator function.P2SEL1 |= (BIT6 | BIT7);
已尝试修改解决方法:
- 在两次切换之间增加了 3ms 暂停。
- 多次切换引脚(高达 100x)。
- 对 XOUT 引脚执行上述所有操作、然后同时执行两者。
- 保持引脚配置为晶体并切换 P2OUT 位。
这对所有这些都没有帮助、RTC 总是会卡住。 要使其使用 ACLK 时钟、唯一方法是在 RTC 配置为 ACLK 后让晶体短暂运行、然后再次停止它。 但这就是在没有权变措施的情况下它的行为方式。
我有什么问题吗?