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>

定时器.jpg (2.08 MB, 下载次数: 14)

下载附件

2018-11-6 22:40 上传

 

posted on 2022-06-19 16:04  张凌001  阅读(91)  评论(0编辑  收藏  举报

导航