Skip to content

Commit

Permalink
sam0/rtc_rtt: don't block until set_alarm has been propagated to periph
Browse files Browse the repository at this point in the history
rtc_set_alarm() / rtt_set_alarm() are heavily used by ztimer during ISR. This will reduce time spent during ISR drastically. We trust that the peripheral is able to propagate the alarm asynchronously.
  • Loading branch information
jue89 committed Nov 16, 2022
1 parent 9c6f07f commit 268bdfe
Showing 1 changed file with 12 additions and 10 deletions.
22 changes: 12 additions & 10 deletions cpu/sam0_common/periph/rtc_rtt.c
Original file line number Diff line number Diff line change
Expand Up @@ -612,18 +612,18 @@ int rtc_set_alarm(struct tm *time, rtc_alarm_cb_t cb, void *arg)
(time->tm_year > (reference_year + 63))) {
return -2;
}
else {
RTC->MODE2.Mode2Alarm[0].ALARM.reg = RTC_MODE2_ALARM_YEAR(time->tm_year - reference_year)
| RTC_MODE2_ALARM_MONTH(time->tm_mon + 1)
| RTC_MODE2_ALARM_DAY(time->tm_mday)
| RTC_MODE2_ALARM_HOUR(time->tm_hour)
| RTC_MODE2_ALARM_MINUTE(time->tm_min)
| RTC_MODE2_ALARM_SECOND(time->tm_sec);
RTC->MODE2.Mode2Alarm[0].MASK.reg = RTC_MODE2_MASK_SEL(6);
}

/* make sure that preceding changes have been applied */
_wait_syncbusy();

RTC->MODE2.Mode2Alarm[0].ALARM.reg = RTC_MODE2_ALARM_YEAR(time->tm_year - reference_year)
| RTC_MODE2_ALARM_MONTH(time->tm_mon + 1)
| RTC_MODE2_ALARM_DAY(time->tm_mday)
| RTC_MODE2_ALARM_HOUR(time->tm_hour)
| RTC_MODE2_ALARM_MINUTE(time->tm_min)
| RTC_MODE2_ALARM_SECOND(time->tm_sec);
RTC->MODE2.Mode2Alarm[0].MASK.reg = RTC_MODE2_MASK_SEL(6);

/* Enable IRQ */
alarm_cb.cb = cb;
alarm_cb.arg = arg;
Expand Down Expand Up @@ -738,9 +738,11 @@ void rtt_set_alarm(uint32_t alarm, rtt_cb_t cb, void *arg)
alarm_cb.cb = cb;
alarm_cb.arg = arg;

/* make sure that preceding changes have been applied */
_wait_syncbusy();

/* set COMP register */
RTC->MODE0.COMP[0].reg = alarm;
_wait_syncbusy();

/* enable compare interrupt and clear flag */
RTC->MODE0.INTFLAG.reg = RTC_MODE0_INTFLAG_CMP0;
Expand Down

0 comments on commit 268bdfe

Please sign in to comment.