#include "pat_pwm.h" static pwm_record pwm[3]; void pwm_set_duty(uint8 n, uint8 duty) { os_printf("pwm_set (%d): %d\r\n",n,duty); pwm[n].duty = duty; } void hw_timer() { uint8 i; for (i=0;i<3;i++) { if (pwm[i].duty == 255) { // high gpio_output_set(pwm[i].pin, 0 , pwm[i].pin, 0); } else if (pwm[i].duty == 0) { // low gpio_output_set(0, pwm[i].pin, pwm[i].pin, 0); } else { pwm[i].count++; if (pwm[i].count == 255) { // high gpio_output_set(pwm[i].pin, 0 , pwm[i].pin, 0); } else if (pwm[i].count == pwm[i].duty) { // low gpio_output_set(0, pwm[i].pin, pwm[i].pin, 0); } } } } void init_pwm() { PIN_FUNC_SELECT(PWM1_PERI, PWM1_FUNC); PIN_FUNC_SELECT(PWM2_PERI, PWM2_FUNC); PIN_FUNC_SELECT(PWM3_PERI, PWM3_FUNC); uint8 i; for (i=0;i<3;i++) { pwm[i].count = 0; pwm[i].duty = 0; } pwm[0].pin = PWM1_PIN; pwm[1].pin = PWM2_PIN; pwm[2].pin = PWM3_PIN; os_printf("init pwm\r\n"); hw_timer_init(0,1); hw_timer_set_func(hw_timer); hw_timer_arm(50); os_printf("pwm is initialized\r\n"); }