160|2

107

帖子

1

TA的资源

一粒金砂(高级)

楼主
 

MCXN947 simple_match 例程 学习分享 [复制链接]

介绍        

        例程使用CTIMER(计数器/定时器模块)来实现一个简单的定时输出功能。具体来说,它设置了一个定时器,当计数器达到预设值时,会切换一个输出(在这个例子中是连接到LED的引脚),从而以固定的频率闪烁LED。

外设结构体配置

    matchConfig.enableCounterReset = true;
    matchConfig.enableCounterStop  = false;
    matchConfig.matchValue         = CTIMER_CLK_FREQ / 2;
    matchConfig.outControl         = kCTIMER_Output_Toggle;
    matchConfig.outPinInitState    = true;
    matchConfig.enableInterrupt    = false;
    CTIMER_SetupMatch(CTIMER, CTIMER_MAT_OUT, &matchConfig);
    CTIMER_StartTimer(CTIMER);

 

外部匹配输出——当匹配寄存器(Match (MR0 - MR3))的值等于定时器计数器(Timer Counter, TC)的值时,该输出可以切换状态、变为低电平、变为高电平,或者不进行任何操作。外部匹配(EMR)控制这一输出的功能。您可以为多个引脚并行选择匹配输出功能。

 

 

/*!
 * [url=home.php?mod=space&uid=159083]@brief[/url] 匹配配置
 *
 * 此结构体用于存储每个匹配寄存器的配置设置。
 */
typedef struct _ctimer_match_config
{
    uint32_t matchValue;                      /*!< 存储在匹配寄存器中的值。当计数器达到此值时,会触发预设动作。 */
    bool enableCounterReset;                  /*!< 是否在匹配时重置计数器。
                                                   - true: 将重置计数器。
                                                   - false: 不会重置计数器。 */
    bool enableCounterStop;                   /*!< 是否在匹配时停止计数器。
                                                   - true: 将停止计数器。
                                                   - false:不会停止计数器。 */
    ctimer_match_output_control_t outControl; /*!< 匹配时在输出使能位/输出上采取的动作。*/
                                                   
    bool outPinInitState;                     /*!< 输出使能位/输出的初始值。
                                                   - true: 初始状态为高电平。
                                                   - false: 初始状态为低电平。 */
    bool enableInterrupt;                     /*!< 是否在匹配时生成中断。
                                                   - true: 匹配将生成中断。
                                                   - false: 匹配时不会生成中断。 */
 
} ctimer_match_config_t;

 

例程代码

/*
 * Copyright (c) 2016, Freescale Semiconductor, Inc.
 * Copyright 2016-2020 NXP
 * All rights reserved.
 *
 * SPDX-License-Identifier: BSD-3-Clause
 */

/*******************************************************************************
 * Includes
 ******************************************************************************/

#include "fsl_debug_console.h"
#include "pin_mux.h"
#include "board.h"
#include "fsl_ctimer.h"

#include <stdbool.h>
/*******************************************************************************
 * Definitions
 ******************************************************************************/
#define CTIMER          CTIMER0         /* Timer 0 */
#define CTIMER_MAT_OUT  kCTIMER_Match_0 /* Match output 0 */
#define CTIMER_EMT_OUT  (1u << kCTIMER_Match_0)
#define CTIMER_CLK_FREQ CLOCK_GetCTimerClkFreq(0U)

#define LED_RED1_INIT   LED_RED_INIT
#define LED_RED1_ON     LED_RED_ON
#define LED_RED1_OFF    LED_RED_OFF

/*******************************************************************************
 * Prototypes
 ******************************************************************************/

/*******************************************************************************
 * Variables
 ******************************************************************************/

/*******************************************************************************
 * Code
 ******************************************************************************/

/*!
 * @brief Main function
 */
int main(void)
{
    ctimer_config_t config;
    ctimer_match_config_t matchConfig;

    /* Init hardware*/
    /* attach FRO 12M to FLEXCOMM4 (debug console) */
    CLOCK_SetClkDiv(kCLOCK_DivFlexcom4Clk, 1u);
    CLOCK_AttachClk(BOARD_DEBUG_UART_CLK_ATTACH);

    /* Use FRO HF clock for some of the Ctimers */
    CLOCK_SetClkDiv(kCLOCK_DivCtimer0Clk, 1u);
    CLOCK_AttachClk(kFRO_HF_to_CTIMER0);

    BOARD_InitPins();
    BOARD_InitBootClocks();
    BOARD_InitDebugConsole();

#if defined(BOARD_HAS_NO_CTIMER_OUTPUT_PIN_CONNECTED_TO_LED)
    LED_RED1_INIT(LOGIC_LED_OFF);
#endif

    PRINTF("CTimer match example to toggle the output on a match\r\n");

    CTIMER_GetDefaultConfig(&config);

    CTIMER_Init(CTIMER, &config);

    matchConfig.enableCounterReset = true;
    matchConfig.enableCounterStop  = false;
    matchConfig.matchValue         = CTIMER_CLK_FREQ / 2;
    matchConfig.outControl         = kCTIMER_Output_Toggle;
    matchConfig.outPinInitState    = true;
    matchConfig.enableInterrupt    = false;
    CTIMER_SetupMatch(CTIMER, CTIMER_MAT_OUT, &matchConfig);
    CTIMER_StartTimer(CTIMER);

    while (1)
    {
#if defined(BOARD_HAS_NO_CTIMER_OUTPUT_PIN_CONNECTED_TO_LED)
        /* No timer match output pin connected to a LED
         * toggle LED manually according to match status
         */
        if (CTIMER_GetOutputMatchStatus(CTIMER, CTIMER_EMT_OUT))
        {
            LED_RED1_ON();
        }
        else
        {
            LED_RED1_OFF();
        }
#endif
    }
}

 

 

 

此帖出自NXP MCU论坛

最新回复

例程使用CTIMER(计数器/定时器模块)来实现一个简单的定时输出功能,这种功能还是方便些吧   详情 回复 发表于 昨天 07:27
点赞 关注
 

回复
举报

6756

帖子

0

TA的资源

五彩晶圆(高级)

沙发
 

例程使用CTIMER(计数器/定时器模块)来实现一个简单的定时输出功能,这种功能还是方便些吧

此帖出自NXP MCU论坛

点评

有点像ST的标准定时器  详情 回复 发表于 昨天 08:40
 
 
 

回复

107

帖子

1

TA的资源

一粒金砂(高级)

板凳
 
Jacktang 发表于 2025-1-6 07:27 例程使用CTIMER(计数器/定时器模块)来实现一个简单的定时输出功能,这种功能还是方便些吧

有点像ST的标准定时器

此帖出自NXP MCU论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表