#include "timer_pwm.h"

void timer3_pwm_init(u32 period)
{
    gpio_init_typedef gpio_init_structure;
    tmr_base_init_typedef tmr_base_init_struct;

    clock_gate1_cmd(CLOCK_GATE1_TMR3, ENABLE);

    gpio_init_structure.gpio_pin = GPIO_PIN_4;
    gpio_init_structure.gpio_dir = GPIO_DIR_OUTPUT;
    gpio_init_structure.gpio_fen = GPIO_FEN_PER;
    gpio_init_structure.gpio_mode = GPIO_MODE_DIGITAL;
    gpio_init_structure.gpio_drv = GPIO_DRV_8MA;
    gpio_init(GPIOE_REG, &gpio_init_structure);

    gpio_func_mapping(TMR3MAP_G4);      // pwm1 -> PE4

    tmr_base_init_struct.clock_source = TMR_INC_SOURCE;
    tmr_base_init_struct.increase_clock = TMR_COUNTER_RISING;
    tmr_base_init_struct.period = period;
    tmr_base_init_struct.pwm_mode = TMR_PWM_MODE_1;
    tmr_base_init(TMR3, &tmr_base_init_struct);

    tmr_cmd(TMR3, ENABLE);
}

void timer3_pwm_example(void)
{
    tmr_set_pwm1_duty(TMR3, 500);
}

void timer4_pwm_init(u32 period)
{
    gpio_init_typedef gpio_init_structure;
    tmr_base_init_typedef tmr_base_init_struct;

    clock_gate1_cmd(CLOCK_GATE1_TMR4, ENABLE);

    gpio_init_structure.gpio_pin = GPIO_PIN_5;
    gpio_init_structure.gpio_dir = GPIO_DIR_OUTPUT;
    gpio_init_structure.gpio_fen = GPIO_FEN_PER;
    gpio_init_structure.gpio_mode = GPIO_MODE_DIGITAL;
    gpio_init_structure.gpio_drv = GPIO_DRV_8MA;
    gpio_init(GPIOE_REG, &gpio_init_structure);

    gpio_func_mapping(TMR4MAP_G1);      // pwm0 -> PE5

    tmr_base_init_struct.clock_source = TMR_INC_SOURCE;
    tmr_base_init_struct.increase_clock = TMR_COUNTER_RISING;
    tmr_base_init_struct.period = period;
    tmr_base_init_struct.pwm_mode = TMR_PWM_MODE_0;
    tmr_base_init(TMR4, &tmr_base_init_struct);

    tmr_cmd(TMR4, ENABLE);
}

//改变频率
void timer4_period_example(unsigned short us)
{
    tmr_set_period(TMR4,us);
}

void timer4_pwm_example(void)
{
    tmr_set_pwm0_duty(TMR4, 500);
}

void timer5_pwm_init(u32 period)
{
    gpio_init_typedef gpio_init_structure;
    tmr_base_init_typedef tmr_base_init_struct;

    clock_gate1_cmd(CLOCK_GATE1_TMR5, ENABLE);

    gpio_init_structure.gpio_pin = GPIO_PIN_7;
    gpio_init_structure.gpio_dir = GPIO_DIR_OUTPUT;
    gpio_init_structure.gpio_fen = GPIO_FEN_PER;
    gpio_init_structure.gpio_mode = GPIO_MODE_DIGITAL;
    gpio_init_structure.gpio_drv = GPIO_DRV_8MA;
    gpio_init(GPIOA_REG, &gpio_init_structure);

    gpio_func_mapping(TMR5MAP_G1);      // pwm2 -> PA7

    tmr_base_init_struct.clock_source = TMR_INC_SOURCE;
    tmr_base_init_struct.increase_clock = TMR_COUNTER_RISING;
    tmr_base_init_struct.period = period;
    tmr_base_init_struct.pwm_mode = TMR_PWM_MODE_2;
    tmr_base_init(TMR5, &tmr_base_init_struct);

    tmr_cmd(TMR5, ENABLE);
}

void timer5_period_example(unsigned short us)
{
    tmr_set_period(TMR5,us);
}

void timer5_pwm_example(void)
{
    tmr_set_pwm2_duty(TMR5, 500);
}


