PWM 使用指南 ============ 概述 ----------------- BK7238有六个32位PWM通道,标记为PWM0~5(支持定时器模式)。每个PWM通道有三个模式:定时器模式、PWM模式和捕获模式。 每个通道的每个模式都用32位计数进行多路复用。 PWM模块的主要功能如下所示: - 计数器在一个方向上增加,并在溢出到最大值时自动从0开始继续计数 - 每个通道可以单独启用,每个通道的模式可以单独配置。 - 在捕获模式下,能够在两个上升沿、两个下降沿或双沿之间连续计数 - 每个PWM通道的可配置PWM周期和占空比 - 可以在定时器模式下读取实时计数值。 PWM模式 ----------------- :: //开启 PWM channel=1; //pwm1 frequency=(260000/1000)*2000; //2 KHz duty_cycle1= frequency/4; //高电平占空比 1/4 duty_cycle12= 0; duty_cycle13= 0; bk_pwm_initialize(channel, (260000/1000)*frequency, duty_cycle1,duty_cycle12,duty_cycle13); bk_pwm_start(channel1); //更新pwm 参数 frequency=(260000/1000)*1000; //1 KHz duty_cycle1= frequency/2; //高电平占空比 1/2 bk_pwm_update_param(channel, frequency, duty_cycle1); 捕获模式 ----------------- :: #define PWM_CAP_POS_MODE (0x04) // Capture (pos -> pos) #define PWM_CAP_NEG_MODE (0x05) // Capture (neg -> neg) #define PWM_CAP_EDGE_MODE (0x06) // Capture (edge -> edge) //开启 PWM 捕获 channel=1; cap_mode=PWM_CAP_POS_MODE; bk_pwm_capture_initialize(channel, cap_mode); bk_pwm_start(channel); //读取捕获值 cap_value = bk_pwm_get_capvalue(channel1); bk_printf("pwm : %d cap_value=%x \r\n", channel1, cap_value);