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.

[参考译文] TM4C129ENCPDT:通过保持 TI-RTOS 运行在 TM4C129ENCPDT 控制器中实现低功耗

Guru**** 2382630 points
Other Parts Discussed in Thread: TM4C129ENCPDT, SYSBIOS, EK-TM4C1294XL
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1459819/tm4c129encpdt-low-power-consumption-in-tm4c129encpdt-controller-by-keeping-ti-rtos-running

器件型号:TM4C129ENCPDT
Thread 中讨论的其他器件: SYSBIOSEK-TM4C1294XL

工具/软件:Code Composer Studio 6.0.1、TI-RTOS

大家好、
我尝试通过参考示例代码将控制器置于 TM4C129ENCPDT (TI-RTOS)中的睡眠模式来实现低功耗模式运行
因此、我在应用程序代码中创建了中断矢量表(尝试使用两个不同的部分)。
在构建项目时、我面临以下提到的问题

案例01
#pragma DATA_SECTION (g_pfnVectors、".intvecs")
<------- 开始------- >


程序将无法放入可用内存中。 对于段".resetVecs"(大小为0x3c)、与".intvecs"重叠、大小为0x200的定位失败(第0页)
linker.cmd /CSL1601/Release/configPkg line 209 C/C++问题
<------- 结束------------------------------------ >

案例02
#pragma DATA_SECTION (g_pfnVectors、".vtable")
<------- 开始------- >
程序将无法放入可用内存中。 段".vtable"大小0x200的定位失败、与".vecs"重叠、大小0x360 (第0页) ek_TM4C1294XL.cmd /CSL1601第39行 C/C++问题
<------- 结束------------------------------------ >

##########################################################################################################################################

下面是 TI-RTOS 工程的.cmd 和.cfg 文件中提到的地址、
<------- 启动.cmd----------- >
#define APP_BASE 0x00008000
小程序

FLASH (RX):origin = APP_BASE、length = 0x00100000
SRAM (RWX):origin = 0x20000000、length = 0x00040000
}

部分中)

.intvecs:> app_base
.text :>闪存
.const :> FLASH
.cinit :>闪存
. Pinit :>闪存
.init_array :> FLASH

.vtable:> 0x20000000
.data :> SRAM
. bss :> SRAM
.sysmem :> SRAM.
.stack :> SRAM.
}

__STACK_TOP =__STACK + 512;
<------- 结束------------------------------------ >

<------- 启动.cfg------- >

var m3Hwi = xdc.useModule('ti.sysbios.family.arm.m3.Hwi');
m3Hwi.resetVectorAddress = 0x8000;
<------- 结束------------------------------------ >

