尊敬的香榭丽舍
我的客户通过引用 TRM 在 RM46L852中实现了深度睡眠模式、他们似乎可以成功进入深度睡眠模式、但使用 DCAN 无法唤醒。
要启用 DCAN 控制寄存器中的 WUBA 位、它们添加了以下代码、但无法通过 CAN 消息唤醒。
CANREG1->CTL =(UINT32) 0x00000000U
|(UINT32) 0x00000000U
|(UINT32)((UINT32) 0x00000005U << 10U)
|(UINT32)((UINT32) 0x00000001U << 25U) // WUBA 启用
|(UINT32) 0x00020043U;
它们用于深度睡眠的代码如下所示。 您能否检查以下代码以通过 DCAN 唤醒?
uint32_t sleep_clk; canREG1->CTL |=(((uint32_t) 1U <<2) /*启用状态中断*/ |(uint32_t)(((uint32_t) 0x1U << 25U)); canREG1->ES |=((uint32_t) 0x1 <<9); canREG1->CTL &=~(uint32)(0x00000041U);/*清除初始位*/ pcrREG->PSPWRDWNSET1 &=~(UINT32)(0x00000003U);/*关闭 DCAN1*/
vimREG->WAKEMASKSET0 =0xFFFFFFFF; vimREG->WAKEMASKSET1 =0xFFFFFFFF; vimREG->WAKEMASKSET2 = 0xFFFFFFFF; vimREG->WAKEMASKSET3 = 0xFFFFFFFF; vimREG->WAKEMASKCLR0 = 0xFFFFFFFF; vimREG->WAKEMASKCLR1 = 0xFFFFFFFF; vimREG->WAKEMASKSET0 = 1U <<16U | 1U <<29U;
_enable_IRQ ();
/**设置闪存 Banck 访问控制**/ //flashWREG->FBAC =(0x0F <<8)|(0x0F); flashWREG->FBAC = 0x000000000000 |(uint32)((uint32) 15U<<8U)//BAGP |(uint32)((uint32) 15U);//VREADST
/**-设置闪存组电源模式*/ flashWREG->FBFALBACK = 0x000000000000 |(UINT32)((UINT32) SYS_SLEEP << 14U)//组7 */ |(UINT32)((UINT32) SYS_SLEEP << 2U) /*组1 */ |(UINT32)((UINT32) SYS_SLEEP << 0U);//组0 */
//闪存泵-所有泵电路被禁用 flashWREG->FPAC1 = flashWREG->FPAC1 &~(0x1U); flashWREG->FPAC2 = 0x0;
/**-为正常运行、断电模式和唤醒后设置 GCLK、HCLK 和 VCLK 时钟源*/ systemREG1->GHVSRC =(UINT32)((UINT32) SYS_LPO_HIGH << 24U) |(UINT32)(((UINT32) SYS_LPO_HIGH << 16U) |(UINT32)((UINT32) SYS_PLL1 << 0U);
/**-为 AVCLK1和 AVCLK2设置异步外设时钟源*/ systemREG1->VCLKASRC =(uint32)((uint32) SYS_LPO_HIGH << 8U) |(UINT32)(((UINT32) SYS_LPO_HIGH << 0U);
SLEEP_CLK = (uint32)((uint32) 1U << 0U) |(uint32)((uint32) 0U << 1U) |(uint32)((uint32) 1U << 3U) |(uint32)((uint32) 1U << 4U) |(UINT32)((UINT32) 0U << 5U) |(uint32)((uint32) 1U <<6U) |(uint32)((uint32) 1U <<7U);
systemREG1->CSDIS = SLEEP_CLK;
while ((systemREG1->CSDIS & sleep_clk)!= sleep_clk) { /*等待*/ }
systemREG1->CDDIS = 0x1 //RTICLK 被使能用于唤醒 |(uint32)((uint32) 1U <<0U)/* GCLKOFF */ |(UINT32)((UINT32) 0U << 1U)/* HCLK 关闭*/ |(uint32)((uint32) 0U << 2U)/* VCLKP 关闭*/ |(uint32)((uint32) 1U << 3U)/* VCLK2 off */ |(uint32)((uint32) 0U << 4U)/* AVCLK 1关闭*/ |(uint32)((uint32) 1U << 5U)// AVCLK 2 off */ |(uint32)((uint32) 1U << 8U)/* VCLK3关闭*/ |(uint32)((uint32) 1U <<9U)/* VCLK4关闭*/ |(uint32)((uint32) 1U << 10U)/* AVCLK 3关闭*/ |(uint32)((uint32) 1U << 11U);// AVCLK 4 off */
asm (" NOP"); asm (" NOP"); asm (" NOP"); asm (" WFI"); asm (" NOP"); asm (" NOP"); asm (" NOP");
|
谢谢、此致、
SI