一、概述
笔者在制作键盘方案的过程中,需要用到定时器每隔一段时间判断是否通过 USB 向主机发送数据,其中的定时器笔者使用到 CTIMER 的 Match 中断。下面则以 NXP5516 中的 simple_match_interrupt 例程讲解如何配置和使用 CTIMER Match Interrupt。
二、配置讲解
1. 首先在 SDK 按以下路径打开 simple_match_interrupt 例程,进入 simple_match_interrupt.c 文件。...\SDK_2_12_0_LPC5516\boards\lpcxpresso55s16\driver_examples\ctimer\simple_match_interrupt\mdk
2. 例程中使用的定时器为 CTIMER2,使用 Match 通道 1、2。例程在宏定义中将定时器和通道分别重新命名为 CTIMER、CTIMER_MAT0_OUT、CTIMER_MAT1_OUT。
3. 首先使用 CLOCK_AttachClk() 为 CTIMER2 分配 96MHz 的时钟源。
4. 接着获取 CTIMER 的默认配置至定义的 config 参数,使用获取的config 参数对 CTIMER2 进行初始化。
默认的 config 参数如下,设置 mode 为定时器模式;当为定时器模式时,input 的参数可以忽略;prescale 参数为 0。
5. 接着在定义的全局变量 matchConfig0、matchConfig1 中设置 match 的参数。设定的参数具体意义如下,
enableCounterReset :为 ture 时,当计数值达到设定的 matchValue 则重置定时器数值。若为 false,则计数值达到 matchValue 后不会重置定时器数值,而是直到计数到 0xFFFF FFFF,才会置为 0。
enableCounterStop : 为 true 时,当计数值达到 matchValue 后停止定时器计数。若为 false,则计数值达到 matchValue 后不会停止定时器计数。
matchValue :匹配值,定时器计数值不断与匹配值比较,当两个值相等时,执行相应的动作。定时器定时的时间则在这里设置,在例程中,定时器的时钟频率为 96MHz,设置匹配值为 96 000 000/2,定时为 0.5 s。若设匹配值为 96,则定时为 1us。
outControl :时器计数值达到 matchValue 后,对应的定时器通道的引脚执行输出电平翻转,或无动作、输出为高电平、输出低电平等动作。
outPinInitState :设置对应的定时器通道的引脚初始电平,true 则初始为高电平,false 则初始为低电平。
enableInterrupt :为 true 时,使能定时器中断。若为 false,则不使能定时器中断。
6. 使用 CTIMER_RegisterCallBack() 可以设置定时器的回调函数,当产生定时器中断时,程序将执行回调函数内动作。一个定时器可同时设置 4 个 match 回调和 4 个 capture 回调,分别对应 4 个 match 通道和 4 个 capture 通道。
定义好定时器 match 通道的回调函数 ctimer_match0_callback()、ctimer_match1_callback() 后,放置在定义的 ctimer_callback_table[ ] 数组中,调用 CTIMER_RegisterCallBack()设置定时器的回调函数。
7. 最后调用 CTIMER_SetupMatch(),设定 match 参数。调用 CTIMER_StartTimer(),开启定时器。
三、烧录测试
烧录程序,由于例程在 match1、match2 的回调函数中不断频繁改变定时器的匹配值,从而使引脚输出方波的频率增加,在开发板上可看见,由 CTIMER2_MAT1、CTIMER2_MAT2 控制的 RGB 灯 D4 的红灯、绿灯,闪烁频率加快。
可以在 LPC5516 开发板上看到 RGB 灯 D4 红灯、绿灯交叉闪烁,且频率逐渐加快。
四、总结
本文以 NXP5516 SDK 中的 simple_match_interrupt 例程为例,讲解如何配置 CTIMER 的定时器中断,以及介绍相关参数。
参考文档:
1、 LPC55S1x/LPC551x User manual.pdf
评论