Skip to content

Commit e4969ec

Browse files
sylvioalvescarlescufi
authored andcommitted
drivers: esp32: add check for absolute alarm configuration
ESP32 counter based on Timer or RTC misses the COUNTER_ALARM_CFG_ABSOLUTE flag check. Signed-off-by: Sylvio Alves <[email protected]>
1 parent e8954e6 commit e4969ec

File tree

2 files changed

+13
-2
lines changed

2 files changed

+13
-2
lines changed

drivers/counter/counter_esp32_rtc.c

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -107,8 +107,13 @@ static int counter_esp32_set_alarm(const struct device *dev, uint8_t chan_id,
107107

108108
counter_esp32_get_value(dev, &now);
109109

110+
if ((alarm_cfg->flags & COUNTER_ALARM_CFG_ABSOLUTE) == 0) {
111+
WRITE_PERI_REG(RTC_CNTL_SLP_TIMER0_REG, (now + alarm_cfg->ticks));
112+
} else {
113+
WRITE_PERI_REG(RTC_CNTL_SLP_TIMER0_REG, alarm_cfg->ticks);
114+
}
115+
110116
/* RTC main timer set alarm value */
111-
WRITE_PERI_REG(RTC_CNTL_SLP_TIMER0_REG, (now + alarm_cfg->ticks));
112117
CLEAR_PERI_REG_MASK(RTC_CNTL_SLP_TIMER1_REG, 0xffffffff);
113118

114119
/* RTC main timer interrupt enable */

drivers/counter/counter_esp32_tmr.c

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -140,9 +140,15 @@ static int counter_esp32_set_alarm(const struct device *dev, uint8_t chan_id,
140140
uint32_t now;
141141

142142
counter_esp32_get_value(dev, &now);
143+
143144
k_spinlock_key_t key = k_spin_lock(&lock);
144145

145-
timer_hal_set_alarm_value(&data->hal_ctx, (now + alarm_cfg->ticks));
146+
if ((alarm_cfg->flags & COUNTER_ALARM_CFG_ABSOLUTE) == 0) {
147+
timer_hal_set_alarm_value(&data->hal_ctx, (now + alarm_cfg->ticks));
148+
} else {
149+
timer_hal_set_alarm_value(&data->hal_ctx, alarm_cfg->ticks);
150+
}
151+
146152
timer_hal_intr_enable(&data->hal_ctx);
147153
timer_hal_set_alarm_enable(&data->hal_ctx, TIMER_ALARM_EN);
148154
data->alarm_cfg.callback = alarm_cfg->callback;

0 commit comments

Comments
 (0)