完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
电子发烧友论坛|
本帖最后由 MouseesuoM 于 2015-1-28 09:34 编辑 编译环境:keil5.0以上版本 烧写方式:Jlink 参考的帖子:https://bbs.elecfans.com/jishu_467037_1_1.html 这几天晚上一直在研究低功耗定时器(LPTMR),今天就把自己所了解的简单说说. 低功耗定时器,顾名思义,这个定时器的功耗非常小,在很多模式下比如停止、运行、等待、低漏模式下依然可以正常运行,在调试模式下则只能运行脉冲计数器。 这里我只说说定时计数器,关于脉冲计数器我没有过多了了解,这里我就不多介绍了。只是计数器稍微研究了一下。欢迎大家前来纠错。 (一)允许软件访问低功耗定时器 说白一点,就是和打开IO时钟的原理,是一样的,这里允许软件访问,应该就是允许我们对低功耗定时器进行编程。 具体操作:SIM_SCGC5 的D0位写入1 (二)配置低功耗定时器模块 怎么配置?当然就是操作寄存器了,接下来我们就稍微讲解一下低功耗定时器的一些寄存器。 (1)低功耗定时器的控制状态寄存器(LPTRM0_CSR)
TMS:我们这里选用的是定时计数器,所以这里默认为0就可以了。(1:脉冲计 数器) TCF:定时器比较标志,当CNR(计数寄存器)的值增加到和CMR(比较寄存器)一样时,并且CNR再增加时,该位自动置1。当该位写1时,或者LPTRM被禁用时,该位自动清0. tiE:定时器中断使能。这里设置为1。当该位置1时,只要TCF置1,低功耗定时器将产生一个中断请求。这里特别注意,是产生中断,最终能否允许该中断产生,还要取决于NVIC的设置。 TPP和TPS是和脉冲计数器有关的,这里我们不用去理会。 TFC:注意不要和TCF混淆了。该位只有LPTMR禁用的时候才允许设置。 我们这里设置为0,就是说,只要TCF置位,CNR就会复位。(1:只有CNR溢出的时候才会复位) TEN:1-使能LPTMR 0:禁止LPTMR (2)低功耗定时器预分频寄存器
这三位我们都需要用到 PRESCALE:预分频值,默认是0000:2 这里我们选择0001:4 PBYP:1-PRESCALE 的预分频值是有效的, 0:预分频器被旁路,预分频值无效,其实就相当于预分频值为1,时钟源没有被分频 PCS:预分频器时钟源选择,这里我多说一点。这个占了2bit也就是由四种模式,具体如下图
这里我们选的是00 默认值即可,就是MCGIRCLK. 那么问题来了,MCGIRCLK的时钟频率是多少?
从图上不难发现MCGIRCLK的时钟源由两个,一个是4MHZ的IRC,另一个是32KHZ的IRC,那么这两个到底选择哪一个? 这个是由MCG_C2控制寄存器决定D0位(IRCS)决定的,该位的描述如下:内部时钟参考选择,为内部时钟在高速和低速时钟之间选择一个时钟参考源。0:低速时钟,也就是我们的32KHZ。 1:高速时钟,也就是4MHZ。 所以在选择MCGIRCLK作为预分频器的时钟源,要特别注意这一点,当然我选用的是高速时钟4MHZ。那么是不是MCGIRCLK就是4MHZ? 答案当时不是的,图上特别注意那个FCRDIV,也就是说4MHZ的高速时钟出来以后得陷阱股FCRDIV的预分频,在CG(时钟门,这里经过系统时钟的初始化后默认是允许的的,这个初始化在system_MKL25Z4.c文件中)允许的情况下,才会输出MCGIRCLK。 那么问题又来了FCRDIV是多少?FCRDIV是由MCG_SC控制的,其默认值是001,对应的分频值是2,所以经FCRDIV后,4MHZ就变成了2MHZ,在经过低功耗定时器的预分频器预分频后(上面我们提到预分频值设为4),就成了0.5MHZ。 (3)LPTMR0_CMR和LPTME_CNR寄存器这里我就不多讲解了,这个我想大家都明白。那么0.5MHZ的时钟每振荡一次,CNR加1,当和CMR中设置的值相等并且再增加时,TCF置位,发送中断请求。 还有一个时间的计算公式T=(N+1)/f,T:是我们需要的时间,N是LPTMR_CMR中设置的值,f是我们最终计算出的时钟频率。 实验中CMR设置成9999,那么T=10000/50000 0=1/50=0.02S 产生一次断。 大体的程序思路每隔1S让三色led灯循环亮起: (1)初始化三色led灯 (2) 允许软件访问低功耗定时器,初始化并且使能低功耗定时器 (3)在NVIC中设置LPTMR的中断优先级并且使能该中断 (4) 编写中断函数,使得三个led灯循环点亮 实验现象:反正我的板子是可以的,你也下载进去试试呗,哈哈 最后附上代码:
LPTMR0.rar
(387.05 KB, 下载次数: 135
)
|
|
相关推荐
12 个讨论
|
|
|
顶,支持一下!
|
|
|
|
|
|
|
|
|
感谢分享,学习学习
|
|
|
|
|
|
|
|
只有小组成员才能发言,加入小组>>
2135个成员聚集在这个小组
加入小组我的项目我做主,使用GN+Ninja来完成构建系统(VSCode开发RT106X)
37379 浏览 0 评论
NXP IMX8应用处理器快速入门必备:技巧、使用、设计指南
6778 浏览 1 评论
7796 浏览 1 评论
7646 浏览 0 评论
NXP i.MX6UL开发板(linux系统烧录+规格+硬件+模块移植)使用手册
5074 浏览 0 评论
1558浏览 2评论
关于NINA-W132 Wi-Fi模块SPI通信遇到的疑问求解
1211浏览 2评论
如何在MPC PowerPC MCU上首次刷写后禁用BDM?
750浏览 1评论
将HFREFR和LFREFR寄存器值设置为错误的值来将故障注入CMU,但CMU_ISR值始终为零,为什么?
737浏览 1评论
将SPSDK for FRDM-MCX-W71 SDK与VS一起安装时出现hidapi构建错误怎么解决?
681浏览 1评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-3 02:58 , Processed in 3.481622 second(s), Total 81, Slave 66 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
7428