打印
[8/16-bit MCU]

【把玩LPC810 mini】初试低功耗模式与systick

[复制链接]
933|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
IversonCar|  楼主 | 2015-12-22 20:41 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
紧接上回的systick的疑问,在各位坛友的指点下,又去阅读了UM,设计了一个最简单实验,发现deep sleep及更深的低功耗模式,systick就会停止,而其中的关键问题是sysclock是否关闭。最基本的思路:systick_handler中对mycount进行++操作,主循环中判断mycount是否大于4,满足条件后启用DP模式,这样_WFI()指令会自动根据LPC_PMU->PCON的值确定低功耗模式,我现在设定为1,就是deep sleep。




运行结果,小灯闪烁亮暗交替5次,停止,符合预期。但是有个地方很奇怪,我在主循环中设定翻转IO时,同时串口打印“hi\n",而进deep sleep前打印"deep sleep\n"。结果最后一个hi后面的换行没有,deep sleep只能显示到“deep slee”。把deep sleep改为deep吧,只能显示到“dee”。

相关帖子

沙发
IversonCar|  楼主 | 2015-12-22 20:42 | 只看该作者
看流程不应该啊,编译关闭优化选项。核心代码如下。(顺便问下,代码模式下为啥不能自动缩进呢?)注:编辑的时候没有,提交了就有了,嘿嘿
void SysTick_Handler(void)
{
mycount++;
}

int main(void) {
//前面还有其他模块初始化
        LPC_PMU->PCON = 0x01;
        //Chip_Clock_SetMainClockSource(SYSCTL_MAINCLKSRC_IRC);
    // Enter an infinite loop, just incrementing a counter
    while(1) {
    LPC_GPIO_PORT->NOT[0] = (1 << 2);
    Chip_UART_SendBlocking(LPC_USART0,"hi\n",3);
    if (mycount>4)        {
        //  Chip_UART_SendBlocking(LPC_USART0,"deep sleep\n",11);
        SCB->SCR |= (1UL << SCB_SCR_SLEEPDEEP_Pos); //| (SCB->SCR & ~SCB_SCR_RESERVED);
       Chip_UART_SendBlocking(LPC_USART0,"deep\n",5);
    }
   __WFI();
    }

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

50

主题

344

帖子

0

粉丝