Example #1
0
/******************************************************************************
 * FunctionName : pwm_period_timer
 * Description  : pwm period timer function, output high level,
 *                start each channel's high level timer
 * Parameters   : NONE
 * Returns      : NONE
*******************************************************************************/
LOCAL void ICACHE_RAM_ATTR
pwm_tim1_intr_handler(void)
{
    uint8 local_toggle = pwm_toggle;                        // pwm_toggle may change outside
    RTC_CLR_REG_MASK(FRC1_INT_ADDRESS, FRC1_INT_CLR_MASK);

    if (pwm_current_channel >= (*pwm_channel - 1)) {        // *pwm_channel may change outside
        pwm_single = pwm_single_toggle[local_toggle];
        pwm_channel = &pwm_channel_toggle[local_toggle];

        gpio_output_set(pwm_single[*pwm_channel - 1].gpio_set,
                        pwm_single[*pwm_channel - 1].gpio_clear,
                        pwm_gpio,
                        0);

        pwm_current_channel = 0;

        if (*pwm_channel != 1) {
            RTC_REG_WRITE(FRC1_LOAD_ADDRESS, pwm_single[pwm_current_channel].h_time);
        } else {
            pwm_timer_down = 1;
        }
    } else {
        gpio_output_set(pwm_single[pwm_current_channel].gpio_set,
                        pwm_single[pwm_current_channel].gpio_clear,
                        pwm_gpio, 0);

        pwm_current_channel++;
        RTC_REG_WRITE(FRC1_LOAD_ADDRESS, pwm_single[pwm_current_channel].h_time);
    }
}
Example #2
0
/******************************************************************************
 * FunctionName : pwm_period_timer
 * Description  : pwm period timer function, output high level,
 *                start each channel's high level timer
 * Parameters   : NONE
 * Returns      : NONE
*******************************************************************************/
LOCAL void
pwm_tim1_intr_handler(void)
{
    RTC_CLR_REG_MASK(FRC1_INT_ADDRESS, FRC1_INT_CLR_MASK);

    if (pwm_current_channel == (*pwm_channel - 1)) {
        pwm_single = pwm_single_toggle[pwm_toggle];
        pwm_channel = &pwm_channel_toggle[pwm_toggle];

        gpio_output_set(pwm_single[*pwm_channel - 1].gpio_set,
                        pwm_single[*pwm_channel - 1].gpio_clear,
                        pwm_gpio,
                        0);

        pwm_current_channel = 0;

        if (*pwm_channel != 1) {
            RTC_REG_WRITE(FRC1_LOAD_ADDRESS, pwm_single[pwm_current_channel].h_time);
        } else {
            pwm_timer_down = 1;
        }
    } else {
        gpio_output_set(pwm_single[pwm_current_channel].gpio_set,
                        pwm_single[pwm_current_channel].gpio_clear,
                        pwm_gpio, 0);

        pwm_current_channel++;
        RTC_REG_WRITE(FRC1_LOAD_ADDRESS, pwm_single[pwm_current_channel].h_time);
    }
}
Example #3
0
/******************************************************************************
 * FunctionName : pwm_init
 * Description  : pwm gpio, params and timer initialization
 * Parameters   : uint16 freq : pwm freq param
 *                uint8 *duty : each channel's duty
 * Returns      : NONE
*******************************************************************************/
void ICACHE_FLASH_ATTR
pwm_init(uint16 freq, uint8 *duty)
{
    uint8 i;

    ETS_FRC_TIMER1_INTR_ATTACH(pwm_tim1_intr_handler, NULL);
    TM1_EDGE_INT_ENABLE();
    ETS_FRC1_INTR_ENABLE();

    RTC_CLR_REG_MASK(FRC1_INT_ADDRESS, FRC1_INT_CLR_MASK);
    RTC_REG_WRITE(FRC1_CTRL_ADDRESS,  //FRC2_AUTO_RELOAD|
                  DIVDED_BY_16
                  | FRC1_ENABLE_TIMER
                  | TM_EDGE_INT);
    RTC_REG_WRITE(FRC1_LOAD_ADDRESS, 0);

    PIN_FUNC_SELECT(PWM_0_OUT_IO_MUX, PWM_0_OUT_IO_FUNC);
    PIN_FUNC_SELECT(PWM_1_OUT_IO_MUX, PWM_1_OUT_IO_FUNC);
    PIN_FUNC_SELECT(PWM_2_OUT_IO_MUX, PWM_2_OUT_IO_FUNC);

    for (i = 0; i < PWM_CHANNEL; i++) {
        pwm_gpio |= (1 << pwm_out_io_num[i]);
    }

    pwm_set_freq_duty(freq, duty);

    pwm_start();
}
Example #4
0
static void timerhandle( void * v )
{
    RTC_CLR_REG_MASK(FRC1_INT_ADDRESS, FRC1_INT_CLR_MASK);
	uint16_t r = hs_adc_read();
	sounddata[soundhead] = r>>6;
	soundhead = (soundhead+1)&(HPABUFFSIZE-1);
}