#include "watch.h"
// receives interrupts from MCLK, OSC32KCTRL, OSCCTRL, PAC, PM, SUPC and TAL, whatever that is.
-void SYSTEM_Handler(void) {
+void irq_handler_system(void) {
if (SUPC->INTFLAG.bit.BOD33DET) {
// Our system voltage has dipped below 2.6V!
// Set the voltage regulator to work at low system voltage before we hit 2.5 V
SUPC->INTFLAG.reg &= ~SUPC_INTFLAG_BOD33DET;
}
}
-
-bool watch_is_usb_enabled(void) {
- return USB->DEVICE.CTRLA.bit.ENABLE;
-}
-
-void watch_reset_to_bootloader(void) {
- volatile uint32_t *dbl_tap_ptr = ((volatile uint32_t *)(HSRAM_ADDR + HSRAM_SIZE - 4));
- *dbl_tap_ptr = 0xf01669ef; // from the UF2 bootloaer: uf2.h line 255
- NVIC_SystemReset();
-}
return _desc_str;
}
+
+void watch_reset_to_bootloader(void) {
+ volatile uint32_t *dbl_tap_ptr = ((volatile uint32_t *)(HSRAM_ADDR + HSRAM_SIZE - 4));
+ *dbl_tap_ptr = 0xf01669ef; // from the UF2 bootloaer: uf2.h line 255
+ NVIC_SystemReset();
+}
*/
/// @file watch.h
-#ifndef WATCH_H_
-#define WATCH_H_
+#pragma once
+
#include <stdint.h>
#include <stdbool.h>
#include "pins.h"
// #include "watch_storage.h"
// #include "watch_deepsleep.h"
-// #include "watch_private.h"
-
-/** @brief Returns true if USB is enabled.
- */
-bool watch_is_usb_enabled(void);
+/** @brief Interrupt handler for the SYSTEM interrupt, which handles MCLK,
+ * OSC32KCTRL, OSCCTRL, PAC, PM and SUPC.
+ * @details We use this to detect when the system voltage has dipped below
+ * 2.6V, which means it's time to disable the voltage regulator's
+ * high-efficiency mode, which only works down to 2.5V.
+ */
+void irq_handler_system(void);
/** @brief Resets in the UF2 bootloader mode
*/
int read(int file, char *ptr, int len);
/** @brief Disables the TRNG twice in order to work around silicon erratum 1.16.1.
+ * FIXME: find a better place for this, a couple of watch faces need it.
*/
-void watch_disable_TRNG();
-
-#endif /* WATCH_H_ */
+void watch_disable_TRNG(void);
/// Called by main.c while setting up the app. You should not call this from your app.
void _watch_init(void);
-/// Initializes the real-time clock peripheral.
-void _watch_rtc_init(void);
-
/// Called by buzzer and LED teardown functions. You should not call this from your app.
void _watch_disable_tcc(void);
/// Called by main.c if plugged in to USB. You should not call this from your app.
void _watch_enable_usb(void);
+/// Initializes the real-time clock peripheral. Implemented in watch_rtc.c
+void _watch_rtc_init(void);
+
#endif