// frequency (in hertz) and duration (in milliseconds). void tone(uint8_t _pin, unsigned int frequency, unsigned long duration) { _pin = esp8266_pinToGpio[_pin]; int8_t _index; _index = toneBegin(_pin); if (_index >= 0) { // Set the pinMode as OUTPUT pinMode(_pin, OUTPUT); // Calculate the toggle count if (duration > 0) { toggle_counts[_index] = 2 * frequency * duration / 1000; } else { toggle_counts[_index] = -1; } // set up the interrupt frequency switch (tone_timers[_index]) { case 0: // Not currently supported break; case 1: timer1_disable(); timer1_isr_init(); timer1_attachInterrupt(t1IntHandler); timer1_enable(TIM_DIV1, TIM_EDGE, TIM_LOOP); timer1_write((clockCyclesPerMicrosecond() * 500000) / frequency); break; } } }
static void initTimer() { timer1_disable(); timer1_isr_init(); timer1_attachInterrupt(timer1Interrupt); lastCycleCount = GetCycleCount(); timer1_enable(TIM_DIV1, TIM_EDGE, TIM_SINGLE); timerRunning = true; }
void ICACHE_RAM_ATTR pwm_stop_pin(uint8_t pin) { if(pwm_mask) { pwm_mask &= ~(1 << pin); if(pwm_mask == 0) { ETS_FRC_TIMER1_NMI_INTR_ATTACH(NULL); timer1_disable(); timer1_isr_init(); } } }
static void deinitTimer() { timer1_attachInterrupt(NULL); timer1_disable(); timer1_isr_init(); timerRunning = false; }
void init() { initPins(); timer1_isr_init(); os_timer_setfn(µs_overflow_timer, (os_timer_func_t*) µs_overflow_tick, 0); os_timer_arm(µs_overflow_timer, 60000, REPEAT); }