基于RT1170 使能PIT定时功能 (七)
本文主要是通过迁移的思维,记录本人初次使用NXP MCUXpresso SDK API进行BSP开发
MCUXpresso SDK PIT API 接口链接
在MCUXpresso SDK 框架下提供了对PIT进行操作的接口。周期性的定时器比较简单,相对复杂的应用是组合定时器的使用。挑最简单的方式学习,先"知其然",再"知其所以然"。
1. 首先阅读原理图
设计中有一个输出引脚,如下所示,可以通过PIT定时器,控制LED灯的显示:
USER_KEY1----GPIO_AD_35----GPIO10_IO02
2. SDK api 应用
2.1 引脚配置
LED引脚复用配置,GPIO输出记得配置方向和初始输出电平。 PIT不需要初始化相关的引脚。
2.2 时钟配置
从上图可以看出PIT1的时钟源从BUS_CLK_ROOT, PIT2的时钟源从BUS_LPSR_CLK_ROOT获取。
在上图序号1中输入想要查找的时钟名称,就可以得到其时钟源的时钟路径。从上图可以分析得到,外部的24Mhz时钟通过倍频得到480Mhz SYS_PLL3_CLK, BUS_CLK_ROOT是从SYS_PLL3_CLK二分频得到的,并作为PIT的时钟源。
2.3 外设配置
在外设配置里,新建功能组BOARD_InitPeripheral_PIT1_Ch_0
然后按上图序号操作,就可以进行PIT的驱动初始化配置界面。
序号1:控制PIT1
序号2:DEBUG使能中断
序号3:使用默认配置
序号4:选择相应的时钟源,由于父时钟BUS_CLK_ROOT可选。
序号5:选择PIT通道和设置中断产生的周期。默认使用PIT1的通道0.
上述配置已满足了对周期性定时器的设置,当然最关键的事情在于编写中断处理函数,以满足应用的需求。
点击上图;即可生成中断函数横板,在当中添加相应的逻辑即可。如下所示:
/* PIT1_IRQn interrupt handler */
void PIT1_IRQHANDLER(void) {
/* Place your code here */
/* Add for ARM errata 838869, affects Cortex-M4, Cortex-M4F
Store immediate overlapping exception return operation might vector to incorrect interrupt. */
#if defined __CORTEX_M && (__CORTEX_M == 4U)
__DSB();
#endif
}
在中断处理函数当中记得清楚中断标志位。
/* Place your code here */
/* Clear interrupt flag.*/
PIT_ClearStatusFlags(PIT1_PERIPHERAL, PIT1_CHANNEL_0, kPIT_TimerFlag);
2.4 验证测试
将生成的代码替换driver_examples\pit\cm7相对应的代码,最终达到同样的效果。目前代码没有放出来供各位参考.
4. 总结
本次config tool工程已提交到https://gitee.com/yilianghong/mex.git 供参考。详细修改见如下两次提交。
+AHB-03 New feature support PIT1 channel 0 driver init
+AHB-02 New feature support GPIO_AD_35 Pin output setting