查看: 2955|回复: 2

【赚周年币】技术帖Week3-Day4——LPC824 Breakout之17、PMU学习

[复制链接]
  • TA的每日心情
    开心
    1 小时前
  • 签到天数: 3751 天

    连续签到: 77 天

    [LV.Master]伴坛终老

    发表于 2017-1-18 23:56:36 | 显示全部楼层 |阅读模式
    分享到:
    本帖最后由 toofree 于 2017-1-19 03:23 编辑

            【赚周年币】技术帖Week3-Day4——LPC824 Breakout之17、PMU学习

            PMU即电源管理单元,在用户手册“UM10800.pdf”的60到73页有详细说明。
            Chapter 6: LPC82x Reduced power modes and power management,节电和电源管理,不用多说,这都是为电池供电准备的。
            我们以工程“LPC824_Example_Code_Bundle_Keil_r1.0\Keil_Projects\Example_PMU_Modes\Example_PMU_Modes.uvoptx”模板来对PMU进行测试。工程如下图:
             傲游截图20170118234019.jpg

            我们来分析一下程序结构。实际就一个main()函数,一个管脚7中断函数,一个UART0中断处理函数。UART0中断处理比较简单,是用来中断接收的。管脚7中断函数用来重新开启UART0和GPIO时钟的,因为有进入节电模式之前有一条Setup_Low_Power_Example_PMU_Modes()函数,在这里面把外设的电全断了。

            “Example_PMU_Modes_Funcs.c”中的4条函数。PININT7_IRQHandler()管脚7中断处理函数,清中断标志,用来重新开启UART0和GPIO时钟。
             傲游截图20170118235541.jpg

            UART0_IRQHandler() UART0中断处理函数,中断接收数据转发出去,实际相当于硬件的回显。
             傲游截图20170118235554.jpg

            Setup_UART0_9600(),设置UART0为9600波特率。这里波特率设置与之前的程序不同,使用了波特率时钟源为12MHz(即主时钟为12M,波特率时钟分频系数为1),具体12MHz是怎么来的,我们在后面分析。
             傲游截图20170118235623.jpg

            Setup_Low_Power_Example_PMU_Modes(),进入节电模式前,关闭外设时钟。对PDAWAKECFG和PDRUNCFG不作详细分析,有兴趣可以参考用户手册51、52页。
             傲游截图20170118235632.jpg

            “Example_PMU_Modes.c”文件中,就一个main()函数。我们对main()函数进行分析。
            首先是开启相关外设时钟UART0、 GPIO、 IOCON 、SWM,BOD_PD断电。
             傲游截图20170119001650.jpg

            所有IO禁止掉上下拉,P0.0--P0.28。
             傲游截图20170119001702.jpg

           将P0.4挂到管脚7中断,并开启中断。P0.4为唤醒专用管脚,外部已上拉,在LPC824 Breakout板上是靠CP2102的TXD输出TTL高电平上拉的。
             傲游截图20170119001721.jpg
            测过P0.2管脚,作为中断唤醒,发现可以唤醒前三种械,深度掉电模式不行,在用户手册中找到原因。即在深度掉电模式时,只有P0.4唤醒专用管脚能成功唤醒,其它IO不好使。
           Deep PD.jpg

            UART0初始化,设置并开接收启中断。板上的串口正好用到管脚P0.4,而P0.4又是唤醒专用管脚。没办法,只好外接了一个USB转TTL串口。
             傲游截图20170119001737.jpg

            配置绿灯IO,关闭不必要的时钟IOCON和SWM,真是能省则省呀。
             傲游截图20170119001805.jpg

            开绿灯,串口发输入提示,等待中断接收上位机输入。
             傲游截图20170119001817.jpg

            判断UART0接到输入为字符“0”,打印相应Sleep模式信息,关闭UART0、IOCON 、SWM时钟,设置SleepDeep位,则进入Sleep模式。
             傲游截图20170119001834.jpg
            其它三种模式在程序上,只是给LPC_PMU->PCON赋值不同,则模式不同。
             傲游截图20170119004523.jpg

            没有正确输入“0”到“3”字符时,或者从低电唤醒后,直接进入系统复位,程序从头开跑。
             傲游截图20170119001903.jpg

            “Keil_startup_LPC8xx.s”文件,与之前的文件也有点不同。用IRC_Only_SystemInit()函数,代替了SystemInit()。
             傲游截图20170119005049.jpg

            那么IRC_Only_SystemInit()在哪里呢,直接查找发现找不到。点软件仿真后,直接跳转到了“utilities.c”,而在头文件“utilities.h”中并不有申明此函数,难怪找不到。
             傲游截图20170119005356.jpg
            从这个IRC_Only_SystemInit()设置我们,可以得出下图时钟走向。其中PLL输出时钟的并没有使用,要省电的话,可以把PLL也停掉,就不对这个做测试了。
             傲游截图20170118232613.jpg

            测试过程,在上位机串口终端打印结果,见图。
             傲游截图20170119011049.jpg

            好了,整个PMU学习到此,收工,睡觉。


            
            

    评分

    参与人数 1 +50 收起 理由
    EEboard爱板网 + 50 3周发帖养成记 奖励

    查看全部评分

    回复

    使用道具 举报

    该用户从未签到

    发表于 2024-4-2 20:46:39 | 显示全部楼层
    LPC824在深度掉电模式下 P0.4如果一致为低电平,MCU能被唤醒吗?
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    昨天 07:42
  • 签到天数: 97 天

    连续签到: 1 天

    [LV.6]常住居民II

    发表于 2024-4-13 08:12:38 | 显示全部楼层
    我把我的这板子找了出来,看来得学习了一下了。
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /2 下一条



    手机版|小黑屋|与非网

    GMT+8, 2024-4-26 01:16 , Processed in 0.159731 second(s), 22 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.