avr_timer_comp(
avr_timer_t *p,
avr_cycle_count_t when,
- uint8_t comp)
+ uint8_t comp,
+ uint8_t raise_interrupt)
{
avr_t * avr = p->io.avr;
- avr_raise_interrupt(avr, &p->comp[comp].interrupt);
+ if (raise_interrupt) {
+ avr_raise_interrupt(avr, &p->comp[comp].interrupt);
+ }
// check output compare mode and set/clear pins
uint8_t mode = avr_regbit_get(avr, p->comp[comp].com);
avr_cycle_count_t when,
void * param)
{
- return avr_timer_comp((avr_timer_t*)param, when, AVR_TIMER_COMPA);
+ return avr_timer_comp((avr_timer_t*)param, when, AVR_TIMER_COMPA, 1);
}
static avr_cycle_count_t
avr_cycle_count_t when,
void * param)
{
- return avr_timer_comp((avr_timer_t*)param, when, AVR_TIMER_COMPB);
+ return avr_timer_comp((avr_timer_t*)param, when, AVR_TIMER_COMPB, 1);
}
static avr_cycle_count_t
avr_cycle_count_t when,
void * param)
{
- return avr_timer_comp((avr_timer_t*)param, when, AVR_TIMER_COMPC);
+ return avr_timer_comp((avr_timer_t*)param, when, AVR_TIMER_COMPC, 1);
}
static void
for (int compi = 0; compi < AVR_TIMER_COMP_COUNT; compi++) {
if ((addr == p->comp[compi].foc.reg) &&
(v & (1 << p->comp[compi].foc.bit))) {
- avr_timer_comp(p, avr->cycle, compi);
+ avr_timer_comp(p, avr->cycle, compi, 0);
}
}
}