PWM模块的周期性中断参考代码
PWMX中断功能,在手册中有描述:

主要围绕R8_PWM_INT_CTRL寄存器来进行中断配置。
基于PWMX例程增加中断相关代码如下:
#include "CH58x_common.h" /********************************************************************* * @fn main * * @brief 主函数 * * @return none */ int main() { SetSysClock(CLK_SOURCE_PLL_60MHz); GPIOA_ModeCfg(GPIO_Pin_5, GPIO_ModeOut_PP_5mA); GPIOA_SetBits(GPIO_Pin_5); /* 配置GPIO */ GPIOA_ModeCfg(GPIO_Pin_12, GPIO_ModeOut_PP_5mA); // PA12 - PWM4 GPIOA_ModeCfg(GPIO_Pin_13, GPIO_ModeOut_PP_5mA); // PA13 - PWM5 GPIOB_ModeCfg(GPIO_Pin_0, GPIO_ModeOut_PP_5mA); // PB0 - PWM6 GPIOB_ModeCfg(GPIO_Pin_4, GPIO_ModeOut_PP_5mA); // PB4 - PWM7 GPIOB_ModeCfg(GPIO_Pin_6, GPIO_ModeOut_PP_5mA); // PB6 - PWM8 GPIOB_ModeCfg(GPIO_Pin_7, GPIO_ModeOut_PP_5mA); // PB7 - PWM9 GPIOB_ModeCfg(GPIO_Pin_14, GPIO_ModeOut_PP_5mA); // PB14 - PWM10 // GPIOB_ModeCfg(GPIO_Pin_23, GPIO_ModeOut_PP_5mA); // PB23 - PWM11 此脚复用为外部复位脚,需要关闭此功能才能开启PWM功能 PWMX_CLKCfg(4); // cycle = 4/Fsys PWMX_CycleCfg(PWMX_Cycle_64); // 周期 = 64*cycle PWMX_ACTOUT(CH_PWM4, 64 / 4, Low_Level, ENABLE); // 25% 占空比 PWMX_ACTOUT(CH_PWM5, 64 / 4, Low_Level, ENABLE); // 25% 占空比 PWMX_ACTOUT(CH_PWM6, 64 / 4, Low_Level, ENABLE); // 25% 占空比 PWMX_ACTOUT(CH_PWM7, 64 / 4, Low_Level, ENABLE); // 25% 占空比 PWMX_ACTOUT(CH_PWM8, 64 / 4, Low_Level, ENABLE); // 25% 占空比 PWMX_ACTOUT(CH_PWM9, 64 / 4, Low_Level, ENABLE); // 25% 占空比 PWMX_ACTOUT(CH_PWM10, 64 / 4, Low_Level, ENABLE); // 25% 占空比 //使能中断 R8_PWM_INT_CTRL |= RB_PWM_IE_CYC; PFIC_EnableIRQ(PWMX_SPI1_IRQn); while(1); } __INTERRUPT __HIGH_CODE void PWMX_IRQHandler(void) { R8_PWM_INT_CTRL |= RB_PWM_IF_CYC; //清中断标志 GPIOA_InverseBits(GPIO_Pin_5); }
波形:

浙公网安备 33010602011771号