Implementation of continuous synchronization of RTC during pulsein

Flags and code to implement continuous synchronization of RTC during pulsein
This commit is contained in:
DavePutz 2020-07-04 21:17:19 -05:00 committed by GitHub
parent 94d90742dd
commit ac33c3fe2c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 22 additions and 0 deletions

View File

@ -91,6 +91,23 @@
#if CIRCUITPY_PEW
#include "common-hal/_pew/PewPew.h"
#endif
#ifdef SAMD21
volatile bool hold_interrupt = false;
void rtc_start_pulsein(void) {
rtc_set_continuous();
hold_interrupt = true;
}
void rtc_end_pulsein(void) {
hold_interrupt = false;
}
void rtc_set_continuous(void) {
while (RTC->MODE0.STATUS.bit.SYNCBUSY);
RTC->MODE0.READREQ.reg = RTC_READREQ_RREQ | RTC_READREQ_RCONT | 0x0010;
while (RTC->MODE0.STATUS.bit.SYNCBUSY);
}
#endif
extern volatile bool mp_msc_enabled;
@ -489,6 +506,11 @@ void port_interrupt_after_ticks(uint32_t ticks) {
// We'll interrupt sooner with an overflow.
return;
}
#ifdef SAMD21
if (hold_interrupt == true) {
return;
}
#endif
RTC->MODE0.COMP[0].reg = current_ticks + (ticks << 4);
RTC->MODE0.INTFLAG.reg = RTC_MODE0_INTFLAG_CMP0;
RTC->MODE0.INTENSET.reg = RTC_MODE0_INTENSET_CMP0;