本文将介绍 i.MXRT500 输入捕获功能。
- Ctimer 定时器
RT500 有 5 个 Ctimer——Ctimer0-4;每个 timer 都有 4 路捕获通道:
输入捕获功能引脚复用名称为 CTIMER_INPx ,这些引脚都可以通过 INPUTMUX 模块复用到具体的 timer 通道,输入捕获的时间可以通过 CR 寄存器获得。
- 相关配置
接下来说明如何配置相关参数:
Ctimer 主要用到的寄存器有三个:Count Control Register (CTCR)、Capture Control Register (CCR)、Capture Register (CR0 - CR3) ,
Count Control Register (CTCR):
这里一般配置 bit7:5, bit 4, bit 1:0 ,依次为 SELCC 、ENCC、CTMODE,
CTMODE:选择计数模式,分为定时器计数,还是外部输入计数,如果选择外部,则 bit3:2 需要进行选择使用哪个 capture 通道;
ENCC:使能边沿触发清零定时器计数,脉冲输入捕获一般两个边沿,我们需要得到两个边沿之间的计数器,从而计算器时间,该功能主要是在第一个边沿开始时,将计数器清零重新计数,待第二个边沿触发结束,此时的计数器值就是这一段的计数值,这样就不需要我们去读取两个边沿的计数值,然后相减得到差值,再计算时间,省去了这些步骤;
SELCC:设置第一次边沿触发,哪个通道的上升沿或者下降沿;
Capture Control Register (CCR):
此寄存器功能主要设置第二次边沿触发,以及触发后是否产生中断,这个根据需求选择;
Capture Register (CR0 - CR3)
此寄存器位捕获到电平的计数器的值,这里需要根据 CRx 的计数值 / (Ctimer 时钟频率 / 1000)来计算出时间,这种计算的时间单位为 ms;
- 实战演练
这次开发环境试用 NXP 官方的 IDE MCUXpresso ,首先导出 Ctimer 的例程:
定义相关宏和一些变量:
定义使用到捕获通道引脚,这里选择 PIO0_25 ,对应开发板上的 SW1:
调用 API 进行相关配置:
中断回调函数处理:
读取计数值,计算时间
下载到开发板后按下按键 sw1 :
- 注意事项
在这里需要注意的一点就是引脚的配置,RT 系列与之前的 LPC 系列有所不同,LPC 系列配置为输入功能后一般不需要额外配置其它,下图为 RT500 的引脚功能框图:
输入捕获功能的时候需要将该位使能,否则输入无效。
评论