596 lines
		
	
	
	
		
			14 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
		
		
			
		
	
	
			596 lines
		
	
	
	
		
			14 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
|  | /********************************** (C) COPYRIGHT *******************************
 | |||
|  |  * File Name          : CH59x_timer.h | |||
|  |  * Author             : WCH | |||
|  |  * Version            : V1.2 | |||
|  |  * Date               : 2021/11/17 | |||
|  |  * Description | |||
|  |  ********************************************************************************* | |||
|  |  * Copyright (c) 2021 Nanjing Qinheng Microelectronics Co., Ltd. | |||
|  |  * Attention: This software (modified or not) and binary are used for  | |||
|  |  * microcontroller manufactured by Nanjing Qinheng Microelectronics. | |||
|  |  *******************************************************************************/ | |||
|  | 
 | |||
|  | #ifndef __CH59x_TIMER_H__
 | |||
|  | #define __CH59x_TIMER_H__
 | |||
|  | 
 | |||
|  | #ifdef __cplusplus
 | |||
|  | extern "C" { | |||
|  | #endif
 | |||
|  | 
 | |||
|  | #define DataBit_25            (1 << 25)
 | |||
|  | 
 | |||
|  | /**
 | |||
|  |  * @brief  TMR0 interrupt bit define | |||
|  |  */ | |||
|  | 
 | |||
|  | #define TMR0_3_IT_CYC_END     0x01  // 周期结束标志:捕捉-超时,定时-周期结束,PWM-周期结束
 | |||
|  | #define TMR0_3_IT_DATA_ACT    0x02  // 数据有效标志:捕捉-新数据,PWM-有效电平结束
 | |||
|  | #define TMR0_3_IT_FIFO_HF     0x04  // FIFO 使用过半:捕捉- FIFO>=4, PWM- FIFO<4
 | |||
|  | #define TMR1_2_IT_DMA_END     0x08  // DMA 结束,支持TMR1和TMR2
 | |||
|  | #define TMR0_3_IT_FIFO_OV     0x10  // FIFO 溢出:捕捉- FIFO满, PWM- FIFO空
 | |||
|  | 
 | |||
|  | /**
 | |||
|  |  * @brief  Configuration PWM effective level repeat times | |||
|  |  */ | |||
|  | typedef enum | |||
|  | { | |||
|  |     PWM_Times_1 = 0, // PWM 有效输出重复1次数
 | |||
|  |     PWM_Times_4,     // PWM 有效输出重复4次数
 | |||
|  |     PWM_Times_8,     // PWM 有效输出重复8次数
 | |||
|  |     PWM_Times_16,    // PWM 有效输出重复16次数
 | |||
|  | } PWM_RepeatTsTypeDef; | |||
|  | 
 | |||
|  | /**
 | |||
|  |  * @brief  Configuration Cap mode | |||
|  |  */ | |||
|  | typedef enum | |||
|  | { | |||
|  |     CAP_NULL = 0,         // 不捕捉 & 不计数
 | |||
|  |     Edge_To_Edge,         // 任意边沿之间  &  计数任意边沿
 | |||
|  |     FallEdge_To_FallEdge, // 下降沿到下降沿  & 计数下降沿
 | |||
|  |     RiseEdge_To_RiseEdge, // 上升沿到上升沿  &  计数上升沿
 | |||
|  | } CapModeTypeDef; | |||
|  | 
 | |||
|  | /**
 | |||
|  |  * @brief  Configuration DMA mode | |||
|  |  */ | |||
|  | typedef enum | |||
|  | { | |||
|  |     Mode_Single = 0, // 单次模式
 | |||
|  |     Mode_LOOP,       // 循环模式
 | |||
|  | } DMAModeTypeDef; | |||
|  | 
 | |||
|  | /**
 | |||
|  |  * @brief   定时功能初始化 | |||
|  |  * | |||
|  |  * @param   t       - 定时时间,基于当前系统时钟Tsys, 最长定时周期 67108864 | |||
|  |  */ | |||
|  | void TMR0_TimerInit(uint32_t t); | |||
|  | 
 | |||
|  | /**
 | |||
|  |  * @brief   获取当前定时器值,最大67108864 | |||
|  |  * | |||
|  |  * @return  当前定时器值 | |||
|  |  */ | |||
|  | #define TMR0_GetCurrentTimer()    R32_TMR0_COUNT
 | |||
|  | 
 | |||
|  | /**
 | |||
|  |  * @brief   边沿计数功能初始化 | |||
|  |  * | |||
|  |  * @param   cap     - 采集计数类型 | |||
|  |  */ | |||
|  | void TMR0_EXTSingleCounterInit(CapModeTypeDef cap); | |||
|  | 
 | |||
|  | /**
 | |||
|  |  * @brief   设置计数统计溢出大小,最大67108862 | |||
|  |  * | |||
|  |  * @param   cyc     - 计数统计溢出大小 | |||
|  |  */ | |||
|  | #define TMR0_CountOverflowCfg(cyc)    (R32_TMR0_CNT_END = (cyc + 2))
 | |||
|  | 
 | |||
|  | /**
 | |||
|  |  * @brief   获取当前计数值,最大67108862 | |||
|  |  * | |||
|  |  * @return  当前计数值 | |||
|  |  */ | |||
|  | #define TMR0_GetCurrentCount()        R32_TMR0_COUNT
 | |||
|  | 
 | |||
|  | /**
 | |||
|  |  * @brief   PWM0 通道输出波形周期配置, 最大67108864 | |||
|  |  * | |||
|  |  * @param   cyc     - 输出波形周期 | |||
|  |  */ | |||
|  | #define TMR0_PWMCycleCfg(cyc)         (R32_TMR0_CNT_END = cyc)
 | |||
|  | 
 | |||
|  | /**
 | |||
|  |  * @brief   PWM 输出初始化 | |||
|  |  * | |||
|  |  * @param   pr      - select wave polar, refer to PWMX_PolarTypeDef | |||
|  |  * @param   ts      - set pwm repeat times, refer to PWM_RepeatTsTypeDef | |||
|  |  */ | |||
|  | void TMR0_PWMInit(PWMX_PolarTypeDef pr, PWM_RepeatTsTypeDef ts); | |||
|  | 
 | |||
|  | /**
 | |||
|  |  * @brief   PWM0 有效数据脉宽, 最大67108864 | |||
|  |  * | |||
|  |  * @param   d       - 有效数据脉宽 | |||
|  |  */ | |||
|  | #define TMR0_PWMActDataWidth(d)    (R32_TMR0_FIFO = d)
 | |||
|  | 
 | |||
|  | /**
 | |||
|  |  * @brief   CAP0 捕捉电平超时配置, 最大33554432 | |||
|  |  * | |||
|  |  * @param   cyc     - 捕捉电平超时 | |||
|  |  */ | |||
|  | #define TMR0_CAPTimeoutCfg(cyc)    (R32_TMR0_CNT_END = cyc)
 | |||
|  | 
 | |||
|  | /**
 | |||
|  |  * @brief   外部信号捕捉功能初始化 | |||
|  |  * | |||
|  |  * @param   cap     - select capture mode, refer to CapModeTypeDef | |||
|  |  */ | |||
|  | void TMR0_CapInit(CapModeTypeDef cap); | |||
|  | 
 | |||
|  | /**
 | |||
|  |  * @brief   获取脉冲数据 | |||
|  |  * | |||
|  |  * @return  脉冲数据 | |||
|  |  */ | |||
|  | #define TMR0_CAPGetData()        R32_TMR0_FIFO
 | |||
|  | 
 | |||
|  | /**
 | |||
|  |  * @brief   获取当前已捕获数据个数 | |||
|  |  * | |||
|  |  * @return  当前已捕获数据个数 | |||
|  |  */ | |||
|  | #define TMR0_CAPDataCounter()    R8_TMR0_FIFO_COUNT
 | |||
|  | 
 | |||
|  | /**
 | |||
|  |  * @brief   关闭 TMR0 PWM输出 | |||
|  |  */ | |||
|  | #define TMR0_PWMDisable()           (R8_TMR0_CTRL_MOD &= ~RB_TMR_OUT_EN)
 | |||
|  | 
 | |||
|  | /**
 | |||
|  |  * @brief   开启 TMR0 PWM输出 | |||
|  |  */ | |||
|  | #define TMR0_PWMEnable()           (R8_TMR0_CTRL_MOD |= RB_TMR_OUT_EN)
 | |||
|  | 
 | |||
|  | /**
 | |||
|  |  * @brief   关闭 TMR0 | |||
|  |  */ | |||
|  | #define TMR0_Disable()           (R8_TMR0_CTRL_MOD &= ~RB_TMR_COUNT_EN)
 | |||
|  | 
 | |||
|  | /**
 | |||
|  |  * @brief   开启 TMR0 | |||
|  |  */ | |||
|  | #define TMR0_Enable()            (R8_TMR0_CTRL_MOD |= RB_TMR_COUNT_EN)
 | |||
|  | 
 | |||
|  | /**
 | |||
|  |  * @brief   中断配置 | |||
|  |  * | |||
|  |  * @param   s       - 使能/关闭 | |||
|  |  * @param   f       - refer to TMR interrupt bit define | |||
|  |  */ | |||
|  | #define TMR0_ITCfg(s, f)         ((s) ? (R8_TMR0_INTER_EN |= f) : (R8_TMR0_INTER_EN &= ~f))
 | |||
|  | 
 | |||
|  | /**
 | |||
|  |  * @brief   清除中断标志 | |||
|  |  * | |||
|  |  * @param   f       - refer to TMR interrupt bit define | |||
|  |  */ | |||
|  | #define TMR0_ClearITFlag(f)      (R8_TMR0_INT_FLAG = f)
 | |||
|  | 
 | |||
|  | /**
 | |||
|  |  * @brief   查询中断标志状态 | |||
|  |  * | |||
|  |  * @param   f       - refer to TMR interrupt bit define | |||
|  |  */ | |||
|  | #define TMR0_GetITFlag(f)        (R8_TMR0_INT_FLAG & f)
 | |||
|  | 
 | |||
|  | /**
 | |||
|  |  * @brief   定时功能初始化 | |||
|  |  * | |||
|  |  * @param   t       - 定时时间,基于当前系统时钟Tsys, 最长定时周期 67108864 | |||
|  |  */ | |||
|  | void TMR1_TimerInit(uint32_t t); | |||
|  | 
 | |||
|  | /**
 | |||
|  |  * @brief   获取当前定时器值,最大67108864 | |||
|  |  * | |||
|  |  * @return  当前定时器值 | |||
|  |  */ | |||
|  | #define TMR1_GetCurrentTimer()    R32_TMR1_COUNT
 | |||
|  | 
 | |||
|  | /**
 | |||
|  |  * @brief   边沿计数功能初始化 | |||
|  |  * | |||
|  |  * @param   cap     - 采集计数类型 | |||
|  |  */ | |||
|  | void TMR1_EXTSingleCounterInit(CapModeTypeDef cap); | |||
|  | 
 | |||
|  | /**
 | |||
|  |  * @brief   设置计数统计溢出大小,最大67108862 | |||
|  |  * | |||
|  |  * @param   cyc     - 计数统计溢出大小 | |||
|  |  */ | |||
|  | #define TMR1_CountOverflowCfg(cyc)    (R32_TMR1_CNT_END = (cyc + 2))
 | |||
|  | 
 | |||
|  | /**
 | |||
|  |  * @brief   获取当前计数值,最大67108862 | |||
|  |  * | |||
|  |  * @return  当前计数值 | |||
|  |  */ | |||
|  | #define TMR1_GetCurrentCount()        R32_TMR1_COUNT
 | |||
|  | 
 | |||
|  | /**
 | |||
|  |  * @brief   PWM1 通道输出波形周期配置, 最大67108864 | |||
|  |  * | |||
|  |  * @param   cyc     - 输出波形周期 | |||
|  |  */ | |||
|  | #define TMR1_PWMCycleCfg(cyc)         (R32_TMR1_CNT_END = cyc)
 | |||
|  | 
 | |||
|  | /**
 | |||
|  |  * @brief   PWM 输出初始化 | |||
|  |  * | |||
|  |  * @param   pr      - select wave polar, refer to PWMX_PolarTypeDef | |||
|  |  * @param   ts      - set pwm repeat times, refer to PWM_RepeatTsTypeDef | |||
|  |  */ | |||
|  | void TMR1_PWMInit(PWMX_PolarTypeDef pr, PWM_RepeatTsTypeDef ts); | |||
|  | 
 | |||
|  | /**
 | |||
|  |  * @brief   PWM1 有效数据脉宽, 最大67108864 | |||
|  |  * | |||
|  |  * @param   d       - 有效数据脉宽 | |||
|  |  */ | |||
|  | #define TMR1_PWMActDataWidth(d)    (R32_TMR1_FIFO = d)
 | |||
|  | 
 | |||
|  | /**
 | |||
|  |  * @brief   CAP1 捕捉电平超时配置, 最大33554432 | |||
|  |  * | |||
|  |  * @param   cyc     - 捕捉电平超时 | |||
|  |  */ | |||
|  | #define TMR1_CAPTimeoutCfg(cyc)    (R32_TMR1_CNT_END = cyc)
 | |||
|  | 
 | |||
|  | /**
 | |||
|  |  * @brief   外部信号捕捉功能初始化 | |||
|  |  * | |||
|  |  * @param   cap     - select capture mode, refer to CapModeTypeDef | |||
|  |  */ | |||
|  | void TMR1_CapInit(CapModeTypeDef cap); | |||
|  | 
 | |||
|  | /**
 | |||
|  |  * @brief   获取脉冲数据 | |||
|  |  * | |||
|  |  * @return  脉冲数据 | |||
|  |  */ | |||
|  | #define TMR1_CAPGetData()        R32_TMR1_FIFO
 | |||
|  | 
 | |||
|  | /**
 | |||
|  |  * @brief   获取当前已捕获数据个数 | |||
|  |  * | |||
|  |  * @return  当前已捕获数据个数 | |||
|  |  */ | |||
|  | #define TMR1_CAPDataCounter()    R8_TMR1_FIFO_COUNT
 | |||
|  | 
 | |||
|  | /**
 | |||
|  |  * @brief   配置DMA功能 | |||
|  |  * | |||
|  |  * @param   s           - 是否打开DMA功能 | |||
|  |  * @param   startAddr   - DMA 起始地址 | |||
|  |  * @param   endAddr     - DMA 结束地址 | |||
|  |  * @param   m           - 配置DMA模式 | |||
|  |  */ | |||
|  | void TMR1_DMACfg(uint8_t s, uint16_t startAddr, uint16_t endAddr, DMAModeTypeDef m); | |||
|  | 
 | |||
|  | /**
 | |||
|  |  * @brief   关闭 TMR1 PWM输出 | |||
|  |  */ | |||
|  | #define TMR1_PWMDisable()           (R8_TMR1_CTRL_MOD &= ~RB_TMR_OUT_EN)
 | |||
|  | 
 | |||
|  | /**
 | |||
|  |  * @brief   开启 TMR1 PWM输出 | |||
|  |  */ | |||
|  | #define TMR1_PWMEnable()           (R8_TMR1_CTRL_MOD |= RB_TMR_OUT_EN)
 | |||
|  | 
 | |||
|  | /**
 | |||
|  |  * @brief   关闭 TMR1 | |||
|  |  */ | |||
|  | #define TMR1_Disable()         (R8_TMR1_CTRL_MOD &= ~RB_TMR_COUNT_EN)
 | |||
|  | 
 | |||
|  | /**
 | |||
|  |  * @brief   开启 TMR1 | |||
|  |  */ | |||
|  | #define TMR1_Enable()          (R8_TMR1_CTRL_MOD |= RB_TMR_COUNT_EN)
 | |||
|  | 
 | |||
|  | /**
 | |||
|  |  * @brief   中断配置 | |||
|  |  * | |||
|  |  * @param   s       - 使能/关闭 | |||
|  |  * @param   f       - refer to TMR interrupt bit define | |||
|  |  */ | |||
|  | #define TMR1_ITCfg(s, f)       ((s) ? (R8_TMR1_INTER_EN |= f) : (R8_TMR1_INTER_EN &= ~f))
 | |||
|  | 
 | |||
|  | /**
 | |||
|  |  * @brief   清除中断标志 | |||
|  |  * | |||
|  |  * @param   f       - refer to TMR interrupt bit define | |||
|  |  */ | |||
|  | #define TMR1_ClearITFlag(f)    (R8_TMR1_INT_FLAG = f)
 | |||
|  | 
 | |||
|  | /**
 | |||
|  |  * @brief   查询中断标志状态 | |||
|  |  * | |||
|  |  * @param   f       - refer to TMR interrupt bit define | |||
|  |  */ | |||
|  | #define TMR1_GetITFlag(f)      (R8_TMR1_INT_FLAG & f)
 | |||
|  | 
 | |||
|  | /**
 | |||
|  |  * @brief   定时功能初始化 | |||
|  |  * | |||
|  |  * @param   t       - 定时时间,基于当前系统时钟Tsys, 最长定时周期 67108864 | |||
|  |  */ | |||
|  | void TMR2_TimerInit(uint32_t t); | |||
|  | 
 | |||
|  | /**
 | |||
|  |  * @brief   获取当前定时器值,最大67108864 | |||
|  |  * | |||
|  |  * @return  当前定时器值 | |||
|  |  */ | |||
|  | #define TMR2_GetCurrentTimer()    R32_TMR2_COUNT
 | |||
|  | 
 | |||
|  | /**
 | |||
|  |  * @brief   边沿计数功能初始化 | |||
|  |  * | |||
|  |  * @param   cap     - 采集计数类型 | |||
|  |  */ | |||
|  | void TMR2_EXTSingleCounterInit(CapModeTypeDef cap); | |||
|  | 
 | |||
|  | /**
 | |||
|  |  * @brief   设置计数统计溢出大小,最大67108862 | |||
|  |  * | |||
|  |  * @param   cyc     - 计数统计溢出大小 | |||
|  |  */ | |||
|  | #define TMR2_CountOverflowCfg(cyc)    (R32_TMR2_CNT_END = (cyc + 2))
 | |||
|  | 
 | |||
|  | /**
 | |||
|  |  * @brief   获取当前计数值,最大67108862 | |||
|  |  * | |||
|  |  * @return  当前计数值 | |||
|  |  */ | |||
|  | #define TMR2_GetCurrentCount()        R32_TMR2_COUNT
 | |||
|  | 
 | |||
|  | /**
 | |||
|  |  * @brief   PWM2 通道输出波形周期配置, 最大67108864 | |||
|  |  * | |||
|  |  * @param   cyc     - 输出波形周期 | |||
|  |  */ | |||
|  | #define TMR2_PWMCycleCfg(cyc)         (R32_TMR2_CNT_END = cyc)
 | |||
|  | 
 | |||
|  | /**
 | |||
|  |  * @brief   PWM 输出初始化 | |||
|  |  * | |||
|  |  * @param   pr      - select wave polar, refer to PWMX_PolarTypeDef | |||
|  |  * @param   ts      - set pwm repeat times, refer to PWM_RepeatTsTypeDef | |||
|  |  */ | |||
|  | void TMR2_PWMInit(PWMX_PolarTypeDef pr, PWM_RepeatTsTypeDef ts); | |||
|  | 
 | |||
|  | /**
 | |||
|  |  * @brief   PWM2 有效数据脉宽, 最大67108864 | |||
|  |  * | |||
|  |  * @param   d       - 有效数据脉宽 | |||
|  |  */ | |||
|  | #define TMR2_PWMActDataWidth(d)    (R32_TMR2_FIFO = d)
 | |||
|  | 
 | |||
|  | /**
 | |||
|  |  * @brief   CAP2 捕捉电平超时配置, 最大33554432 | |||
|  |  * | |||
|  |  * @param   cyc     - 捕捉电平超时 | |||
|  |  */ | |||
|  | #define TMR2_CAPTimeoutCfg(cyc)    (R32_TMR2_CNT_END = cyc)
 | |||
|  | 
 | |||
|  | /**
 | |||
|  |  * @brief   外部信号捕捉功能初始化 | |||
|  |  * | |||
|  |  * @param   cap     - select capture mode, refer to CapModeTypeDef | |||
|  |  */ | |||
|  | void TMR2_CapInit(CapModeTypeDef cap); | |||
|  | 
 | |||
|  | /**
 | |||
|  |  * @brief   获取脉冲数据 | |||
|  |  * | |||
|  |  * @return  脉冲数据 | |||
|  |  */ | |||
|  | #define TMR2_CAPGetData()        R32_TMR2_FIFO
 | |||
|  | 
 | |||
|  | /**
 | |||
|  |  * @brief   获取当前已捕获数据个数 | |||
|  |  * | |||
|  |  * @return  当前已捕获数据个数 | |||
|  |  */ | |||
|  | #define TMR2_CAPDataCounter()    R8_TMR2_FIFO_COUNT
 | |||
|  | 
 | |||
|  | /**
 | |||
|  |  * @brief   配置DMA功能 | |||
|  |  * | |||
|  |  * @param   s           - 是否打开DMA功能 | |||
|  |  * @param   startAddr   - DMA 起始地址 | |||
|  |  * @param   endAddr     - DMA 结束地址 | |||
|  |  * @param   m           - 配置DMA模式 | |||
|  |  */ | |||
|  | void TMR2_DMACfg(uint8_t s, uint32_t startAddr, uint32_t endAddr, DMAModeTypeDef m); | |||
|  | 
 | |||
|  | /**
 | |||
|  |  * @brief   关闭 TMR2 PWM输出 | |||
|  |  */ | |||
|  | #define TMR2_PWMDisable()           (R8_TMR2_CTRL_MOD &= ~RB_TMR_OUT_EN)
 | |||
|  | 
 | |||
|  | /**
 | |||
|  |  * @brief   开启 TMR2 PWM输出 | |||
|  |  */ | |||
|  | #define TMR2_PWMEnable()           (R8_TMR2_CTRL_MOD |= RB_TMR_OUT_EN)
 | |||
|  | 
 | |||
|  | /**
 | |||
|  |  * @brief   关闭 TMR2 | |||
|  |  */ | |||
|  | #define TMR2_Disable()         (R8_TMR2_CTRL_MOD &= ~RB_TMR_COUNT_EN)
 | |||
|  | 
 | |||
|  | /**
 | |||
|  |  * @brief   开启 TMR2 | |||
|  |  */ | |||
|  | #define TMR2_Enable()          (R8_TMR2_CTRL_MOD |= RB_TMR_COUNT_EN)
 | |||
|  | 
 | |||
|  | /**
 | |||
|  |  * @brief   中断配置 | |||
|  |  * | |||
|  |  * @param   s       - 使能/关闭 | |||
|  |  * @param   f       - refer to TMR interrupt bit define | |||
|  |  */ | |||
|  | #define TMR2_ITCfg(s, f)       ((s) ? (R8_TMR2_INTER_EN |= f) : (R8_TMR2_INTER_EN &= ~f))
 | |||
|  | 
 | |||
|  | /**
 | |||
|  |  * @brief   清除中断标志 | |||
|  |  * | |||
|  |  * @param   f       - refer to TMR interrupt bit define | |||
|  |  */ | |||
|  | #define TMR2_ClearITFlag(f)    (R8_TMR2_INT_FLAG = f)
 | |||
|  | 
 | |||
|  | /**
 | |||
|  |  * @brief   查询中断标志状态 | |||
|  |  * | |||
|  |  * @param   f       - refer to TMR interrupt bit define | |||
|  |  */ | |||
|  | #define TMR2_GetITFlag(f)      (R8_TMR2_INT_FLAG & f)
 | |||
|  | 
 | |||
|  | /**
 | |||
|  |  * @brief   定时功能初始化 | |||
|  |  * | |||
|  |  * @param   t       - 定时时间,基于当前系统时钟Tsys, 最长定时周期 67108864 | |||
|  |  */ | |||
|  | void TMR3_TimerInit(uint32_t t); | |||
|  | 
 | |||
|  | /**
 | |||
|  |  * @brief   获取当前定时器值,最大67108864 | |||
|  |  * | |||
|  |  * @return  当前定时器值 | |||
|  |  */ | |||
|  | #define TMR3_GetCurrentTimer()    R32_TMR3_COUNT
 | |||
|  | 
 | |||
|  | /**
 | |||
|  |  * @brief   边沿计数功能初始化 | |||
|  |  * | |||
|  |  * @param   cap     - 采集计数类型 | |||
|  |  */ | |||
|  | void TMR3_EXTSingleCounterInit(CapModeTypeDef cap); | |||
|  | 
 | |||
|  | /**
 | |||
|  |  * @brief   设置计数统计溢出大小,最大67108862 | |||
|  |  * | |||
|  |  * @param   cyc     - 计数统计溢出大小 | |||
|  |  */ | |||
|  | #define TMR3_CountOverflowCfg(cyc)    (R32_TMR3_CNT_END = (cyc + 2))
 | |||
|  | 
 | |||
|  | /**
 | |||
|  |  * @brief   获取当前计数值,最大67108862 | |||
|  |  * | |||
|  |  * @return  当前计数值 | |||
|  |  */ | |||
|  | #define TMR3_GetCurrentCount()        R32_TMR3_COUNT
 | |||
|  | 
 | |||
|  | /**
 | |||
|  |  * @brief   PWM3 通道输出波形周期配置, 最大67108864 | |||
|  |  * | |||
|  |  * @param   cyc     - 输出波形周期 | |||
|  |  */ | |||
|  | #define TMR3_PWMCycleCfg(cyc)         (R32_TMR3_CNT_END = cyc)
 | |||
|  | 
 | |||
|  | /**
 | |||
|  |  * @brief   PWM 输出初始化 | |||
|  |  * | |||
|  |  * @param   pr      - select wave polar, refer to PWMX_PolarTypeDef | |||
|  |  * @param   ts      - set pwm repeat times, refer to PWM_RepeatTsTypeDef | |||
|  |  */ | |||
|  | void TMR3_PWMInit(PWMX_PolarTypeDef pr, PWM_RepeatTsTypeDef ts); | |||
|  | 
 | |||
|  | /**
 | |||
|  |  * @brief   PWM3 有效数据脉宽, 最大67108864 | |||
|  |  * | |||
|  |  * @param   d       - 有效数据脉宽 | |||
|  |  */ | |||
|  | #define TMR3_PWMActDataWidth(d)    (R32_TMR3_FIFO = d)
 | |||
|  | 
 | |||
|  | /**
 | |||
|  |  * @brief   CAP3 捕捉电平超时配置, 最大33554432 | |||
|  |  * | |||
|  |  * @param   cyc     - 捕捉电平超时 | |||
|  |  */ | |||
|  | #define TMR3_CAPTimeoutCfg(cyc)    (R32_TMR3_CNT_END = cyc)
 | |||
|  | 
 | |||
|  | /**
 | |||
|  |  * @brief   外部信号捕捉功能初始化 | |||
|  |  * | |||
|  |  * @param   cap     - select capture mode, refer to CapModeTypeDef | |||
|  |  */ | |||
|  | void TMR3_CapInit(CapModeTypeDef cap); | |||
|  | 
 | |||
|  | /**
 | |||
|  |  * @brief   获取脉冲数据 | |||
|  |  * | |||
|  |  * @return  脉冲数据 | |||
|  |  */ | |||
|  | #define TMR3_CAPGetData()        R32_TMR3_FIFO
 | |||
|  | 
 | |||
|  | /**
 | |||
|  |  * @brief   获取当前已捕获数据个数 | |||
|  |  * | |||
|  |  * @return  当前已捕获数据个数 | |||
|  |  */ | |||
|  | #define TMR3_CAPDataCounter()    R8_TMR3_FIFO_COUNT
 | |||
|  | 
 | |||
|  | /**
 | |||
|  |  * @brief   关闭 TMR3 PWM输出 | |||
|  |  */ | |||
|  | #define TMR3_PWMDisable()           (R8_TMR3_CTRL_MOD &= ~RB_TMR_OUT_EN)
 | |||
|  | 
 | |||
|  | /**
 | |||
|  |  * @brief   开启 TMR3 PWM输出 | |||
|  |  */ | |||
|  | #define TMR3_PWMEnable()           (R8_TMR3_CTRL_MOD |= RB_TMR_OUT_EN)
 | |||
|  | 
 | |||
|  | /**
 | |||
|  |  * @brief   关闭 TMR3 | |||
|  |  */ | |||
|  | #define TMR3_Disable()           (R8_TMR3_CTRL_MOD &= ~RB_TMR_COUNT_EN)
 | |||
|  | 
 | |||
|  | /**
 | |||
|  |  * @brief   开启 TMR3 | |||
|  |  */ | |||
|  | #define TMR3_Enable()            (R8_TMR3_CTRL_MOD |= RB_TMR_COUNT_EN)
 | |||
|  | 
 | |||
|  | /**
 | |||
|  |  * @brief   中断配置 | |||
|  |  * | |||
|  |  * @param   s       - 使能/关闭 | |||
|  |  * @param   f       - refer to TMR interrupt bit define | |||
|  |  */ | |||
|  | #define TMR3_ITCfg(s, f)         ((s) ? (R8_TMR3_INTER_EN |= f) : (R8_TMR3_INTER_EN &= ~f))
 | |||
|  | 
 | |||
|  | /**
 | |||
|  |  * @brief   清除中断标志 | |||
|  |  * | |||
|  |  * @param   f       - refer to TMR interrupt bit define | |||
|  |  */ | |||
|  | #define TMR3_ClearITFlag(f)      (R8_TMR3_INT_FLAG = f)
 | |||
|  | 
 | |||
|  | /**
 | |||
|  |  * @brief   查询中断标志状态 | |||
|  |  * | |||
|  |  * @param   f       - refer to TMR interrupt bit define | |||
|  |  */ | |||
|  | #define TMR3_GetITFlag(f)        (R8_TMR3_INT_FLAG & f)
 | |||
|  | 
 | |||
|  | #ifdef __cplusplus
 | |||
|  | } | |||
|  | #endif
 | |||
|  | 
 | |||
|  | #endif // __CH59x_TIMER_H__
 |