请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号:TM4C129ENCPDT 你(们)好
我很明显遗漏了一些东西、我看到了几篇关于同一主题的文章、并阅读了数据表、但我似乎无法清除 HIBTPSTAT、希望鹰眼的 amonst 你会发现我的错误。
我想使用 TMPR0来指示我的器件是否已被连接、MCU 不会处于睡眠状态、因此无需将其唤醒、我只想确保与事件相关的必要内务处理得到处理、 但是 、尽管 我在 HIBTPCTL 中似乎设置了 TPCLR、HIB_TPSTAT 仍保持置1。
bool
HibernateInitialisation(const uint32_t sys_clock_frequency)
{
uint32_t status;
bool was_on = false;
//
// Enable the hibernate module.
//
MAP_SysCtlPeripheralEnable(SYSCTL_PERIPH_HIBERNATE);
if (MAP_HibernateIsActive())
{
was_on = true;
//
// Hibernation module is already active, this could mean that the processor is waking
// from a hibernation. Read the status bits to see what caused the wake. Clear the wake
// source so that the device can be put into hibernation again.
//
status = MAP_HibernateIntStatus(false);
MAP_HibernateIntClear(status);
}
//
// Configure Hibernate module clock.
//
MAP_HibernateEnableExpClk(sys_clock_frequency);
//
// Configure the module clock source.
//
MAP_HibernateClockConfig(HIBERNATE_OSC_LOWDRIVE);
//
// Enable RTC mode.
//
MAP_HibernateRTCEnable();
//
// Configure the hibernate module counter to 24-hour calendar mode.
//
MAP_HibernateCounterMode(HIBERNATE_COUNTER_24HR);
//
// Doesn't erase BBRAM nor wake up the MCU from hibernation.
//
MAP_HibernateTamperEventsConfig(HIBERNATE_TAMPER_EVENTS_NO_ERASE_HIB_MEM | HIBERNATE_TAMPER_EVENTS_NO_HIB_WAKE);
//
// Setup the Tamper IO, this will override any existing IO configuration. 0 == TMPR0 (PM7)
// Internal weak pull up used, active low
//
MAP_HibernateTamperIOEnable(0, HIBERNATE_TAMPER_IO_WPU_ENABLED | HIBERNATE_TAMPER_IO_TRIGGER_LOW);
//
// Enables the tamper feature.
//
MAP_HibernateTamperEnable();
return was_on;
}
void
NmiISR(void)
{
uint32_t nmi_source = SysCtlNMIStatus();
switch (nmi_source)
{
#if HIBERNATION
case SYSCTL_NMI_TAMPER:
DEBUG_MSG("TAMPER NMI\r");
DEBUG_MSG("HIB Tamper Status = 0x%x\r", (HWREG(HIB_TPSTAT) & HIB_TPSTAT_STATE_M) >> 2);
//
// Clear the source of the NMI. Reset the STATE field of the HIB Tamper Status
// register by he STATE field by writing to the TPCLR bit in the HIBTPCTL register.
//
HWREG(HIB_TPCTL) |= HIB_TPCTL_TPCLR;
DEBUG_MSG("HIB Tamper Ctrl = 0x%x\r", (HWREG(HIB_TPCTL) & HIB_TPCTL_TPCLR) >> 4);
DEBUG_MSG("HIB Tamper Status = 0x%x\r", (HWREG(HIB_TPSTAT) & HIB_TPSTAT_STATE_M) >> 2);
//
// Clear the NMIC register bit that corresponds with the NMI source.
//
SysCtlNMIClear(nmi_source);
break;
#endif /** HIBERNATION */
default:
//
// Enter an infinite loop.
//
for(;;);
break;
}
}
我在终端中看到的输出为:
防篡改 NMI
HIB 篡改状态= 0x2
HIB 篡改控制= 0x0
HIB 篡改状态= 0x2
我可以确认我是否检查 IDE 中的寄存器。 有什么想法吗?
谢谢 HL。