/** ########################################################################## ** Filename : ** Project : ** Module : ** Processor : ** Version : 1.0 ** Compiler : ** Date/Time : ** Abstract : ** Contents : ** Note : ** ** (c) Copyright dmdz Co.,Ltd ** -------------------------------------------------------------------------- ** R E V I S I O N H I S T O R Y ** -------------------------------------------------------------------------- ** Date Ver Author Description ** -20230602- --V1.0-- --mingyea--- --修改-- ** #########################################################################*/ /*--------------------------------------------------------------------------- - I N C L U D E F I L E S ----------------------------------------------------------------------------*/ #include "common_cfg.h" #include "cpu.h" #include "tim.h" #include "gpio.h" #include "low_power_app.h" #include "logic_timer.h" #include "random_pseudo.h" #include "key_app.h" #include "pwm_manage.h" #include "SimpleOs_Time.h" /*--------------------------------------------------------------------------- - D E F I N E S / M A C R O S ----------------------------------------------------------------------------*/ /*--------------------------------------------------------------------------- - T Y P E D E F I N I T I O N S ----------------------------------------------------------------------------*/ typedef struct { u8 state; #ifdef TIM_CFG_DEBUG_DISP_EN u16 count[8]; #endif }tim_cfg_s; /*--------------------------------------------------------------------------- - S T A T I C V A R I A B L E S ----------------------------------------------------------------------------*/ tim_cfg_s g_tim_cfg = {0u}; /*--------------------------------------------------------------------------- * G L O B A L V A R I A B L E S ----------------------------------------------------------------------------*/ /*--------------------------------------------------------------------------- - C O N S T A N T S ----------------------------------------------------------------------------*/ #ifdef FL_ATIM_ENABLE const FL_ATIM_InitTypeDef g_atimer0_Config0 = { FL_CMU_ATIM_CLK_SOURCE_APBCLK, /* 时钟源选择APB2 */ 48u-1u, /* 分频系数8000 */ // 479 48MHZ/480= FL_ATIM_COUNTER_DIR_UP, /* 向上计数 */ FL_ATIM_PWM_FREQ-1u, /* 自动重装载值1000 */ // 1 / (48MHZ/480) * 100 = 0.001 s FL_ENABLE, /* 自动重装载禁止preload */ FL_ATIM_CLK_DIVISION_DIV1, /* 死区和滤波设置 */ /*! 定时器分频系数与数字滤波器所使用的采样时钟分频比 */ 0u, /* 重复计数 */ }; const FL_ATIM_OC_InitTypeDef g_atmer0_ch1_InitStructer = { FL_ATIM_OC_MODE_PWM1, /*! OCMode 比较输出模式 */ FL_ENABLE, /*! OCState 正向比较通道输出使能 */ FL_DISABLE, /*! OCNState 比较互补通道输出使能 */ FL_ATIM_OC_POLARITY_NORMAL, /*! OCPolarity 比较输出极性 */ FL_ATIM_OC_POLARITY_NORMAL, /*! OCNPolarity 比较互补输出极性 */ FL_DISABLE, /*! OCFastMode 比较输出通道快速模式使能 */ FL_DISABLE, /*! OCPreload 输出比较预装载 */ FL_ATIM_PWM_DUTY_INIT, /*! compareValue 通道比较值 */ FL_ATIM_OC_IDLE_STATE_HIGH, /*! OCIdleState 输出空闲状态电平 */ FL_DISABLE, /*! OCETRFStatus ETR清0使能 */ FL_ATIM_OCN_IDLE_STATE_HIGH, /*! OCNIdleState 互补输出空闲状态电平 */ }; const FL_ATIM_OC_InitTypeDef g_atmer0_ch2_InitStructer = { FL_ATIM_OC_MODE_PWM1, /*! OCMode 比较输出模式 */ FL_ENABLE, /*! OCState 正向比较通道输出使能 */ FL_DISABLE, /*! OCNState 比较互补通道输出使能 */ FL_ATIM_OC_POLARITY_NORMAL, /*! OCPolarity 比较输出极性 */ FL_ATIM_OC_POLARITY_NORMAL, /*! OCNPolarity 比较互补输出极性 */ FL_DISABLE, /*! OCFastMode 比较输出通道快速模式使能 */ FL_DISABLE, /*! OCPreload 输出比较预装载 */ FL_ATIM_PWM_DUTY_INIT, /*! compareValue 通道比较值 */ FL_ATIM_OC_IDLE_STATE_HIGH, /*! OCIdleState 输出空闲状态电平 */ FL_DISABLE, /*! OCETRFStatus ETR清0使能 */ FL_ATIM_OCN_IDLE_STATE_HIGH, /*! OCNIdleState 互补输出空闲状态电平 */ }; const FL_ATIM_OC_InitTypeDef g_atmer0_ch3_InitStructer = { FL_ATIM_OC_MODE_PWM1, /*! OCMode 比较输出模式 */ FL_ENABLE, /*! OCState 正向比较通道输出使能 */ FL_DISABLE, /*! OCNState 比较互补通道输出使能 */ FL_ATIM_OC_POLARITY_NORMAL, /*! OCPolarity 比较输出极性 */ FL_ATIM_OC_POLARITY_NORMAL, /*! OCNPolarity 比较互补输出极性 */ FL_DISABLE, /*! OCFastMode 比较输出通道快速模式使能 */ FL_DISABLE, /*! OCPreload 输出比较预装载 */ FL_ATIM_PWM_DUTY_INIT, /*! compareValue 通道比较值 */ FL_ATIM_OC_IDLE_STATE_HIGH, /*! OCIdleState 输出空闲状态电平 */ FL_DISABLE, /*! OCETRFStatus ETR清0使能 */ FL_ATIM_OCN_IDLE_STATE_HIGH, /*! OCNIdleState 互补输出空闲状态电平 */ }; const FL_ATIM_OC_InitTypeDef g_atmer0_ch4_InitStructer = { FL_ATIM_OC_MODE_PWM1, /*! OCMode 比较输出模式 */ FL_ENABLE, /*! OCState 正向比较通道输出使能 */ FL_DISABLE, /*! OCNState 比较互补通道输出使能 */ FL_ATIM_OC_POLARITY_NORMAL, /*! OCPolarity 比较输出极性 */ FL_ATIM_OC_POLARITY_NORMAL, /*! OCNPolarity 比较互补输出极性 */ FL_DISABLE, /*! OCFastMode 比较输出通道快速模式使能 */ FL_DISABLE, /*! OCPreload 输出比较预装载 */ FL_ATIM_PWM_DUTY_INIT, /*! compareValue 通道比较值 */ FL_ATIM_OC_IDLE_STATE_HIGH, /*! OCIdleState 输出空闲状态电平 */ FL_DISABLE, /*! OCETRFStatus ETR清0使能 */ FL_ATIM_OCN_IDLE_STATE_HIGH, /*! OCNIdleState 互补输出空闲状态电平 */ }; const FL_ATIM_BDTR_InitTypeDef g_atimer0_bdtr_config= { FL_ATIM_OSSR_DISABLE, /*! OSSRState 运行状态下的输出关闭状态 */ FL_ATIM_OSSI_DISABLE, /*! OSSIState 空闲状态下的输出关闭状态 */ FL_ATIM_LOCK_LEVEL_OFF, /*! lockLevel 寄存器写保护等级 */ 100u, /*! deadTime 死区时间 */ FL_DISABLE, /*! breakState 刹车使能 */ FL_ATIM_BREAK_FILTER_DIV1, /*! breakFilter 刹车信号滤波 */ FL_ATIM_BREAK_POLARITY_HIGH, /*! breakPolarity 刹车信号极性 */ FL_DISABLE, /*! automaticOutput 刹车后计数器重装后自动输出使能*/ FL_ATIM_BREAK1_GATE_AUTO, /*! gatedBrakeSignal_1 刹车信号1门控 */ FL_ATIM_BREAK2_GATE_AUTO, /*! gatedBrakeSignal_2 刹车信号2门控 */ FL_ATIM_BREAK_COMBINATION_OR, /*! brakeSignalCombined 两路刹车信号控制逻辑 */ }; #endif #ifdef FL_BSTIM16_ENABLE const FL_BSTIM16_InitTypeDef g_TimerBase_InitStruct = { 479u, 99u, // 1 / (48MHZ/480M) * 100 = 0.001 s FL_ENABLE, FL_CMU_BSTIM16_CLK_SOURCE_APBCLK, }; #endif #ifdef FL_GPTIM_ENABLE /** * */ const FL_GPTIM_InitTypeDef g_gptim_init_cfg = { 4800u - 1u, /* 分频系数48000 */ FL_GPTIM_COUNTER_DIR_UP, /* 向上计数 */ FL_GPTIM_PWM_FREQ - 1u, /* 自动重装载值1000 */ FL_ENABLE, /* 预装载preload使能 */ FL_GPTIM_CLK_DIVISION_DIV1, /* 死区和滤波分频 */ }; const FL_GPTIM_OC_InitTypeDef g_gptim_ch1_cfg = { FL_GPTIM_OC_MODE_PWM1, /* 输出比较模式PWM1 */ FL_DISABLE, /* 关闭快速使能 */ FL_DISABLE, /* OC preload 无效 */ FL_GPTIM_PWM_DUTY_VALID, /* 比较值500 */ FL_GPTIM_OC_POLARITY_NORMAL, /* OC正常输出 */ FL_DISABLE, /* OC1REF不受ETR影响 */ }; const FL_GPTIM_OC_InitTypeDef g_gptim_ch2_cfg = { FL_GPTIM_OC_MODE_PWM1, /* 输出比较模式PWM1 */ FL_DISABLE, /* 关闭快速使能 */ FL_DISABLE, /* OC preload 无效 */ FL_GPTIM_PWM_DUTY_VALID, /* 比较值500 */ FL_GPTIM_OC_POLARITY_NORMAL, /* OC正常输出 */ FL_DISABLE, /* OC1REF不受ETR影响 */ }; const FL_GPTIM_OC_InitTypeDef g_gptim_ch3_cfg = { FL_GPTIM_OC_MODE_PWM1, /* 输出比较模式PWM1 */ FL_DISABLE, /* 关闭快速使能 */ FL_DISABLE, /* OC preload 无效 */ FL_GPTIM_PWM_DUTY_VALID, /* 比较值500 */ FL_GPTIM_OC_POLARITY_NORMAL, /* OC正常输出 */ FL_DISABLE, /* OC1REF不受ETR影响 */ }; const FL_GPTIM_OC_InitTypeDef g_gptim_ch4_cfg = { FL_GPTIM_OC_MODE_PWM1, /* 输出比较模式PWM1 */ FL_DISABLE, /* 关闭快速使能 */ FL_DISABLE, /* OC preload 无效 */ FL_GPTIM_PWM_DUTY_VALID, /* 比较值500 */ FL_GPTIM_OC_POLARITY_NORMAL, /* OC正常输出 */ FL_DISABLE, /* OC1REF不受ETR影响 */ }; #endif #ifdef FL_GPTIM1_ENABLE const FL_GPTIM_InitTypeDef g_gptim1_init_cfg = { 48u - 1u, /* 分频系数48000 */ FL_GPTIM_COUNTER_DIR_UP, /* 向上计数 */ FL_GPTIM1_PWM_FREQ - 1u, /* 自动重装载值1000 */ FL_ENABLE, /* 预装载preload使能 */ FL_GPTIM_CLK_DIVISION_DIV1, /* 死区和滤波分频 */ }; const FL_GPTIM_OC_InitTypeDef g_gptim1_ch1_cfg = { FL_GPTIM_OC_MODE_PWM1, /* 输出比较模式PWM1 */ FL_DISABLE, /* 关闭快速使能 */ FL_DISABLE, /* OC preload 无效 */ FL_GPTIM1_PWM_DUTY_VALID, /* 比较值500 */ FL_GPTIM_OC_POLARITY_NORMAL, /* OC正常输出 */ FL_DISABLE, /* OC1REF不受ETR影响 */ }; const FL_GPTIM_OC_InitTypeDef g_gptim1_ch2_cfg = { FL_GPTIM_OC_MODE_PWM1, /* 输出比较模式PWM1 */ FL_DISABLE, /* 关闭快速使能 */ FL_DISABLE, /* OC preload 无效 */ FL_GPTIM1_PWM_DUTY_VALID, /* 比较值500 */ FL_GPTIM_OC_POLARITY_NORMAL, /* OC正常输出 */ FL_DISABLE, /* OC1REF不受ETR影响 */ }; const FL_GPTIM_OC_InitTypeDef g_gptim1_ch3_cfg = { FL_GPTIM_OC_MODE_PWM1, /* 输出比较模式PWM1 */ FL_DISABLE, /* 关闭快速使能 */ FL_DISABLE, /* OC preload 无效 */ FL_GPTIM1_PWM_DUTY_VALID, /* 比较值500 */ FL_GPTIM_OC_POLARITY_NORMAL, /* OC正常输出 */ FL_DISABLE, /* OC1REF不受ETR影响 */ }; const FL_GPTIM_OC_InitTypeDef g_gptim1_ch4_cfg = { FL_GPTIM_OC_MODE_PWM1, /* 输出比较模式PWM1 */ FL_DISABLE, /* 关闭快速使能 */ FL_DISABLE, /* OC preload 无效 */ FL_GPTIM1_PWM_DUTY_VALID, /* 比较值500 */ FL_GPTIM_OC_POLARITY_NORMAL, /* OC正常输出 */ FL_DISABLE, /* OC1REF不受ETR影响 */ }; #endif #ifdef FL_GPTIM2_ENABLE const FL_GPTIM_InitTypeDef g_gptim2_init_cfg = { 48u - 1u, /* 分频系数48000 */ FL_GPTIM_COUNTER_DIR_UP, /* 向上计数 */ FL_GPTIM2_PWM_FREQ - 1u, /* 自动重装载值1000 */ FL_ENABLE, /* 预装载preload使能 */ FL_GPTIM_CLK_DIVISION_DIV1, /* 死区和滤波分频 */ }; const FL_GPTIM_OC_InitTypeDef g_gptim2_ch1_cfg = { FL_GPTIM_OC_MODE_PWM1, /* 输出比较模式PWM1 */ FL_DISABLE, /* 关闭快速使能 */ FL_DISABLE, /* OC preload 无效 */ FL_GPTIM2_PWM_DUTY_VALID, /* 比较值500 */ FL_GPTIM_OC_POLARITY_NORMAL, /* OC正常输出 */ FL_DISABLE, /* OC1REF不受ETR影响 */ }; const FL_GPTIM_OC_InitTypeDef g_gptim2_ch2_cfg = { FL_GPTIM_OC_MODE_PWM1, /* 输出比较模式PWM1 */ FL_DISABLE, /* 关闭快速使能 */ FL_DISABLE, /* OC preload 无效 */ FL_GPTIM2_PWM_DUTY_VALID, /* 比较值500 */ FL_GPTIM_OC_POLARITY_NORMAL, /* OC正常输出 */ FL_DISABLE, /* OC1REF不受ETR影响 */ }; const FL_GPTIM_OC_InitTypeDef g_gptim2_ch3_cfg = { FL_GPTIM_OC_MODE_PWM1, /* 输出比较模式PWM1 */ FL_DISABLE, /* 关闭快速使能 */ FL_DISABLE, /* OC preload 无效 */ FL_GPTIM2_PWM_DUTY_VALID, /* 比较值500 */ FL_GPTIM_OC_POLARITY_NORMAL, /* OC正常输出 */ FL_DISABLE, /* OC1REF不受ETR影响 */ }; const FL_GPTIM_OC_InitTypeDef g_gptim2_ch4_cfg = { FL_GPTIM_OC_MODE_PWM1, /* 输出比较模式PWM1 */ FL_DISABLE, /* 关闭快速使能 */ FL_DISABLE, /* OC preload 无效 */ FL_GPTIM2_PWM_DUTY_VALID, /* 比较值500 */ FL_GPTIM_OC_POLARITY_NORMAL, /* OC正常输出 */ FL_DISABLE, /* OC1REF不受ETR影响 */ }; #endif #ifdef FL_LPTIM16_ENABLE const FL_LPTIM16_InitTypeDef g_lptim16_cfg_tab = { FL_CMU_LPTIM16_CLK_SOURCE_RCLP, /* 内部时钟源 */ FL_LPTIM16_CLK_SOURCE_INTERNAL, /* 预分频器的时钟源 可选择内部时钟, 也可选择外部时钟 */ FL_LPTIM16_PSC_DIV32, /* 预分频系数 */ 200 - 1, /* 重装值 */ //200ms 做为间隙唤醒 FL_LPTIM16_OPERATION_MODE_NORMAL, /* 定时器工作模式选择 */ FL_LPTIM16_ENCODER_MODE_DISABLE, /* 定时器编码器模式 */ FL_LPTIM16_ONE_PULSE_MODE_CONTINUOUS, /* 单次计数使能 */ FL_LPTIM16_ETR_COUNT_EDGE_RISING, /* ETR异步计数边沿 */ FL_LPTIM16_ETR_TRIGGER_EDGE_RISING, /* ETR触发计数边沿 */ }; #endif #ifdef FL_LPTIM32_ENABLE const FL_LPTIM32_InitTypeDef g_lptim32_cfg_tab = { FL_CMU_LPTIM32_CLK_SOURCE_APBCLK, /* 内部时钟源 */ FL_LPTIM32_CLK_SOURCE_INTERNAL, /* 预分频器的时钟源 可选择内部时钟, 也可选择外部时钟 */ FL_LPTIM32_PSC_DIV16, /* 预分频系数 */ FL_LPT32_PWM_FREQ - 1, /* 重装值 */ //3000*200 - 1 是 200ms FL_LPTIM32_OPERATION_MODE_NORMAL, /* 定时器工作模式选择 */ FL_LPTIM32_ONE_PULSE_MODE_CONTINUOUS, /* 单次计数使能 */ FL_LPTIM32_ETR_COUNT_EDGE_RISING, /* ETR异步计数边沿 */ FL_LPTIM32_ETR_TRIGGER_EDGE_RISING, /* ETR触发计数边沿 */ }; // const FL_LPTIM32_OC_InitTypeDef g_lpt32_ch1_cfg = { 0u, /* 比较值 */ FL_LPTIM32_OC_POLARITY_INVERT, //输出极性 }; // const FL_LPTIM32_OC_InitTypeDef g_lpt32_ch2_cfg = { 0u, /* 比较值 */ FL_LPTIM32_OC_POLARITY_INVERT, //输出极性 }; // const FL_LPTIM32_OC_InitTypeDef g_lpt32_ch3_cfg = { 0u, /* 比较值 */ FL_LPTIM32_OC_POLARITY_INVERT, //输出极性 }; // const FL_LPTIM32_OC_InitTypeDef g_lpt32_ch4_cfg = { 0u, /* 比较值 */ FL_LPTIM32_OC_POLARITY_INVERT, //输出极性 }; #endif /*--------------------------------------------------------------------------- - F U N C T I O N P R O T O T Y P E ----------------------------------------------------------------------------*/ #ifdef FL_ATIM_ENABLE /*--------------------------------------------------------------------------- |Prototype : |Called by : |Preconditions : |Input parameters : |Output parameters : |Return value : |Description : ATIM中断函数 ----------------------------------------------------------------------------*/ void ATIM_IRQHandler() { if(FL_ATIM_IsEnabledIT_Update(ATIM) && FL_ATIM_IsActiveFlag_Update(ATIM)) { FL_ATIM_ClearFlag_Update(ATIM); /* 处理更新事件 */ //logic_time_tick_count(); #ifdef TIM_CFG_DEBUG_DISP_EN g_tim_cfg.count[0]++; if(g_tim_cfg.count[0]>=1000u) { g_tim_cfg.count[0]=0u; g_tim_cfg.count[1]++; } #endif //random_input_count(); //TEST1_TOGGLE(); } } #endif #ifdef FL_BSTIM16_ENABLE /*--------------------------------------------------------------------------- |Prototype : |Called by : |Preconditions : |Input parameters : |Output parameters : |Return value : |Description : BSTIM中断服务函数 ----------------------------------------------------------------------------*/ void BSTIM_IRQHandler(void) { if(FL_BSTIM16_IsEnabledIT_Update(BSTIM16) && FL_BSTIM16_IsActiveFlag_Update(BSTIM16)) { FL_BSTIM16_ClearFlag_Update(BSTIM16); logic_timer_tick_count(); SimpleOsTime_Callback(); /* 用户代码,处理更新事件 */ random_input_count(); //TEST1_TOGGLE(); } } #endif /*--------------------------------------------------------------------------- |Prototype : |Called by : |Preconditions : |Input parameters : |Output parameters : |Return value : |Description : LPTIM中断函数 ----------------------------------------------------------------------------*/ void LPTIM_IRQHandler(void) { #ifdef FL_LPTIM16_ENABLE /* 定时器溢出时翻转LED0 */ if(FL_LPTIM16_IsActiveFlag_Update(LPTIM16)) { FL_LPTIM16_ClearFlag_Update(LPTIM16); (void)lp_tim16_wakeup_flag_set(); /* LED0_TOG(); */ #ifdef TIM_CFG_DEBUG_DISP_EN g_tim_cfg.count[4]++; if(g_tim_cfg.count[4]>=5u) { g_tim_cfg.count[4]=0u; g_tim_cfg.count[5]++; } #endif } #endif #ifdef FL_LPTIM32_ENABLE /* 定时器溢出时翻转LED */ if(FL_LPTIM32_IsEnabledIT_Update(LPTIM32) && FL_LPTIM32_IsActiveFlag_Update(LPTIM32)) { /* LED0_TOG(); */ FL_LPTIM32_ClearFlag_Update(LPTIM32); #ifdef TIM_CFG_DEBUG_DISP_EN g_tim_cfg.count[6]++; if(g_tim_cfg.count[6]>=1000u) { g_tim_cfg.count[6]=0u; g_tim_cfg.count[7]++; } #endif } #endif }