工具/软件:
您好、
我想在 AWR6432中启用低功耗模块。
我在 demo (__LW_AT__motion_and_presence_detection)中根据 MMWAVE_L_SDK_05_05_03_00配置并启用了低功耗模式
根据文档中的以下说明、程序进入低功耗状态且计时器退出后、可以继续执行代码。
但根据我实际运行的结果、这是 init 和 config 的重新运行
除了在 CONFIG 中将 lowPowerCfg 设置为1之外、是否需要任何其他配置

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.
工具/软件:
您好、
我想在 AWR6432中启用低功耗模块。
我在 demo (__LW_AT__motion_and_presence_detection)中根据 MMWAVE_L_SDK_05_05_03_00配置并启用了低功耗模式
根据文档中的以下说明、程序进入低功耗状态且计时器退出后、可以继续执行代码。
但根据我实际运行的结果、这是 init 和 config 的重新运行
除了在 CONFIG 中将 lowPowerCfg 设置为1之外、是否需要任何其他配置

您好:
感谢您通过 E2E 讨论低功耗模式! 我不太清楚要实现的目标、但我可以解释电源状态管理的更多软件流程。 如您所指出、退出低功耗深度睡眠模式后、器件可以继续执行代码。 在这种情况下、器件将在 DEEP SLEEP 之前返回 PC 寄存器中的最后一个地址、该地址仍处于电源驱动器层、尤其是 Power_sleep 函数。 然后、将执行用户可定义的 POWER_LPDSresumehook、对于我们的大多数演示、该函数会重新初始化和重新配置驱动程序、外设和其他系统组件。 之后、程序将通过电源驱动程序层返回到应用层、即 powerManagementTask、将创建之前删除的 DPC 和 TLV 任务、然后开始下一帧。
请告诉我这是否有帮助。 如果没有、请澄清您的问题是什么或您的最终目标是什么。
此致、
Kristien
你好 Kristien、
我已经解决了这个问题。 我将低功耗配置从演示(power_mode)复制到演示(motion_and_presence_detection)
下图显示了两种配置和低功耗配置之间的差异。 我想了解这些配置参数的功能。
1.power1.selectGpioSyncioLPDS ="POWER_SYNCIN IO_WAKEUP_LPDs";
2.power1.wakeupSYNCIOEdgeLPDS ="RISE_EDGEDGE";
3.power1.syncio.sync_in.$SugestSolution ="SYNC_IN0";
以下哪种配置会使程序以重新启动的方式执行、而不是在上一次进入低功耗后继续执行

此致、
桂林市
您好:
感谢您在此澄清您的目标。 请参阅下面的一些评论。
我观察到了通过 UART 调试程序的执行顺序、并重新执行了主函数
您应该无法在进入 LPDS 时调试程序(至少在最初)、因此我预计调试器会在第一帧后断开连接。 不管怎样,这里的陌生人的行为是程序正在重新执行的主要功能。 除非发生软复位、否则不应出现这种情况。
我知道您已解决此问题、但如果您确实返回并在重新执行程序时测试问题、您可以通过 TRM 中所述的 APP_CTRL:APPSS_BOOT_INFO_REG0[3:0]来确定复位原因。
以下哪种配置会导致程序作为重新启动执行而不是在上一次进入低功耗状态后继续执行
这些更改都不能解决程序在进入低功耗时重新执行的问题。 这些都是用于在上升沿启用或配置 SYNCIN IO 作为从 LPDS 唤醒的源的设置。
selectGpioSyncioLPDS 允许 SYNCIN IO 作为唤醒源
wakeupSYNCIOEdgeLPDS 设置 SYNCIN IO 上的上升沿 以触发唤醒
SYNC_IN.$SugestSolution ="SYNC_IN0" 将 SYNCIN IO 的实例名称设置为 SYNC_IN0
此致、
Kristien
你好 Kristien、
有了它,我将尝试找出原因,如果有任何结果,我将与你同步。 也许时间会稍慢一些。
"我知道您已解决此问题、但如果您确实返回并在重新执行程序时测试问题、您可以通过 TRM 中所述的 APP_CTRL:APPSS_BOOT_INFO_REG0[3:0]来确定复位原因。
此致、
桂林市
你好 Kristien、
我读取了寄存器(APP_CTRL:APPSS_BOOT_INFO_REG0[3:0])的值、发现重新启动的原因是 STC_PORZ、、我仔细调试了程序、程序异常的原因与 thresholdForLPDS 值有关。
ThresholdForLPDS 在演示中使用10000的默认配置(motion_and_presence_detection)、但修改后为30000000。
ThresholdForLPDS 配置的单位是什么、其配置有任何限制。
此致、
桂林市
您好:
感谢您对此进行进一步研究、并让我们了解您的发现。 ThresholdForLPDS 的测量单位为微秒、表示为睡眠时间指定的时间量、低功耗深度睡眠最需要超过该时间。 在这种情况下、将 ThresholdForLPDS 设置为 30000000表示只有超过30秒的睡眠时间才会触发低功耗深度睡眠。
这也意味着您可能不会进入低功耗模式进行运动和存在检测、而是进入空闲模式、因为默认配置的帧周期最多为250ms、睡眠时间不能超过帧周期、至少在我们的演示中是如此。 STC_PORZ 是最后一个复位原因、这表明器件正在下电上电且不进入 LPDS 这一事实也证实了这一点。
阈值的下限取决于 LPDS 延迟(默认为2ms)、上限为64秒、因为这是睡眠计时器本身的限制。
此致、
Kristien
你好 Kristien、
在听到你对 ThresholdForLPDS 的解释后,我意识到我以前误解了。
我以前认为 ThresholdForLPDS 是低功耗模式的上限、ThresholdForLPDS 最多只能处于低功耗模式。
基于此、我重新调试演示(power_mades)、发现我以前以为自己处于低功耗模式、但实际上我处于电源空闲模式。
我使用 ti EVM 板进行调试。 您能尝试一下并向我提供您的结果吗?


