【发布时间】:2019-02-18 11:46:49
【问题描述】:
我正在学习 ARM9 处理器 (SAM9G20) 上的嵌入式系统。我更熟悉通用的过程编程。因此,我正在做的是通过data sheet 并了解有哪些寄存器以及如何操作它们。
我的问题是,我怎么知道电脑什么时候重置?我知道有一个管理重置的重置控制器。称为状态寄存器 (RSTC_SR) 的寄存器存储复位源。我是否需要定期阅读此注册表?
我的解决方案是将复位次数存储在 FRAM 中(或从将其设置为 0 开始),一旦发生复位,我会将此变量与我的主函数中的寄存器值进行比较。如果寄存器值更高,那么显然它会重置。但是我确信有一种更优化的方式(也许使用中断)。或者这是它通常的做法?
【问题讨论】:
-
当您的系统启动代码被调用时,您会知道系统已重置。
-
我在数据表 (13.4.3) 中读到,可以在某些类型的重置功能中管理 ISR。
-
你需要研究什么重置是,首先,任何这一切都有意义。复位时,所有硬件、所有寄存器和程序计数器都将恢复以从在复位向量(ARM 的地址 0 处写入的 32 位地址)处编程的功能开始执行。这是重置的定义。
-
@SirJoBlack : 13.4.3 仅指可配置为中断引脚的复位引脚的 NRST 引脚——如果它被配置为中断,它并不是真正的复位——尽管中断处理程序可能会发出复位。然后,您可以使用它来计数或记录被断言的复位引脚,但还有其他复位源不会被计算在内。所以我不确定这是否有帮助。
-
SAM9G20 被 Atmel/Microchip 归类为 MPU,而不是 “微控制器”。它有一个 MMU,通常执行它的引导 ROM,然后是引导程序,然后是 U-Boot,然后是重置后的 Linux。