diff --git a/Inc/PwmFlagchip.h b/Inc/PwmFlagchip.h index 8df705e..96f51c8 100644 --- a/Inc/PwmFlagchip.h +++ b/Inc/PwmFlagchip.h @@ -17,6 +17,8 @@ typedef struct { uint8_t TPU_PWM_CHANNEL; + osMessageQueueId_t q_u32ActiveTime; + } tPwmFlagchip; diff --git a/Src/PwmFlagchip.c b/Src/PwmFlagchip.c index 2e00a53..a00b595 100644 --- a/Src/PwmFlagchip.c +++ b/Src/PwmFlagchip.c @@ -6,6 +6,15 @@ void Get_Set_Tpu_PwmCallback(tPwmFlagchip *env) { + + uint32_t data; + + osStatus_t cPeriodActiveTime = osMessageQueueGet(env->q_u32ActiveTime, &data, 0, 0); + + if (cPeriodActiveTime == osOK) { + env->etpu_pwmconfig_tbl.u32ActiveTime = data; + } + TPU_PwmServiceReq(env->TPU_PWM_CHANNEL, env->etpu_pwmconfig_tbl.u32ActiveTime, env->etpu_pwmconfig_tbl.u32PeriodTime); } @@ -20,6 +29,7 @@ void PWM_Initial( TPU_EventCallbackType Bsp_Tpu_PwmCallback, TPU_TCR1OverflowCallbackType Bsp_Tpu_OverflowCallBack) { + env->q_u32ActiveTime = osMessageQueueNew(1, sizeof(uint32_t), NULL); env->etpu_pwmconfig_tbl.eTBS1 = TPUE_EQUAL_ONLY_CAPBASE_TCR1_MATCHBASE_TCR1; env->etpu_pwmconfig_tbl.eTBS2 = TPUE_EQUAL_ONLY_CAPBASE_TCR1_MATCHBASE_TCR1; @@ -78,7 +88,9 @@ static void setActivePercent(tPwmFlagchip *env, uint8_t percent) { percent = 5; // Расчет времени активности в тактах - env->etpu_pwmconfig_tbl.u32ActiveTime = PERIOD_TICKS * percent / 100; + uint32_t data = PERIOD_TICKS * percent / 100; + osMessageQueuePut(env->q_u32ActiveTime, &data, 0, 0); + }