此致、
桂林市
您好:
在从 SDK 刷写空的应用映像后、您可以通过 CCS 调试器加载程序来进一步调试此问题 、并在 vPortSuppressTicksAndSleep 处设置断点、该断点应在 xSemaphoreTake 之后触发。 由于这不是主工程文件的一部分、我建议通过 在 CCS 的 Disassembly 视图中搜索 vPortSuppressTicksAndSleep 函数来设置断点、并在函数的汇编指令的开头添加断点。
选择电源管理选项1时、应将50000个周期传递到 vPortSuppressTicksAndSleep、该周期应在传递到 Power_idleFunc 之前转换为500000微秒。 这将传递到 Power_sleepPolicy 函数、该函数包含用于确定传递的时间是超过 LPDS 阈值、睡眠阈值(如果前者为 false)还是空闲阈值(如果前者为 false)的条件逻辑。 在本例中、它应超过 LPDS 阈值、即使我们考虑了延迟、通常也会使用 LPDS。
如果您可以分享此过程各个阶段的睡眠时间/节拍数、我们应该能够确定在应进入 LPDS 时为什么处于空闲状态。
此致、
Kristien
嗨、Shi、
是的、对于这里的任何混淆、我深表歉意。 vPortSuppressTicksAndSleep 可能在 DebugP_scanf 函数之后被触发、同时应用程序等待字符输入。 当调用 Power_enablePolicy 时、可以在第125行中设置断点、运行该断点、然后在 vPortSuppressTicksAndSleep 中设置断点。 如果您想跳过一位电源序列、也可以在"Disassembly"视图中搜索 Power_sleepPolicy、并在该视图中添加断点。 仅当选择了电源管理选项1时才应触发此操作。
此致、
Kristien
你好 Kristien、
我调试了程序并发现在函数 vPortSuppressTicksAndSleep 中、当我们设置 SLEEP_TIME_tics=50000时、计算结果超出了 uin32_t 数据范围、导致最终有效时间不符合预期。
、、当我将 SLEEP_IME_TICKS 设置为5000、ThresholdForLPDS = 3000 μ s 时、程序也无法按预期打印低功耗日志(退出 LPDS)。它也不会打印从空闲模式中压出的日志。
我希望您可以提供一个程序来打印日志、以便根据文档进入和退出低功耗模式、从而继续进一步开发和调试。
此致、
桂林市
嗨、Shi、
我建议将 xSemaphoreTake 函数与 Power_sleepPolicy 函数交换、以防止任何变量类型溢出。 请记住、需要以微秒而非节拍来指定传入的睡眠时间、因此如果要保持相同的默认睡眠时间50秒和空闲时间25秒、则在调用 Power_sleepPolicy 时必须超过50000000和25000000。
我还将注意、演示 在通过调试程序运行时可能会崩溃。 这可以通过在 Power_disablePolicy 调用之后添加1秒的睡眠延迟来解决、即 ClockP_SLEEP (1)。
此致、
Kristien
嗨、Shi、
我有几个问题需要了解您目前的情况:
此致、
Kristien
嗨、Shi、
您能否在 Power_sleepPolicy 处设置断点并验证传递给 PRCMLPDSIntervalSet 的保留值是否约为50000000? 更准确地说、它应该是49998000、因为该函数考虑了2000的 LPDS 延迟。 也可以 在 PRCMLPDSIntervalSet 之后检查以下存储器地址0x5A040030、并验证寄存器是否与保留值匹配。
此致、
Kristien