请执行"建议"、"我应该在哪里以及所有地方进行动化"以解决此问题

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [报价 userid="637521" url="~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1459819/tm4c129encpdt-interrupt-vector-table-implementation-in-ti-rtos "]:在 TM4C129ENCPDT (TI-RTOS)的睡眠模式下、参考示例代码[/QUOT]

    哪个代码示例?

    [报价用户 id="637521" url="~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1459819/tm4c129encpdt-interrupt-vector-table-implementation-in-ti-rtos "]

    案例01
    #pragma DATA_SECTION (g_pfnVectors、".intvecs")
    <------- 开始------- >


    程序将无法放入可用内存中。 对于段".resetVecs"(大小为0x3c)、与".intvecs"重叠、大小为0x200的定位失败(第0页)
    linker.cmd /CSL1601/Release/configPkg line 209 C/C++问题

    [报价]

    您似乎是在尝试将复位矢量表地址设置为0x8000。 是这样吗? 复位矢量表的地址应为0x0。 请参阅下面的默认值。 为什么要创建新矢量表? 我也不理解为什么睡眠模式需要新的矢量表和新的复位矢量地址。 我强烈建议您不要更改矢量表、除非您真正知道您想要实现的目标需要做什么。 基本上就是删除了 TI-RTOS 正在管理的默认矢量表。  

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

    感谢您的 响应

    <------- bootloader .cmd file start-------- >

    #define APP_BASE 0x00000000

    #define RAM_BASE 0x20000000

    小程序

       FLASH (RX):origin = APP_BASE、length = 0x00100000

       SRAM (RWX):origin = 0x20000000、length = 0x00040000

    }

    部分中)

       .intvecs:  > app_base

       .text  :  >闪存

       .const :  > FLASH

       .cinit :  >闪存

       . Pinit :  >闪存

       .init_array :> FLASH

     

       .vtable :  > RAM_BASE

       .data  :  > SRAM

       . bss   :  > SRAM

       .sysmem :  > SRAM.

       .stack :  > SRAM.

    }

    __STACK_TOP =__STACK + 1024;

    <------- 结束------------------------------------ >

    在我的上一篇文章中、我提到了应用代码.cmd 文件、其中 APP_BASE 地址从0x00008000开始。

    根据您的建议、我已从应用代码.cmd 文件中删除.intvecs、现在它没有错误、但我无法实现我的最终目标、即睡眠模式

    我尝试通过参考示例代码在微控制器中实现睡眠模式 SLEEP_MODES 、其中 睡眠 DEEP_SLEEP 可用、但我仅尝试睡眠模式。

    同样、我创建了一个新任务、根据按钮(端口 P、引脚0)按下(中断)、系统将从运行模式切换到睡眠模式、反之亦然、因此这里需要一个中断

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

    您的建议不要使用 IVT、而是使用 GPIO 中断实现睡眠模式。 然后让我尝试相同操作

    如果我理解有什么问题、请更正我

    .

    我之所以这么做、唯一原因是因为在示例代码中、它是使用 IVT 在单线程应用中实现的

    我们的目标是实现低功耗、欢迎您随意分享

    谢谢

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [报价 userid="637521" url="~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1459819/tm4c129encpdt-interrupt-vector-table-implementation-in-ti-rtos/5601407 #5601407"]我正在尝试通过参考示例代码在我们的微控制器中实现睡眠模式 SLEEP_MODES 、其中 睡眠 DEEP_SLEEP 可用、但我仅尝试睡眠模式。

    没有适用于 TM4C129的 TI-RTOS SLEEP_MODES 示例。   TI-RTOS 目前尚未为 Tiva 器件提供任何内置电源管理支持。  您应该能够在 TI-RTOS 应用程序中使用驱动程序库函数使内核进入睡眠状态。  

    您是否指 的 是非 TI-RTOS 示例 C:\ti\TivaWare_C_Series-2.2.0.295\examples\boards\ek-tm4c1294xl\sleep_modes?

    如果您正在尝试针对 TI-RTOS 修改非 TI-RTOS SLEEP_MODES 示例、我建议您先尝试该示例并使其正常工作。  

    您的建议不要使用 IVT、而是使用 GPIO 中断实现睡眠模式。

    什么是 IVT?  

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

    中断向量表

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

    您好!

    之前提到的所有尝试均将实施   通过使 TI-RTOS 保持运行状态、TM4C129ENCPDT 具有低功耗

    ->第1步、通过引用睡眠模式(单线程应用程序)的示例代码执行、但失败是因为中断矢量表

    我编写了 Hwi 代码以生成中断、这可能是由于 示例代码的 GPIO 中断和 ROM API 之间存在某些不匹配问题导致控制器重新启动

    ->第二、 通过将启用、禁用和优先级减少为-1个任务、但遗憾的是、我没有观察到任何功耗差异

    ################################################################################################################################################

    我的 最终目的是、控制器输入的功耗

    -> 睡眠模式 应小于5mA

    ->  运行模式 基于连接的外围器件

    睡眠模式

    在每个周期性间隔中、也根据条件、控制器必须进入 SLEEP 模式

    在 SLEEP 模式期间、很少的外设处于活动状态、而大多数 外设 将断开连接

    仅在发生外部中断时才会进行控制器唤醒

    外部中断(Hwi)可以在两种 情况下发生:

    -> 正常情况  根据我们将定期的流程要求

    -> 特殊情况  、它不是常规的、但控制器应该唤醒以处理中断、然后再次返回到睡眠模式

    考虑到 TM4C129ENCPDT 微控制器和 TI-RTOS、可接受任何有关硬件设计或软件修改的建议

    我请求所有社区成员, 自愿 帮助实现  低功耗  功能

    谢谢

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我编写 Hwi 代码是为了生成中断、这会导致控制器重新启动、可能是由于示例代码的 GPIO 中断与 ROM API 之间存在某种不匹配

    我怀疑器件会由于计时器而被唤醒。 您可能已经知道、TI-RTOS 或任何 RTOS 依赖周期性的调度周期。 默认情况下、节拍是在1ms 时生成的。 我倾向于认为、在进入睡眠模式后、计时器会通过产生中断来唤醒处理器。  

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

    感谢您的答复@Charles

    如果程序 尝试进入睡眠模式、控制器正在重新启动

    我不知道如何继续

    那么、您能帮助我们实现吗    通过使 TI-RTOS 保持运行状态、TM4C129ENCPDT 具有低功耗

    至少我想知道是否有可能做到这一点

    正在等待您的回复

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

    您好!

     正如我之前提到的、 TI-RTOS 没有任何针对 Tiva 器件的内置电源管理(例如 TI-RTOS 驱动程序)支持。  您可能希望  在进入睡眠模式之前尝试禁用除计划用于唤醒的 GPIO 端口之外的所有中断。  首先查看是否会阻止处理器唤醒。 GPIO 唤醒器件后、您可以重新启用其余中断(例如 BIOS 的计时器中断)。  

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

    您好!

    在 TI-RTOS 中以低功耗模式运行

    在进入睡眠/深度睡眠模式之前、我要将任务优先级设置为-1、并将工作频率降低至16MHz

    退出睡眠模式后、我要将优先级更改为原始值、并将工作频率更改为120MHz

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

    您好!

     感谢提示。 我相信这将使寻求相同解决方案的社区受益。