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.

[参考译文] TMS570LS3137:低功耗模式和 CAN 唤醒

Guru**** 2481985 points
Other Parts Discussed in Thread: TMS570LS3137

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/693283/tms570ls3137-low-power-mode-and-can-wake-up

器件型号:TMS570LS3137

您好;

我尝试将 TMS570LS3137置于睡眠模式并通过 CAN 总线唤醒。 唤醒后、我希望 CPU 自行复位。 因此、我将此函数写在下面:

#define SYS_doze_mode 0x000F3F02U
#define SYS_snooze_MODE 0x000F3F03U
#define SYS_SLEEP_MODE 0x000FFFFFU

void EnterLowPowerMode (uint32模式)


/*启用唤醒中断*/

vimREG->WAKEMASKSET0 = 0xFFFFFFU;
vimREG->WAKEMASKSET1 = 0x000000000000U;
vimREG->WAKEMASKSET2 = 0x000000000000;
vimREG->WAKEMASKSET3 = 0x000000000000U;

/*关闭 CAN 模块以启用 CAN 活动检测电路*/

canREG1->CTL |=((uint32_t) 1U <<2);//启用状态中断*/
canREG1->CTL &=~(uint32)(0x00000041U);/*清除初始位*/


pcrREG->PSPWRDWNSET1 &=~(UINT32)(0x00000003U);/*关闭 DCAN1*/

/*将闪存组置于睡眠状态*/

flashWREG->FBAC = 0x00000000U |(UINT32)(UINT32) 15U <<8U)/* BAGP*/|(UINT32)(UINT32) 15U);/* VREADST*/

flashWREG->FBFALLBACK = 0x00000000U |(UINT32)((UINT32) SYS_SLEEP << 14U)|(UINT32)((UINT32) SYS_SLEEP << 2U)|(UINT32)((UINT32) SYS_SLEEP << 0U);

flashWREG->FPAC2 = 0x0;
flashWREG->FPAC1 = 0x0;

/*禁用时钟源*/
systemREG1->CSDISSET = MODE & 0x000000FFU;

/*禁用时钟域*/
systemREG1->CDDIS =(模式>> 8U)和0x00000FFFU;

/*以空闲周期执行 ARM 指令以触发 CPU 时钟停止*/

asm (" NOP");
asm (" NOP");
asm (" NOP");
asm (" WFI");
asm (" NOP");
asm (" NOP");
asm (" NOP");
asm (" NOP");
asm (" NOP");

/*CPU 重置*/

if (systemREG1->CPUSTCR == 0x000000000000)

systemREG1->CPUSTCR = 0x00000001U;

其他

systemREG1->CPUSTCR = 0x000000000000U;

控制器在执行该功能后似乎处于睡眠模式、但不会通过 CAN 唤醒。 你对此有什么建议吗? 此外、唤醒后、程序在何处继续? (或者、我应该将 CPU 复位置于何处?)

-   

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

    器件被唤醒后、PC 处于第4个 NOP (恰好在 WFI 之后)。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    王您好;

    感谢您的回复。 控制器似乎未唤醒。 “EnterLowPowerMode”函数是否缺少内容? 将控制器配置为 CAN 唤醒的正确方法是什么?

    感谢你的帮助。

    此致

    Erdem

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

    由于 CAN 模块断电、因此应通过 CAN 总线上的 WAKEUP 信号来唤醒。 可通过设置 CAN 控制寄存器中的总线活动唤醒位(WUBA)来激活 CAN 总线活动检测电路。 此检测电路默认处于禁用状态。

    注意:CAN 消息启动总线活动、无法接收。 这意味着在断电和自动唤醒模式下接收到的第一条消息将丢失。