在线时间8 小时
UID2046785
注册时间2013-10-9
NXP金币0
TA的每日心情 | 奋斗 2018-7-24 11:40 |
---|
签到天数: 1 天 连续签到: 1 天 [LV.1]初来乍到
注册会员

- 积分
- 171
- 最后登录
- 2020-11-22
|
现在有个问题是芯片K10从RUN mode进入vlls3 mode,使用LLWU唤醒后有问题,找不出原因,请高手指点, 多谢!!!
板子上电后电流是30ma,PTB22置为低电平,进入休眠后是6ma,llwu唤醒后是13ma,PTB22应该置为高电平,但没有。
使用 PTA4 llwu唤醒的。
代码如下:
UINT32 g_SysTimeBase= 0;
VOID main(VOID)
{
DisableInterrupts; //关中断
GPIO_Base_Init(GPIO_PORTB, 22, IO_OUT, IO_HIGH);
GPIO_Base_ClrN(PORTB,22);
LLWU_InitWakeupPort();
LPTMR_RunSystemTimeBase(); // 使用LPTMR 定时器100ms超时
EnableInterrupts; //开中断
while(TRUE)
{
if (g_SysTimeBase == 100)
{
MC_EnterVLLS3();
}
}
}
LLWU初始化相关配置:
VOID LLWU_InitWakeupPort(VOID)
{
SIM_SCGC5 |= SIM_SCGC5_PORTA_MASK;
PORT_PCR_REG(PORTA_BASE_PTR, 4) &= ~PORT_PCR_MUX_MASK;
PORT_PCR_REG(PORTA_BASE_PTR, 4) |= PORT_PCR_MUX(1); // 配置相应引脚为GPIO功能
enable_irq(INT_LLW - 16);
LLWU_PE1 = LLWU_PE1_WUPE3(2);
if (LLWU_F1 & LLWU_F1_WUF3_MASK)
{
LLWU_F1 |= LLWU_F1_WUF3_MASK;
}
if (PMC_REGSC & PMC_REGSC_ACKISO_MASK)
{
PMC_REGSC |= PMC_REGSC_ACKISO_MASK;
}
}
LLWU中断处理函数
VOID LLWU_ISR(VOID)
{
//UINT32 i;
if (LLWU_F1 & LLWU_F1_WUF3_MASK)
{
LLWU_F1 |= LLWU_F1_WUF3_MASK; // write one to clear the flag
}
if (PMC_REGSC & PMC_REGSC_ACKISO_MASK)
{
PMC_REGSC |= PMC_REGSC_ACKISO_MASK;
}
GPIO_Base_Init(GPIO_PORTB, 22, IO_OUT, IO_HIGH);
GPIO_Base_SetN(PORTB, 22);
}
进入VLLS3 mode
VOID MC_EnterVLLS3(VOID)
{
volatile unsigned int dummyread;
/* Write to PMPROT to allow VLLS3 power modes */
SMC_PMPROT = SMC_PMPROT_AVLLS_MASK;
/* Set the STOPM field to 0b100 for VLLS3 mode */
SMC_PMCTRL &= ~SMC_PMCTRL_STOPM_MASK;
SMC_PMCTRL |= SMC_PMCTRL_STOPM(0x4);
/* set VLLSM = 0b11 */
SMC_VLLSCTRL = SMC_VLLSCTRL_VLLSM(3);
/*wait for write to complete to SMC before stopping core */
dummyread = SMC_VLLSCTRL;
/* Now execute the stop instruction to go into VLLS3 */
stop();
}
//LPTMR中断处理
VOID LPTMR_ISR(VOID)
{
LPTMR0_CSR |= LPTMR_CSR_TCF_MASK; //写1清除中断标志
g_SysTimeBase++;
}
|
|