RT1052+定时器移植+LED翻转
定时器使用的是Pit定时器,pit定时器有四路,例程上用的是通道0。
但是在使用例程的时候编译找不到fsl_debug_console_conf.h头文件,配置也没有问题,实在没有办法只好把它移植到LED工程里面。
需要移植的参数如下
/* Enable clock gate for GPIO1 */
CLOCK_EnableClock(kCLOCK_Gpio1);
/* Set PERCLK_CLK source to OSC_CLK*/
CLOCK_SetMux(kCLOCK_PerclkMux, 1U);
/* Set PERCLK_CLK divider to 1 */
CLOCK_SetDiv(kCLOCK_PerclkDiv, 0U);
/*
* pitConfig.enableRunInDebug = false;
*/
PIT_GetDefaultConfig(&pitConfig);
/* Init pit module */
PIT_Init(PIT, &pitConfig);
/* Set timer period for channel 0 */
PIT_SetTimerPeriod(PIT, kPIT_Chnl_0, USEC_TO_COUNT(1000000U, PIT_SOURCE_CLOCK));
/* Enable timer interrupts for channel 0 */
PIT_EnableInterrupts(PIT, kPIT_Chnl_0, kPIT_TimerInterruptEnable);
/* Enable at the NVIC */
EnableIRQ(PIT_IRQ_ID);
/* Start channel 0 */
PRINTF("\r\nStarting channel No.0 ...");
PIT_StartTimer(PIT, kPIT_Chnl_0);
设置定时器频率为 PIT_SetTimerPeriod(PIT, kPIT_Chnl_0, USEC_TO_COUNT(1000000U, PIT_SOURCE_CLOCK));
USEC_TO_COUNT(1000000U, PIT_SOURCE_CLOCK)是us级定时器,还有ms级定时器MSEC_TO_COUNT,根据介绍计算相关计数,1000000/1000000U=1S。
然后设置中断,使能通道0。
中断响应函数PIT_IRQHandler
通过读取各通道的状态PIT_GetStatusFlags(PIT, kPIT_Chnl_0);
kPIT_TimerFlag,值为1。也就是为1的时候触发该通道定时器。
然后清除定时器
PIT_ClearStatusFlags(PIT, kPIT_Chnl_0, kPIT_TimerFlag);
通过定时器来控制LED的翻转
USER_LED_TOGGLE();
<ignore_js_op>
但是在使用例程的时候编译找不到fsl_debug_console_conf.h头文件,配置也没有问题,实在没有办法只好把它移植到LED工程里面。
需要移植的参数如下
/* Enable clock gate for GPIO1 */
CLOCK_EnableClock(kCLOCK_Gpio1);
/* Set PERCLK_CLK source to OSC_CLK*/
CLOCK_SetMux(kCLOCK_PerclkMux, 1U);
/* Set PERCLK_CLK divider to 1 */
CLOCK_SetDiv(kCLOCK_PerclkDiv, 0U);
/*
* pitConfig.enableRunInDebug = false;
*/
PIT_GetDefaultConfig(&pitConfig);
/* Init pit module */
PIT_Init(PIT, &pitConfig);
/* Set timer period for channel 0 */
PIT_SetTimerPeriod(PIT, kPIT_Chnl_0, USEC_TO_COUNT(1000000U, PIT_SOURCE_CLOCK));
/* Enable timer interrupts for channel 0 */
PIT_EnableInterrupts(PIT, kPIT_Chnl_0, kPIT_TimerInterruptEnable);
/* Enable at the NVIC */
EnableIRQ(PIT_IRQ_ID);
/* Start channel 0 */
PRINTF("\r\nStarting channel No.0 ...");
PIT_StartTimer(PIT, kPIT_Chnl_0);
设置定时器频率为 PIT_SetTimerPeriod(PIT, kPIT_Chnl_0, USEC_TO_COUNT(1000000U, PIT_SOURCE_CLOCK));
USEC_TO_COUNT(1000000U, PIT_SOURCE_CLOCK)是us级定时器,还有ms级定时器MSEC_TO_COUNT,根据介绍计算相关计数,1000000/1000000U=1S。
然后设置中断,使能通道0。
中断响应函数PIT_IRQHandler
通过读取各通道的状态PIT_GetStatusFlags(PIT, kPIT_Chnl_0);
kPIT_TimerFlag,值为1。也就是为1的时候触发该通道定时器。
然后清除定时器
PIT_ClearStatusFlags(PIT, kPIT_Chnl_0, kPIT_TimerFlag);
通过定时器来控制LED的翻转
USER_LED_TOGGLE();
<ignore_js_op>