From 7145e0c1dcb5ac5cb8e4206ed219ebd7b654c350 Mon Sep 17 00:00:00 2001 From: cfif Date: Thu, 15 Jan 2026 12:08:29 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9E=D0=B1=D0=BD=D0=BE=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Inc/PwmFlagchip.h | 3 ++- Src/PwmFlagchip.c | 22 ++++++++++++++-------- 2 files changed, 16 insertions(+), 9 deletions(-) diff --git a/Inc/PwmFlagchip.h b/Inc/PwmFlagchip.h index 6166204..394da97 100644 --- a/Inc/PwmFlagchip.h +++ b/Inc/PwmFlagchip.h @@ -22,10 +22,11 @@ typedef struct { void PWM_Initial( tPwmFlagchip *env, + bool isDeInit, uint32_t PeriodTime, uint32_t ActiveTime, uint8_t TPU_PWM_CHANNEL, - uint8 TPU0_CH_PRIORITY, + uint8 TPU_PRIORITY, TPU_EventCallbackType Bsp_Tpu_PwmCallback, TPU_TCR1OverflowCallbackType Bsp_Tpu_OverflowCallBack); diff --git a/Src/PwmFlagchip.c b/Src/PwmFlagchip.c index 5dc957b..2e00a53 100644 --- a/Src/PwmFlagchip.c +++ b/Src/PwmFlagchip.c @@ -12,10 +12,11 @@ void Get_Set_Tpu_PwmCallback(tPwmFlagchip *env) { void PWM_Initial( tPwmFlagchip *env, + bool isDeInit, uint32_t PeriodTime, uint32_t ActiveTime, uint8_t TPU_PWM_CHANNEL, - uint8 TPU0_CH_PRIORITY, + uint8 TPU_PRIORITY, TPU_EventCallbackType Bsp_Tpu_PwmCallback, TPU_TCR1OverflowCallbackType Bsp_Tpu_OverflowCallBack) { @@ -41,23 +42,25 @@ void PWM_Initial( env->TPU_PWM_CHANNEL = TPU_PWM_CHANNEL; - TPU_DeInit(); + if (isDeInit) { + TPU_DeInit(); + } TPU_Init(); TPU_PwmModeInit(TPU_PWM_CHANNEL, &env->etpu_pwmconfig_tbl); TPU_InitChannelInterrupt(TPU_PWM_CHANNEL, &env->etpu_Int_config_tbl); if (TPU_PWM_CHANNEL <= 7) { + NVIC_SetPriority(TPU0_CH0_7_IRQn, TPU_PRIORITY); NVIC_EnableIRQ(TPU0_CH0_7_IRQn); - NVIC_SetPriority(TPU0_CH0_7_IRQn, TPU0_CH_PRIORITY); } else if (TPU_PWM_CHANNEL <= 15) { + NVIC_SetPriority(TPU0_CH8_15_IRQn, TPU_PRIORITY); NVIC_EnableIRQ(TPU0_CH8_15_IRQn); - NVIC_SetPriority(TPU0_CH8_15_IRQn, TPU0_CH_PRIORITY); } else if (TPU_PWM_CHANNEL <= 23) { + NVIC_SetPriority(TPU0_CH16_23_IRQn, TPU_PRIORITY); NVIC_EnableIRQ(TPU0_CH16_23_IRQn); - NVIC_SetPriority(TPU0_CH16_23_IRQn, TPU0_CH_PRIORITY); } else if (TPU_PWM_CHANNEL <= 31) { + NVIC_SetPriority(TPU0_CH24_31_IRQn, TPU_PRIORITY); NVIC_EnableIRQ(TPU0_CH24_31_IRQn); - NVIC_SetPriority(TPU0_CH24_31_IRQn, TPU0_CH_PRIORITY); } } @@ -68,8 +71,11 @@ static void vPwmRun(tPwmFlagchip *env) { static void setActivePercent(tPwmFlagchip *env, uint8_t percent) { - if (percent > 100) - percent = 100; + if (percent >= 100) + percent = 85; + + if (percent == 0) + percent = 5; // Расчет времени активности в тактах env->etpu_pwmconfig_tbl.u32ActiveTime = PERIOD_TICKS * percent / 100;