[DemoCode下载] LPADC 数据超标唤醒MCU

[复制链接]
1346|3
 楼主| zhuotuzi 发表于 2024-8-21 15:38 | 显示全部楼层 |阅读模式
pad, dc, MCU, ADC, AD
M2L31系列的MCU在休眠状态下LPADC自主工作、定期采样,并且每次与设定阈值比较,若数值超标就唤醒MCU,否则不唤醒MCU。

M2L31有一些外设在MCU休眠状态仍可保持工作,如LPTimer、LPADC和LPUART等。本例程配置LPTimer周期性的触发LPADC启动转换,转换结果若超标就唤醒MCU、代码处理后续事情;转换结果若不超标,MCU保持休眠状态。此代码实现了在最低功耗下保持对传感器的监测。

配置M2L31的LPTIMER为周期计数模式,在NPD4休眠模式保持工作,溢出时触发LPADC启动转换。
配置M2L31的LPADC在NPD4休眠模式保持工作,并LPADC数据每次与指定阈值比较,超标就唤醒NPD4模式下的MCU。


如果LPADC数据超过指定值(代码中是2048),MCU被唤醒,PC14上的红色LED会闪一下,然后MCU再次进入NPD4休眠模式。LPADC数据不超标LED不会闪。
可将LPADC输入引脚PB2连到VDD或地,观察红色LED是否闪烁,或用示波器测量LED控制引脚PC14的波形,验证代码执行正常。可用微安表测量LED不闪时MCU的电流。


 楼主| zhuotuzi 发表于 2024-8-21 15:38 | 显示全部楼层
为进一步降低功耗,CPU时钟使用MIRC并配置为1 MHz,LPTimer0和LPADC的时钟也使用MIRC。
LPADC的初始化代码如下,前三句配置LPADC单端模式,由LPTimer0触发启动转换。中间两句配置LPADC的数值比较器,数值超过0x800后唤醒MCU。最后两句使能中断。
607366c5996a3bd59.png
LPADC如果被唤醒,还需要把唤醒标志清 0,才能再次进入休眠模式。此代码在中断里。
3407166c5997b81147.png
Main函数里配置完时钟和引脚,配置了LPTimer0,修改LPTimer0计数值就可改变LPADC的数据流快慢,最后LED闪两下,表明代码在执行了,后面LPADC数据若不超标LED就不会再亮。
 楼主| zhuotuzi 发表于 2024-8-21 15:40 | 显示全部楼层
5241266c5999e08a35.png
主循环里让MCU进入休眠,若被唤醒就让LED亮20us,能目测到一点亮光,示波器能测到波形。

将 PB2连到VDD,红色LED会因LPADC数据超标连续闪烁,PB2接地LED不会闪。
9009266c599d42558b.png
 楼主| zhuotuzi 发表于 2024-8-21 15:40 | 显示全部楼层
en-us--EC_M2L31_LPADC_ResultMonitor_Wakeup_NPD4_V1.00.zip (1.54 MB, 下载次数: 2)
最后奉上代码和工程等相关文件。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

217

主题

3393

帖子

7

粉丝
快速回复 在线客服 返回列表 返回顶部