libxr
Embedded C++ framework for bare-metal, RTOS and Linux
Loading...
Searching...
No Matches
mspm0_power.cpp
1#include "mspm0_power.hpp"
2
3// 应用使用的 SRAM(SRAM_BANK0)的末尾,来自 SysConfig 的链接脚本;
4// 启动文件也从它取初始栈指针。
5// End of the SRAM the application uses (SRAM_BANK0), from the SysConfig linker
6// script; the startup file takes its initial stack pointer from it too.
7extern "C" uint32_t __StackTop;
8
9using namespace LibXR;
10
26{
27 if (DL_SYSCTL_getStatus() & DL_SYSCTL_STATUS_SHUTDOWN_IO_LOCK_TRUE)
28 {
29 DL_SYSCTL_releaseShutdownIO();
30 }
31}
32
44void MSPM0PowerManager::Reset() { DL_SYSCTL_resetDevice(DL_SYSCTL_RESET_BOOT); }
45
61{
62 DL_SYSCTL_setPowerPolicySHUTDOWN();
63 // 有中断挂起时 WFI 立即返回;处理完中断再执行 WFI,直到进入 SHUTDOWN。
64 // WFI returns at once while an interrupt is pending; after it is served, WFI runs
65 // again until the device enters SHUTDOWN.
66 while (true)
67 {
68 __WFI();
69 }
70}
71
93{
94 __disable_irq();
95 const uint32_t size = reinterpret_cast<uint32_t>(&__StackTop) - 0x20200000U;
96 __asm volatile(
97 ".syntax unified\n"
98 "ldr r1, =0x20300000\n"
99 "adds r2, %[size], r1\n"
100 "movs r3, #0\n"
101 "1:\n"
102 "str r3, [r1]\n"
103 "adds r1, r1, #4\n"
104 "cmp r1, r2\n"
105 "blo 1b\n"
106 "ldr r1, =0x20200000\n"
107 "adds r2, %[size], r1\n"
108 "2:\n"
109 "str r3, [r1]\n"
110 "adds r1, r1, #4\n"
111 "cmp r1, r2\n"
112 "blo 2b\n"
113 "str %[lvl_val], [%[lvl_addr]]\n"
114 "str %[cmd_val], [%[cmd_addr]]\n"
115 :
116 : [size] "l"(size), [lvl_addr] "l"(&SYSCTL->SOCLOCK.RESETLEVEL),
117 [lvl_val] "l"(DL_SYSCTL_RESET_BOOTLOADER_ENTRY),
118 [cmd_addr] "l"(&SYSCTL->SOCLOCK.RESETCMD),
119 [cmd_val] "l"(SYSCTL_RESETCMD_KEY_VALUE | SYSCTL_RESETCMD_GO_TRUE)
120 : "r1", "r2", "r3", "memory");
121 while (true)
122 {
123 }
124}
void JumpToBootloader() override
复位并进入 ROM BSL / Resets into the ROM BSL
MSPM0PowerManager()
构造时释放 SHUTDOWN 锁存的 IO / Releases the IO latched by SHUTDOWN
void Shutdown() override
进入 SHUTDOWN 低功耗模式 / Enters the SHUTDOWN low-power mode
void Reset() override
复位整机 / Resets the whole device
LibXR 命名空间 / LibXR namespace.
Definition ch32_can.hpp:14