This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] TM4C123GH6PM:Hibration 问题

Guru**** 2348500 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/608749/tm4c123gh6pm-hibrnation-problem

器件型号:TM4C123GH6PM
主题中讨论的其他器件:TM4C123

大家好、我的休眠模块有问题。 我使用的是定制板、编译器是 IAR。 我想启用休眠模块并使用外部 WAKE 引脚唤醒。 当我调试时、我看到代码停留在 while (!(HWREG (HIB_CTL)& HIB_CTL_WRC) in  HibernateWriteComplete (void)数中。 我认为 这意味着它从不会使写入操作复杂化。 代码如下。 提前感谢。

编辑:我将 CR1220 3.3V 电池连接到 MCU 的 Vbat 引脚。 此外、32kHz 晶体按在 Launch Pad 中连接的方式连接到 MCU

void AppHibernateEnter (void)
{
SysCtlPeripheralEnable (SYSCTL_Periph_HIBERNATE);
// HibernateEnableExpClk (SysCtlClockGet ());

while (!SysCtlPeripheralReady (SYSCTL_Periph_HIBERNATE)
)){
}

//HibernateGPIORetentionEnable();


HibernateClockConfig (HIBERNATE_OSC_LOWDRIVE);

SysCtlDelay (SysCtlClockGet ()/(1000 * 3));

HibernateWakeSet (HIBERNATE_WAKE_PIN);

HibernateIntEnable (HIBERNATE_INT_PIN_WAKE);

HibernateIntClear (HIBERNATE_INT_PIN_WAKE | HIBERNATE_INT_LOW_BAT | HIBERNATE_INT_RTC_MATH_0);

HibernateRequest();

SysCtlDelay (100);

UARTprintf ("控制器未进入休眠模式。\n");

//
//等待此处。
//
while (1)
{

UARTprintf ("休眠中、同时\n");
SysCtlDelay (10000000);
}




}void HibernateIntHandler (void){


uint32_t ui32Status;
//
获取中断状态并清除任何挂起的中断。
//
ui32Status = HibernateIntStatus (1);
HibernateIntClear (ui32Status);


UARTprintf ("休眠中断中\n");
}

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我对该供应商的"休眠模块"没有任何经验(他们以前的 LM3S 系列是电源"休眠")、但您不应该对"休眠时的"调试能力"提出疑问?    (如果确实是您所达到的状态、则该详细信息(尚未提供)。)

    您是否曾尝试过: (独立于调试-在 MCU 运行时经过精简-然后订购到"休眠"。)

    • 将 MCU 置于休眠状态
    • 把它留在那里几分钟
    • 然后在"WAKE"引脚上提供了适当的信号

    这是休眠(进入-保持-退出)过程的(合理的)总结、它不是吗?   结果将证明是有价值的。

    我们注意到您使用 UART ... 之后... 您将 MCU 置于休眠模式!    这是否合法?    在休眠期间、是否大多数 MCU 外设都"关断"以降低功耗?

    这种系统方法-以及您对特定结果的清晰报告-似乎是一种有效的诊断方法...

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    当 MCU 处于休眠状态时,您是正确的 UART 不应该工作,但问题在于如果 MCU 在 HibernateRequest()进入休眠状态,程序计数器不会下一行,因此 UART 不会成为问题。 如果 MCU 未进入休眠状态、我可以使用 UART 进行理解。 但主要问题是、在调试模式下、我可以看到程序桩模块位于  Hibernate.c 库中的 HibernateWriteComplete (void)函数的任何位置。 几乎所有的休眠函数都有  HibernateWriteComplete()命令。 因此、我无法在 hibernate.c 中使用任何休眠功能

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    根据您的回答(感谢您的回答)、您是否不明智地:

    • 使用"外设驱动程序用户指南"(或其今天的"Nom du jour")仔细检查函数"HernateWriteComplete (void)"、 目标是"您的"发现 "为什么输入了故障 ISR "。   如果该函数是"复杂"的-它可能会对其他函数进行"调用"-并且每个函数都必须由您的程序"识别"(并可确定)。
    • 如果"HibernateWriteComplete (void)"是复杂的(调用多个其他函数)、只需"注释掉"即可-并用它调用的函数替换(一次一个)。   (必须是它所调用的一个或几个函数(上帝禁止所有函数)、这些函数使你处于"可怕的"错误 ISR 中!)    (FAULT-ISR 经常是"家"、因为"亲吻不信者!")
    • 如果上面的测试识别"故障函数"-你必须确保每个函数都被定义和声明-并且(真的)位于你的代码"认为"它的位置。
    • 避免这种"额外努力"的一种方法是密切(即准确地)遵循供应商最接近 的代码示例!    在尝试任何修改之前、请先让该基本代码正常工作。

    不要使用 UART 来确认您是否处于"休眠状态"、而是创建一个简单的"闪烁 LED 环路"(您过去已经完成过这一操作)来确认 MCU 处于"活动/唤醒" 状态(闪烁时)以及哪些信号、 闪烁停止时"进入休眠模式并保持休眠状态"?   为简单起见-我希望该闪烁循环唯一运行的代码(除了休眠所需的 MCU 配置之外)。

    “亲吻”是(过去)推荐给您的——似乎您没有“看到明亮的亲吻表”——并且偏离了“一次一个简单的目标”的亲吻规则!   (即系统、单步方法-如此处所列...)

    请注意、询问的问题(之前)是:WAKE 引脚-仍然未回答...   然而、您的第一个目标应该是"进入休眠模式"-稍后我们将担心"退出"。   这就是亲吻-亲吻起作用!

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我也不使用休眠、尽管我会查看有关休眠行为的文档、因为您的报告不能说服休眠工作不正常。

    [引用 user="Furkan Erman">几乎所有休眠函数都具有  HibernateWriteComplete();命令。 [/报价]

    这会导致一个明显的问题、即它的作用是什么。 我可以相信、这种情况发生在 HibernateWriteComplete 结束时、并且是成功的症状。

    另一个注意事项是、至少在某些微控制器上、无法调试休眠序列、因为使用调试会唤醒微控制器或微控制器未运行、因此无法成功查询。

    Robert

    此外、请检查是否有 TIVAWare 休眠示例。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    [引用 user="Robert Adsett72"]我很可能会相信这种情况发生在 HibernateWriteComplete 结束时,并且是成功的症状

    供应商(或前身)不因名称太钝而赢得任何奖励。    然而-尽管有位伪装-海报指出、他对该函数的调用直接导致"故障 ISR"。

    这说明了-您的"是成功的征兆"这一短语肯定会有文学代理人(再次)"快速拨号到田园诗般的安大略省..."  

    我们都注意到:"重新阅读、重新检查 MCU 手册;在休眠模式下可能无法进行调试;尽可能搜索并采用/使用供应商示例。

    (我相信(有些)有轻微的"亲吻呼吁...")

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    [引用 USER="CB1_MOBILE "]然而-尽管有位伪装-海报指出,他对该函数的调用直接导致"故障 ISR"[/引用]

    你确定吗? 对我来说、它看起来像是状态检查循环、而不是故障 ISR 循环。

    Robert

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    好的-使用"故障 ISR"比实际更"有创意"-但(有些)通过"位伪装"进行了"套头"。 (虽然 MOI...可能(仅)注意到这种伪装。)
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    感谢您的回复、您答对了、这与故障 ISR 无关。 我检查了手册、并指出当 MCU 处于休眠状态时、HIB 引脚应处于高电平。 因此、调试和 UART 可能不适合用于跟踪 MCU。 我将尝试使用来测量 HIB 引脚。 顺便说一下、我找不到 tm4c123的示例、但找到了 tm4c129的示例。  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    可以记录显示、有人建议使用"闪烁或不闪烁"方法作为"愚蠢"方法来识别"休眠激活"。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我已经尽力了、但无法使它正常工作。 我使用了以下链接中提供的代码。 我只使用了休眠所需的基本器件并用于 tm4c123、但 HIB 引脚始终处于低电平。 是否有办法在不使用休眠的情况下使用 RTC?  

    github.com/.../hibernate.c