diff --git a/Inc/PwmFlagchip.h b/Inc/PwmFlagchip.h index d395c36..4d4b17f 100644 --- a/Inc/PwmFlagchip.h +++ b/Inc/PwmFlagchip.h @@ -20,15 +20,26 @@ typedef struct { } tPwmFlagchip; +tPwmFlagchip PWM_Initial( + uint32_t PeriodTime, + uint32_t ActiveTime, + uint8_t TPU_PWM_CHANNEL, + uint8 TPU0_CH_PRIORITY, + TPU_EventCallbackType Bsp_Tpu_PwmCallback, + TPU_TCR1OverflowCallbackType Bsp_Tpu_OverflowCallBack); + tPwmIO vPwmGetIo(tPwmFlagchip *env); // Частота шины -#define BUS_CLK 120.0f -// Делитель выходной частоты -#define SCG_CLK_DIV 4.0f -// Период такта -// (1 / (BUS_CLK / SCG_CLK_DIV)) +#define BUS_CLK 120000000U -#define NS_TO_TIME(NS) (NS / (1 / (BUS_CLK / SCG_CLK_DIV))) +// Делитель выходной частоты +#define SCG_CLK_DIV 4U + +#define TPU_FREQ (BUS_CLK / SCG_CLK_DIV) + +#define PWM_FREQ 25000 // 25 kHz + +#define PERIOD_TICKS (TPU_FREQ / PWM_FREQ) #endif //PWM_FLAGCHIP_H diff --git a/Src/PwmFlagchip.c b/Src/PwmFlagchip.c index 6c0e86d..1b06929 100644 --- a/Src/PwmFlagchip.c +++ b/Src/PwmFlagchip.c @@ -74,10 +74,21 @@ static void vPwmRun(tPwmFlagchip *env) { TPU_StartChannel(); } +static void setActivePercent(tPwmFlagchip *env, uint8_t percent) { + + if (percent > 100) + percent = 100; + + // Расчет времени активности в тактах + env->etpu_pwmconfig_tbl.u32ActiveTime = PERIOD_TICKS * percent / 100; +} + + tPwmIO vPwmGetIo(tPwmFlagchip *env) { tPwmIO io = { .env = env, .run = (PwmIOTransaction) vPwmRun, + .setActivePercent = (PwmIOTransactionSetActivePercent) setActivePercent }; return io; } \ No newline at end of file