#include "timer_pwm.h"

AT(.com_text.isr)
void timer5_isq(void)
{
    if (tmr_get_flag(TMR5, TMR_FLAG_UPDATE2) != RESET) {
        tmr_clear_flag(TMR5, TMR_FLAG_UPDATE2);

        clock_gate1_cmd(CLOCK_GATE1_TMR5, DISABLE);
        tmr_cmd(TMR5, DISABLE);
    }
}

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_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(GPIOF_REG, &gpio_init_structure);

    gpio_func_mapping(TMR5MAP_G2);      // pwm2 -> PF5

    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(TMR5, &tmr_base_init_struct);

    tmr_pic_config(TMR5, timer5_isq, 0, TMR_IT_UPDATE2, ENABLE);//定时器5中断
    tmr_cmd(TMR5, ENABLE);
}

void gpio_input_key_example(void)
{
    if (gpio_read_bit(GPIOB_REG, GPIO_PIN_5) == RESET) {
        printf("key is up\n");
        clock_gate1_cmd(CLOCK_GATE1_TMR5, ENABLE);
        tmr_cmd(TMR5, ENABLE);

        tmr_set_period(TMR5,1000);      //设置周期
        tmr_set_pwm1_duty(TMR5, 300);   //设置低电平的宽度
    }
    delay_ms(100);
}

