timer0_write(count)
giving it the instruction count to trigger on, once it fires you have to call write again to get it to fire again. To calculate the trigger count, call timer0_read()
and add your count to it and pass this to write.
Use something like this and avoid constants so you don't care about 80, 160.
uint32_t usToTicks(uint32_t us) const
{
return (clockCyclesPerMicrosecond() * us); // converts microseconds to tick
}
uint32_t ticksToUs(uint32_t ticks) const
{
return (ticks / clockCyclesPerMicrosecond()); // converts from ticks back to microseconds
}
This is what the servo timer stuff uses when using timer0.
static uint32_t ticksPeriod = 500;//still in us
void onTimer0(){
uint32_t ticksAtEnter = timer0_read();
//do your thing
// NO YIELD OR DELAY
timer0_write(ticksAtEnter + ticksPeriod);
}
void setup() {
//convert period in us to ticks
ticksPeriod *= clockCyclesPerMicrosecond();
uint32_t ticksAtInit = timer0_read();
timer0_attachInterrupt(&onTimer0);
timer0_write(ticksAtInit + ticksPeriod);
}
static uint32_t ticksPeriod = 500;//still in us
void onTimer0(){
uint32_t ticksAtEnter = ESP.getCycleCount();
//do your thing
// NO YIELD OR DELAY
timer0_write(ticksAtEnter + ticksPeriod);
}
void setup() {
//convert period in us to ticks
ticksPeriod *= clockCyclesPerMicrosecond();
timer0_isr_init();
timer0_attachInterrupt(&onTimer0);
timer0_write(ESP.getCycleCount() + ticksPeriod);
}