From aa9037c1accd5064a8045bdc88c093deb7e093d8 Mon Sep 17 00:00:00 2001 From: Thomas Roell Date: Thu, 5 Jul 2018 19:26:31 -0600 Subject: [PATCH] Rework RTC calendar to use a elapsed seconds offset (BKPx); this way RTC once started does not have to be modified Use a S11 value for subsecond correction throu PPS (BKPx) Use RTC for millis() over Systick Add LSE calibration via TCXO for CMWX1ZZABZ (via DIO1) Add PPS tracking for GNSS to facility RTC phase correction --- cores/arduino/Makefile | 8 +- cores/arduino/delay.c | 11 +- drivers/linux/49-nucleo.rules | 5 + .../examples/GNSS_periodic/GNSS_periodic.ino | 54 +- libraries/GNSS/src/GNSS.cpp | 79 +- libraries/GNSS/src/GNSS.h | 21 +- libraries/GNSS/src/utility/gnss_api.h | 28 +- libraries/GNSS/src/utility/gnss_core.c | 254 ++++++- libraries/LoRaWAN/src/LoRaWAN.cpp | 138 ++-- libraries/RTC/src/RTC.cpp | 270 +++++-- libraries/RTC/src/RTC.h | 46 +- libraries/TimerMillis/src/TimerMillis.cpp | 4 +- system/STM32L0xx/Include/armv6m_systick.h | 1 - system/STM32L0xx/Include/stm32l0_rtc.h | 26 +- system/STM32L0xx/Lib/libstm32l052xx.a | Bin 1951152 -> 1927822 bytes system/STM32L0xx/Lib/libstm32l072xx.a | Bin 1957524 -> 1961028 bytes system/STM32L0xx/Lib/libstm32l082xx.a | Bin 1974648 -> 1978304 bytes .../Source/LoRa/Boards/cmwx1zzabz-board.c | 204 ++++- system/STM32L0xx/Source/LoRa/System/timer.c | 4 +- system/STM32L0xx/Source/armv6m_systick.c | 41 - system/STM32L0xx/Source/dosfs_core.c | 718 +++++++++--------- system/STM32L0xx/Source/dosfs_storage.c | 32 +- system/STM32L0xx/Source/stm32l0_eeprom.c | 456 +++++------ system/STM32L0xx/Source/stm32l0_flash.c | 18 +- system/STM32L0xx/Source/stm32l0_lptim.c | 60 +- system/STM32L0xx/Source/stm32l0_rtc.c | 470 +++++++----- system/STM32L0xx/Source/stm32l0_system.c | 57 +- system/STM32L0xx/Source/stm32l0_timer.c | 2 +- system/STM32L0xx/Source/stm32l0_uart.c | 12 +- variants/Cicada-L082CZ/variant.cpp | 6 +- variants/Cricket-L082CZ/variant.cpp | 6 +- variants/Cricket-L082CZ/variant.h | 1 + variants/Grasshopper-L082CZ/variant.cpp | 6 +- 33 files changed, 1879 insertions(+), 1159 deletions(-) create mode 100644 drivers/linux/49-nucleo.rules diff --git a/cores/arduino/Makefile b/cores/arduino/Makefile index 25006391..2bf40752 100644 --- a/cores/arduino/Makefile +++ b/cores/arduino/Makefile @@ -8,7 +8,7 @@ LD = $(TOOLS)/bin/arm-none-eabi-ld CFLAGS = -mcpu=cortex-m0plus -mthumb -c -g -Os $(WARNINGS) -std=gnu11 -ffunction-sections -fdata-sections -nostdlib -MMD $(EXTRAS) $(DEFINES) $(INCLUDES) CXXFLAGS = -mcpu=cortex-m0plus -mthumb -c -g -Os $(WARNINGS) -std=gnu++11 -ffunction-sections -fdata-sections -fno-threadsafe-statics -nostdlib -fno-rtti -fno-exceptions -MMD $(EXTRAS) $(DEFINES) $(INCLUDES) ASFLAGS = -c -g -x assembler-with-cpp $(EXTRAS) $(DEFINES) $(INCLUDES) -LDFLAGS = -g -Os -mcpu=cortex-m0plus -mthumb -mabi=aapcs -mfloat-abi=soft -Wl,--gc-sections,--no-undefined -T../../variants/STM32L082CZ-Cricket/linker_scripts/STM32L082CZ_FLASH.ld --specs=nano.specs +LDFLAGS = -g -Os -mcpu=cortex-m0plus -mthumb -mabi=aapcs -mfloat-abi=soft -Wl,--gc-sections,--no-undefined -T../../variants/Cricket-L082CZ/linker_scripts/STM32L082CZ_FLASH.ld --specs=nano.specs WARNINGS = -Wall -Wextra -Wno-unused-parameter EXTRAS = -DSTM32L082xx -march=armv6-m -mthumb -mabi=aapcs -mfloat-abi=soft DEFINES = -D_SYSTEM_CORE_CLOCK_=32000000 -DDOSFS_SDCARD=0 -DDOSFS_SFLASH=1 -DARDUINO_MAKEFILE @@ -16,7 +16,7 @@ INCLUDES = \ -I../../system/CMSIS/Include \ -I../../system/CMSIS/Device/ST/STM32L0xx/Include \ -I../../system/STM32L0xx/Include \ - -I../../variants/STM32L082CZ-Cricket \ + -I../../variants/Cricket-L082CZ \ -I../../libraries/CayenneLPP/src \ -I../../libraries/DOSFS/src \ -I../../libraries/EEPROM/src \ @@ -40,7 +40,7 @@ SRCS = \ ../../libraries/STM32L0/src/STM32L0.cpp \ ../../libraries/TimerMillis/src/TimerMillis.cpp \ ../../libraries/Wire/src/Wire.cpp \ - ../../variants/STM32L082CZ-Cricket/variant.cpp \ + ../../variants/Cricket-L082CZ/variant.cpp \ avr/dtostrf.c \ avr/eeprom.c \ avr/fdevopen.c \ @@ -86,7 +86,7 @@ OBJS = \ ../../libraries/STM32L0/src/STM32L0.o \ ../../libraries/TimerMillis/src/TimerMillis.o \ ../../libraries/Wire/src/Wire.o \ - ../../variants/STM32L082CZ-Cricket/variant.o \ + ../../variants/Cricket-L082CZ/variant.o \ avr/dtostrf.o \ avr/eeprom.o \ avr/fdevopen.o \ diff --git a/cores/arduino/delay.c b/cores/arduino/delay.c index 9acab169..fd679dbc 100644 --- a/cores/arduino/delay.c +++ b/cores/arduino/delay.c @@ -31,7 +31,12 @@ unsigned long millis(void) { - return armv6m_systick_millis(); + uint32_t seconds; + uint16_t subseconds; + + stm32l0_rtc_get_time(&seconds, &subseconds); + + return (seconds * 1000) + ((subseconds * 1000) / 32768); } unsigned long micros(void) @@ -81,11 +86,11 @@ void delay(uint32_t msec) while (msec); } else { - start = armv6m_systick_millis(); + start = millis(); do { } - while ((armv6m_systick_millis() - start) < msec); + while ((millis() - start) < msec); } } diff --git a/drivers/linux/49-nucleo.rules b/drivers/linux/49-nucleo.rules new file mode 100644 index 00000000..90717f60 --- /dev/null +++ b/drivers/linux/49-nucleo.rules @@ -0,0 +1,5 @@ +ATTRS{idVendor}=="0483", ATTRS{idProduct}=="374b", ENV{ID_MM_DEVICE_IGNORE}="1" +ATTRS{idVendor}=="0483", ATTRS{idProduct}=="374b", ENV{MTP_NO_PROBE}="1" +ATTRS{idVendor}=="0483", ATTRS{idProduct}=="374b", ENV{UDISKS_AUTO}="0" +SUBSYSTEMS=="usb", ATTRS{idVendor}=="0483", ATTRS{idProduct}=="374b", MODE:="0666" +KERNEL=="ttyACM*", ATTRS{idVendor}=="0483", ATTRS{idProduct}=="374b", MODE:="0666" diff --git a/libraries/GNSS/examples/GNSS_periodic/GNSS_periodic.ino b/libraries/GNSS/examples/GNSS_periodic/GNSS_periodic.ino index f472c078..091169f4 100644 --- a/libraries/GNSS/examples/GNSS_periodic/GNSS_periodic.ino +++ b/libraries/GNSS/examples/GNSS_periodic/GNSS_periodic.ino @@ -1,10 +1,11 @@ #include "GNSS.h" #include "STM32L0.h" +#include "RTC.h" bool isPeriodic = false; unsigned int myAcqTime = 45; -unsigned int myOnTime = 5; +unsigned int myOnTime = 15; unsigned int myPeriod = 120; GNSSLocation myLocation; @@ -28,6 +29,8 @@ void setup( void ) GNSS.setAntenna(GNSS.ANTENNA_INTERNAL); while (GNSS.busy()) { } + + GNSS.enableWakeup(); } void loop( void ) @@ -36,6 +39,9 @@ void loop( void ) if (GNSS.location(myLocation)) { + uint8_t year, month, day, hours, minutes, seconds; + uint32_t subSeconds, milliSeconds; + static const char *fixTypeString[] = { "NONE", "TIME", @@ -57,7 +63,7 @@ void loop( void ) if (!isPeriodic) { - if (myLocation.fixType() == GNSSLocation::TYPE_3D) + if ((myLocation.fixType() == GNSSLocation::TYPE_3D) && (myLocation.ehpe() <= 30.0) && myLocation.fullyResolved()) { isPeriodic = true; @@ -65,6 +71,42 @@ void loop( void ) } } + RTC.getDate(day, month, year); + RTC.getTime(hours, minutes, seconds, subSeconds); + + milliSeconds = ((subSeconds >> 17) * 1000 + 16384) / 32768; + + Serial.print("RTC: "); + Serial.print(2000 + year); + Serial.print("/"); + Serial.print(month); + Serial.print("/"); + Serial.print(day); + Serial.print(" "); + if (hours <= 9) { + Serial.print("0"); + } + Serial.print(hours); + Serial.print(":"); + if (minutes <= 9) { + Serial.print("0"); + } + Serial.print(minutes); + Serial.print(":"); + if (seconds <= 9) { + Serial.print("0"); + } + Serial.print(seconds); + Serial.print("."); + if (milliSeconds <= 9) { + Serial.print("0"); + } + if (milliSeconds <= 99) { + Serial.print("0"); + } + Serial.print(milliSeconds); + Serial.println(); + Serial.print("LOCATION: "); Serial.print(fixTypeString[myLocation.fixType()]); @@ -101,6 +143,14 @@ void loop( void ) } Serial.print(myLocation.millis()); + if (myLocation.leapSeconds() != GNSSLocation::LEAP_SECONDS_UNDEFINED) { + Serial.print(" "); + Serial.print(myLocation.leapSeconds()); + if (!myLocation.fullyResolved()) { + Serial.print("D"); + } + } + if (myLocation.fixType() != GNSSLocation::TYPE_TIME) { Serial.print(" LLA="); diff --git a/libraries/GNSS/src/GNSS.cpp b/libraries/GNSS/src/GNSS.cpp index f24cca3a..19b2d255 100644 --- a/libraries/GNSS/src/GNSS.cpp +++ b/libraries/GNSS/src/GNSS.cpp @@ -44,7 +44,7 @@ GNSSLocation::GNSSLocation() _location.time.seconds = 0; _location.time.millis = 0; _location.mask = 0; - _location.correction = 0; + _location.correction = -128; _location.type = 0; _location.latitude = 0; _location.longitude = 0; @@ -77,6 +77,11 @@ enum GNSSLocation::GNSSfixQuality GNSSLocation::fixQuality(void) const return (enum GNSSLocation::GNSSfixQuality)_location.quality; } +bool GNSSLocation::fullyResolved(void) const +{ + return !!(_location.mask & GNSS_LOCATION_MASK_RESOLVED); +} + unsigned int GNSSLocation::satellites(void) const { return _location.numsv; @@ -117,7 +122,7 @@ uint16_t GNSSLocation::millis(void) const return _location.time.millis; } -uint8_t GNSSLocation::leapSeconds(void) const +int8_t GNSSLocation::leapSeconds(void) const { return _location.correction; } @@ -342,6 +347,11 @@ void GNSSClass::begin(Uart &uart, GNSSmode mode, GNSSrate rate) } #endif /* defined(STM32L0_CONFIG_PIN_GNSS_ENABLE) */ +#if defined(STM32L0_CONFIG_PIN_GNSS_PPS) + stm32l0_gpio_pin_configure(STM32L0_CONFIG_PIN_GNSS_PPS, (STM32L0_GPIO_PARK_NONE | STM32L0_GPIO_PUPD_PULLDOWN | STM32L0_GPIO_OSPEED_HIGH | STM32L0_GPIO_OTYPE_PUSHPULL | STM32L0_GPIO_MODE_INPUT)); + stm32l0_exti_attach(STM32L0_CONFIG_PIN_GNSS_PPS, STM32L0_EXTI_CONTROL_EDGE_FALLING, (stm32l0_exti_callback_t)ppsCallback, (void*)this); +#endif + _uart = &uart; _uart->begin(9600); @@ -412,14 +422,34 @@ bool GNSSClass::setPeriodic(unsigned int acqTime, unsigned int onTime, unsigned return (_uart && gnss_set_periodic(acqTime, onTime, period)); } -bool GNSSClass::sleep() +bool GNSSClass::suspend() { - return (_uart && gnss_sleep()); + if (!(_uart && gnss_suspend())) + { + return false; + } + +#if defined(STM32L0_CONFIG_PIN_GNSS_PPS) + stm32l0_exti_detach(STM32L0_CONFIG_PIN_GNSS_PPS); + stm32l0_gpio_pin_configure(STM32L0_CONFIG_PIN_GNSS_PPS, (STM32L0_GPIO_PARK_NONE | STM32L0_GPIO_MODE_ANALOG)); +#endif + + return true; } -bool GNSSClass::wakeup() +bool GNSSClass::resume() { - return (_uart && gnss_wakeup()); + if (!(_uart && gnss_resume())) + { + return false; + } + +#if defined(STM32L0_CONFIG_PIN_GNSS_PPS) + stm32l0_gpio_pin_configure(STM32L0_CONFIG_PIN_GNSS_PPS, (STM32L0_GPIO_PARK_NONE | STM32L0_GPIO_PUPD_PULLDOWN | STM32L0_GPIO_OSPEED_HIGH | STM32L0_GPIO_OTYPE_PUSHPULL | STM32L0_GPIO_MODE_INPUT)); + stm32l0_exti_attach(STM32L0_CONFIG_PIN_GNSS_PPS, STM32L0_EXTI_CONTROL_EDGE_FALLING, (stm32l0_exti_callback_t)ppsCallback, (void*)this); +#endif + + return true; } bool GNSSClass::busy() @@ -462,6 +492,16 @@ bool GNSSClass::satellites(GNSSSatellites &satellites) return true; } +void GNSSClass::enableWakeup() +{ + _wakeup = true; +} + +void GNSSClass::disableWakeup() +{ + _wakeup = false; +} + void GNSSClass::onLocation(void(*callback)(void)) { _locationCallback = Callback(callback); @@ -482,6 +522,16 @@ void GNSSClass::onSatellites(Callback callback) _satellitesCallback = callback; } +void GNSSClass::attachInterrupt(void(*callback)(void)) +{ + _ppsCallback = callback; +} + +void GNSSClass::detachInterrupt() +{ + _ppsCallback = NULL; +} + void GNSSClass::receiveCallback(void) { uint8_t rx_data[16]; @@ -540,6 +590,10 @@ void GNSSClass::disableCallback(class GNSSClass *self) void GNSSClass::locationCallback(class GNSSClass *self, const gnss_location_t *location) { + if (self->_wakeup) { + stm32l0_system_wakeup(); + } + self->_location_data = *location; self->_location_pending = true; @@ -548,10 +602,23 @@ void GNSSClass::locationCallback(class GNSSClass *self, const gnss_location_t *l void GNSSClass::satellitesCallback(class GNSSClass *self, const gnss_satellites_t *satellites) { + if (self->_wakeup) { + stm32l0_system_wakeup(); + } + self->_satellites_data = *satellites; self->_satellites_pending = true; self->_satellitesCallback.queue(); } +void GNSSClass::ppsCallback(class GNSSClass *self) +{ + gnss_pps_callback(); + + if (self->_ppsCallback) { + (*self->_ppsCallback)(); + } +} + GNSSClass GNSS; diff --git a/libraries/GNSS/src/GNSS.h b/libraries/GNSS/src/GNSS.h index e0a5a85b..aed40fec 100644 --- a/libraries/GNSS/src/GNSS.h +++ b/libraries/GNSS/src/GNSS.h @@ -53,6 +53,8 @@ class GNSSLocation { QUALITY_SIMULATION, }; + static const int LEAP_SECONDS_UNDEFINED = -128; + GNSSLocation(const gnss_location_t *location); GNSSLocation(); @@ -60,6 +62,7 @@ class GNSSLocation { enum GNSSfixType fixType(void) const; enum GNSSfixQuality fixQuality(void) const; + bool fullyResolved(void) const; unsigned int satellites(void) const; uint16_t year(void) const; @@ -69,7 +72,7 @@ class GNSSLocation { uint8_t minutes(void) const; uint8_t seconds(void) const; uint16_t millis(void) const; - uint8_t leapSeconds(void) const; + int8_t leapSeconds(void) const; double latitude(void) const; // WGS84 double longitude(void) const; // WGS84 @@ -167,21 +170,28 @@ class GNSSClass { bool setAutonomous(bool enable); bool setPlatform(GNSSplatform platform); bool setPeriodic(unsigned int acqTime, unsigned int onTime, unsigned int period); - bool sleep(); - bool wakeup(); + bool suspend(); + bool resume(); bool busy(); bool location(GNSSLocation &location); bool satellites(GNSSSatellites &satellites); + void enableWakeup(); + void disableWakeup(); + void onLocation(void(*callback)(void)); void onLocation(Callback callback); void onSatellites(void(*callback)(void)); void onSatellites(Callback callback); + void attachInterrupt(void(*callback)(void)); + void detachInterrupt(); + private: Uart *_uart; uint32_t _baudrate; + bool _wakeup; gnss_location_t _location_data; volatile uint32_t _location_pending; gnss_satellites_t _satellites_data; @@ -190,15 +200,18 @@ class GNSSClass { Callback _locationCallback; Callback _satellitesCallback; + void (*_ppsCallback)(void); + void (*_doneCallback)(void); + void receiveCallback(void); void completionCallback(void); - void (*_doneCallback)(void); static void sendRoutine(class GNSSClass*, const uint8_t*, uint32_t, gnss_send_callback_t); static void enableCallback(class GNSSClass*); static void disableCallback(class GNSSClass*); static void locationCallback(class GNSSClass*, const gnss_location_t*); static void satellitesCallback(class GNSSClass*, const gnss_satellites_t*); + static void ppsCallback(class GNSSClass*); }; extern GNSSClass GNSS; diff --git a/libraries/GNSS/src/utility/gnss_api.h b/libraries/GNSS/src/utility/gnss_api.h index 119a0dd2..8315bf54 100644 --- a/libraries/GNSS/src/utility/gnss_api.h +++ b/libraries/GNSS/src/utility/gnss_api.h @@ -84,21 +84,22 @@ typedef struct _utc_time_t { #define GNSS_LOCATION_MASK_TIME 0x0001 #define GNSS_LOCATION_MASK_CORRECTION 0x0002 -#define GNSS_LOCATION_MASK_POSITION 0x0004 -#define GNSS_LOCATION_MASK_ALTITUDE 0x0008 -#define GNSS_LOCATION_MASK_SPEED 0x0010 -#define GNSS_LOCATION_MASK_COURSE 0x0020 -#define GNSS_LOCATION_MASK_CLIMB 0x0040 -#define GNSS_LOCATION_MASK_EHPE 0x0080 -#define GNSS_LOCATION_MASK_EVPE 0x0100 -#define GNSS_LOCATION_MASK_PDOP 0x0200 -#define GNSS_LOCATION_MASK_HDOP 0x0400 -#define GNSS_LOCATION_MASK_VDOP 0x0800 +#define GNSS_LOCATION_MASK_RESOLVED 0x0004 +#define GNSS_LOCATION_MASK_POSITION 0x0008 +#define GNSS_LOCATION_MASK_ALTITUDE 0x0010 +#define GNSS_LOCATION_MASK_SPEED 0x0020 +#define GNSS_LOCATION_MASK_COURSE 0x0040 +#define GNSS_LOCATION_MASK_CLIMB 0x0080 +#define GNSS_LOCATION_MASK_EHPE 0x0100 +#define GNSS_LOCATION_MASK_EVPE 0x0200 +#define GNSS_LOCATION_MASK_PDOP 0x0400 +#define GNSS_LOCATION_MASK_HDOP 0x0800 +#define GNSS_LOCATION_MASK_VDOP 0x1000 typedef struct _gnss_location_t { utc_time_t time; /* UTC date/time */ uint16_t mask; /* */ - uint8_t correction; /* GPS/UTC offset */ + int8_t correction; /* GPS/UTC offset */ uint8_t type; /* fix type */ int32_t latitude; /* (WGS84) degrees, 1e7 */ int32_t longitude; /* (WGS84) degrees, 1e7 */ @@ -165,6 +166,7 @@ typedef struct { extern void gnss_initialize(unsigned int mode, unsigned int rate, unsigned int speed, gnss_send_routine_t send_routine, const gnss_callbacks_t *callbacks, void *context); extern void gnss_receive(const uint8_t *data, uint32_t count); +extern void gnss_pps_callback(void); extern bool gnss_set_antenna(unsigned int antenna); extern bool gnss_set_pps(unsigned int width); extern bool gnss_set_constellation(unsigned int mask); @@ -173,8 +175,8 @@ extern bool gnss_set_qzss(bool enable); extern bool gnss_set_autonomous(bool enable); extern bool gnss_set_platform(unsigned int platform); extern bool gnss_set_periodic(unsigned int acqTime, unsigned int onTime, unsigned int period); -extern bool gnss_sleep(void); -extern bool gnss_wakeup(void); +extern bool gnss_suspend(void); +extern bool gnss_resume(void); extern bool gnss_busy(void); #ifdef __cplusplus diff --git a/libraries/GNSS/src/utility/gnss_core.c b/libraries/GNSS/src/utility/gnss_core.c index 6e5340dc..f532b99f 100644 --- a/libraries/GNSS/src/utility/gnss_core.c +++ b/libraries/GNSS/src/utility/gnss_core.c @@ -31,7 +31,6 @@ #include "gnss_api.h" #include "stm32l0_rtc.h" -#include "stm32l0_gpio.h" /* * NOTES: @@ -226,6 +225,9 @@ typedef struct _ubx_context_t { #define GNSS_TX_DATA_SIZE 64 /* UBX SET PERIODIC */ #define GNSS_TX_TABLE_COUNT 8 /* UBX SET PERIODIC */ +#define GNSS_PPS_FAVG 2 /* min freq avg interval (s) (shift) */ +#define GNSS_PPS_POPCORN 2 /* popcorn spike threshold (shift) */ + typedef struct _gnss_device_t { uint8_t mode; uint8_t rate; @@ -248,6 +250,14 @@ typedef struct _gnss_device_t { gnss_location_t location; gnss_satellites_t satellites; volatile uint32_t command; + volatile uint32_t pps_sequence[2]; + uint32_t pps_capture[3]; + uint32_t pps_count; + int32_t pps_jitter; + uint32_t pps_seconds; + int16_t pps_tf[3]; + int8_t pps_correction; + uint8_t pps_adjust; gnss_send_routine_t send_routine; const gnss_callbacks_t *callbacks; void *context; @@ -256,6 +266,7 @@ typedef struct _gnss_device_t { static gnss_device_t gnss_device; static void gnss_send_callback(void); +static void ubx_wakeup(gnss_device_t *device); static void ubx_configure(gnss_device_t *device, unsigned int response, uint32_t command); /************************************************************************************/ @@ -304,8 +315,15 @@ static int utc_offset_time(const utc_time_t *time, uint16_t week, uint32_t tow) /************************************************************************************/ +#define max(a, b) (((a) > (b)) ? (a) : (b)) + static void gnss_location(gnss_device_t *device) { + uint32_t seconds, pps_seconds; + uint16_t subseconds; + int16_t pps_subseconds, pps_offset, pps_delta; + stm32l0_rtc_calendar_t utc_time; + switch (device->location.type) { case GNSS_LOCATION_TYPE_NONE: device->location.mask = 0; @@ -315,7 +333,8 @@ static void gnss_location(gnss_device_t *device) case GNSS_LOCATION_TYPE_TIME: device->location.mask &= (GNSS_LOCATION_MASK_TIME | - GNSS_LOCATION_MASK_CORRECTION); + GNSS_LOCATION_MASK_CORRECTION | + GNSS_LOCATION_MASK_RESOLVED); device->location.quality = GNSS_LOCATION_QUALITY_NONE; break; @@ -323,6 +342,7 @@ static void gnss_location(gnss_device_t *device) case GNSS_LOCATION_TYPE_2D: device->location.mask &= (GNSS_LOCATION_MASK_TIME | GNSS_LOCATION_MASK_CORRECTION | + GNSS_LOCATION_MASK_RESOLVED | GNSS_LOCATION_MASK_POSITION | GNSS_LOCATION_MASK_SPEED | GNSS_LOCATION_MASK_COURSE | @@ -341,11 +361,114 @@ static void gnss_location(gnss_device_t *device) { if (!(device->location.mask & GNSS_LOCATION_MASK_CORRECTION)) { - device->location.correction = 0; + device->location.correction = -128; + + device->location.mask &= ~GNSS_LOCATION_MASK_RESOLVED; + } + + if (device->location.time.millis == 0) + { + if (device->pps_sequence[1] != device->pps_sequence[0]) + { + do + { + device->pps_sequence[1] = device->pps_sequence[0]; + + stm32l0_rtc_clock_convert(&device->pps_capture[0], &seconds, &subseconds); + } + while (device->pps_sequence[1] != device->pps_sequence[0]); + + pps_seconds = seconds; + pps_subseconds = subseconds; + + if (pps_subseconds >= (32768 >> 1)) + { + pps_seconds += 1; + pps_subseconds -= 32768; + } + + if ((pps_seconds - device->pps_seconds) > 2) + { + device->pps_count = 1; + device->pps_jitter = 0; + } + else + { + device->pps_count++; + } + + device->pps_tf[2] = device->pps_tf[1]; + device->pps_tf[1] = device->pps_tf[0]; + device->pps_tf[0] = pps_subseconds; + device->pps_seconds = pps_seconds; + + /* + * A three-stage median filter is used to help denoise the PPS + * time. The median sample becomes the time offset estimate; the + * difference between the other two samples becomes the time + * dispersion (jitter) estimate. + */ + if (device->pps_tf[0] > device->pps_tf[1]) { + if (device->pps_tf[1] > device->pps_tf[2]) { + pps_offset = device->pps_tf[1]; /* 0 1 2 */ + pps_delta = device->pps_tf[0] - device->pps_tf[2]; + } else if (device->pps_tf[2] > device->pps_tf[0]) { + pps_offset = device->pps_tf[0]; /* 2 0 1 */ + pps_delta = device->pps_tf[2] - device->pps_tf[1]; + } else { + pps_offset = device->pps_tf[2]; /* 0 2 1 */ + pps_delta = device->pps_tf[0] - device->pps_tf[1]; + } + } else { + if (device->pps_tf[1] < device->pps_tf[2]) { + pps_offset = device->pps_tf[1]; /* 2 1 0 */ + pps_delta = device->pps_tf[2] - device->pps_tf[0]; + } else if (device->pps_tf[2] < device->pps_tf[0]) { + pps_offset = device->pps_tf[0]; /* 1 0 2 */ + pps_delta = device->pps_tf[1] - device->pps_tf[2]; + } else { + pps_offset = device->pps_tf[2]; /* 1 2 0 */ + pps_delta = device->pps_tf[1] - device->pps_tf[0]; + } + } + + /* + * Nominal jitter is due to PPS signal noise and interrupt + * latency. If it exceeds the popcorn threshold, the sample is + * discarded. otherwise, if so enabled, the time offset is + * updated. We can tolerate a modest loss of data here without + * much degrading time accuracy. + */ + + if (pps_delta <= max(device->pps_jitter << GNSS_PPS_POPCORN, 2 * STM32L0_RTC_PREDIV_A)) + { + if (device->pps_count >= 3) + { + stm32l0_rtc_set_adjust(-pps_offset); + + device->pps_adjust = 1; + device->pps_correction = device->location.correction; + } + } + + device->pps_jitter += (pps_delta - device->pps_jitter) >> GNSS_PPS_FAVG; + + utc_time.year = (device->location.time.year + 1980) - 2000; + utc_time.month = device->location.time.month; + utc_time.day = device->location.time.day; + utc_time.hours = device->location.time.hours; + utc_time.minutes = device->location.time.minutes; + utc_time.seconds = device->location.time.seconds; + utc_time.subseconds = 0; + + stm32l0_rtc_set_calendar(STM32L0_RTC_CALENDAR_MASK_ALL, &utc_time); + } } } else { + device->pps_sequence[1] = device->pps_sequence[0]; + device->location.time.year = 1980 - 1980; device->location.time.month = 1; device->location.time.day = 6; @@ -353,7 +476,7 @@ static void gnss_location(gnss_device_t *device) device->location.time.minutes = 0; device->location.time.seconds = 0; device->location.time.millis = 0; - device->location.correction = 0; + device->location.correction = -128; device->location.mask = 0; device->location.numsv = 0; @@ -1521,7 +1644,7 @@ static void nmea_end_sentence(gnss_device_t *device) NMEA_SENTENCE_MASK_GPRMC | NMEA_SENTENCE_MASK_GLGSA); - if ((device->seen & expected) == expected) + if (expected && ((device->seen & expected) == expected)) { if ((context->status == NMEA_STATUS_DATA_VALID) && (context->navigation != NMEA_NAVIGATION_NONE)) { @@ -1553,7 +1676,7 @@ static void nmea_end_sentence(gnss_device_t *device) expected = device->expected & (NMEA_SENTENCE_MASK_GPGSV | NMEA_SENTENCE_MASK_GLGSV); - if ((device->seen & NMEA_SENTENCE_MASK_SOLUTION) && ((device->seen & expected) == expected)) + if ((device->seen & NMEA_SENTENCE_MASK_SOLUTION) && expected && ((device->seen & expected) == expected)) { for (n = 0; n < device->satellites.count; n++) { @@ -1932,6 +2055,8 @@ static void ubx_end_message(gnss_device_t *device, unsigned int message, uint8_t { device->location.time.millis = 0; } + + device->location.mask |= GNSS_LOCATION_MASK_TIME; } else { @@ -2047,14 +2172,21 @@ static void ubx_end_message(gnss_device_t *device, unsigned int message, uint8_t context->week = week; context->tow = tow; - device->location.correction = ubx_data_uint8(data, 10); + device->location.correction = ubx_data_int8(data, 10); + + device->location.mask |= GNSS_LOCATION_MASK_CORRECTION; + + if (ubx_data_uint8(data, 11) & 0x04) + { + device->location.mask |= GNSS_LOCATION_MASK_RESOLVED; + } } else { context->week = 0; context->tow = 0; - device->location.correction = 0; + device->location.correction = -128; } device->seen |= UBX_MESSAGE_MASK_NAV_TIMEGPS; @@ -2142,18 +2274,18 @@ static void ubx_end_message(gnss_device_t *device, unsigned int message, uint8_t UBX_MESSAGE_MASK_NAV_PVT | UBX_MESSAGE_MASK_NAV_TIMEGPS); - if ((device->seen & expected) == expected) + if (expected && ((device->seen & expected) == expected)) { if (context->week && device->location.time.year) { if (!(device->seen & UBX_MESSAGE_MASK_NAV_TIMEGPS)) { device->location.correction = utc_offset_time(&device->location.time, context->week, context->tow); - } - device->location.mask |= (GNSS_LOCATION_MASK_TIME | GNSS_LOCATION_MASK_CORRECTION); + device->location.mask |= (GNSS_LOCATION_MASK_TIME | GNSS_LOCATION_MASK_CORRECTION); + } } - + gnss_location(device); device->seen &= ~(UBX_MESSAGE_MASK_NAV_DOP | @@ -2165,7 +2297,7 @@ static void ubx_end_message(gnss_device_t *device, unsigned int message, uint8_t expected = device->expected & (UBX_MESSAGE_MASK_NAV_SAT | UBX_MESSAGE_MASK_NAV_SVINFO); - if ((device->seen & UBX_MESSAGE_MASK_SOLUTION) && ((device->seen & expected) == expected)) + if ((device->seen & UBX_MESSAGE_MASK_SOLUTION) && expected && ((device->seen & expected) == expected)) { gnss_satellites(device); @@ -2442,8 +2574,8 @@ static const uint8_t ubx_cfg_tp5[] = { 0x40, 0x42, 0x0f, 0x00, /* PULSE LENGTH */ 0xa0, 0xbb, 0x0d, 0x00, /* PULSE LENGTH LOCKED */ 0x00, 0x00, 0x00, 0x00, /* USER DELAY */ - 0x37, 0x00, 0x00, 0x00, /* FLAGS */ - 0xdb, 0x06, /* CK_A, CK_B */ + 0xb7, 0x00, 0x00, 0x00, /* FLAGS */ + 0x5b, 0x06, /* CK_A, CK_B */ }; static const uint8_t ubx_cfg_pm2[] = { @@ -3083,6 +3215,64 @@ static void ubx_sleep(gnss_device_t *device) device->busy = 0; } +static void ubx_wakeup(gnss_device_t *device) +{ + uint8_t *data; + uint32_t nanoseconds; + stm32l0_rtc_calendar_t utc_time; + + if (device->ubx.generation >= 4) + { + if (device->pps_adjust) + { + stm32l0_rtc_get_calendar(&utc_time); + + nanoseconds = (uint64_t)((uint32_t)utc_time.subseconds * (uint32_t)1000000000) / 32768; + + data = &device->tx_data[0]; + + memset(&data[0], 0, sizeof(GNSS_TX_DATA_SIZE)); + + data[ 0] = 0xb5; + data[ 1] = 0x62; + data[ 2] = 0x13; + data[ 3] = 0x40; + data[ 4] = 0x18; + data[ 5] = 0x00; + data[ 6] = 0x10; + data[ 7] = 0x00; + data[ 8] = 0x00; + data[ 9] = device->pps_correction; + data[10] = (2000 + utc_time.year) >> 0; + data[11] = (2000 + utc_time.year) >> 8; + data[12] = utc_time.month; + data[13] = utc_time.day; + data[14] = utc_time.hours; + data[15] = utc_time.minutes; + data[16] = utc_time.seconds; + data[17] = 0; + data[18] = nanoseconds >> 0; + data[19] = nanoseconds >> 8; + data[20] = nanoseconds >> 16; + data[21] = nanoseconds >> 24; + data[22] = 0; + data[23] = 0; + data[24] = 0; + data[25] = 0; + data[26] = 0; + data[27] = 0; + data[28] = 0; + data[29] = 0; + + ubx_checksum(device, data); + + ubx_send(device, data); + + device->pps_adjust = 0; // force realign + } + } +} + static void ubx_timeout(gnss_device_t *device) { const uint8_t *data = NULL; @@ -3115,6 +3305,15 @@ static void gnss_send_callback(void) } } +void gnss_pps_callback(void) +{ + gnss_device_t *device = &gnss_device; + + stm32l0_rtc_clock_capture(&device->pps_capture[0]); + + device->pps_sequence[0]++; +} + void gnss_receive(const uint8_t *data, uint32_t count) { gnss_device_t *device = &gnss_device; @@ -3122,8 +3321,13 @@ void gnss_receive(const uint8_t *data, uint32_t count) if (device->wakeup) { - device->busy = 0; device->wakeup = 0; + device->busy = 0; + + if (device->mode == GNSS_MODE_UBLOX) + { + ubx_wakeup(device); + } } while (count > 0) @@ -3511,7 +3715,7 @@ bool gnss_set_pps(unsigned int width) data[31] = 0x00; data[32] = 0x00; data[33] = 0x00; - data[34] = width ? 0x37 : 0x00; + data[34] = width ? 0xb7 : 0x00; data[35] = 0x00; data[36] = 0x00; data[37] = 0x00; @@ -3519,7 +3723,7 @@ bool gnss_set_pps(unsigned int width) ubx_checksum(device, data); table[0] = ubx_cfg_rxm_continuous; - table[1] = ubx_cfg_pm2, + table[1] = ubx_cfg_pm2; table[2] = &data[0]; table[3] = ubx_cfg_save; table[4] = NULL; @@ -3668,7 +3872,7 @@ bool gnss_set_platform(unsigned int platform) ubx_checksum(device, data); table[0] = ubx_cfg_rxm_continuous; - table[1] = ubx_cfg_pm2, + table[1] = ubx_cfg_pm2; table[2] = &data[0]; table[3] = ubx_cfg_save; table[4] = NULL; @@ -3732,7 +3936,7 @@ bool gnss_set_periodic(unsigned int acqTime, unsigned int onTime, unsigned int p data[ 8] = acqTime; data[ 9] = 0x00; data[10] = 0x00; - data[11] = 0x01; + data[11] = 0x1d; data[12] = ((onTime && (updatePeriod > 10000)) ? 0x00 : 0x02); data[13] = 0x00; data[14] = updatePeriod >> 0; @@ -3775,7 +3979,7 @@ bool gnss_set_periodic(unsigned int acqTime, unsigned int onTime, unsigned int p return true; } -bool gnss_sleep(void) +bool gnss_suspend(void) { gnss_device_t *device = &gnss_device; @@ -3795,7 +3999,7 @@ bool gnss_sleep(void) return true; } -bool gnss_wakeup(void) +bool gnss_resume(void) { gnss_device_t *device = &gnss_device; @@ -3811,14 +4015,14 @@ bool gnss_wakeup(void) if (device->callbacks->enable_callback) { (*device->callbacks->enable_callback)(device->context); - - device->busy = 1; - device->wakeup = 1; } else { ubx_table(device, ubx_gnss_wakeup_table); } + + device->busy = 1; + device->wakeup = 1; break; } diff --git a/libraries/LoRaWAN/src/LoRaWAN.cpp b/libraries/LoRaWAN/src/LoRaWAN.cpp index 7a774441..a30e8130 100644 --- a/libraries/LoRaWAN/src/LoRaWAN.cpp +++ b/libraries/LoRaWAN/src/LoRaWAN.cpp @@ -74,21 +74,21 @@ extern LoRaMacParams_t LoRaMacParamsDefaults; #define RTC ((RTC_TypeDef *) RTC_BASE) -#define BKP3R_UPLINK_COUNTER_SHIFT 0 -#define BKP3R_UPLINK_COUNTER_MASK 0x000000ff -#define BKP3R_DOWNLINK_COUNTER_SHIFT 8 -#define BKP3R_DOWNLINK_COUNTER_MASK 0x0000ff00 -#define BKP3R_DATARATE_SHIFT 16 -#define BKP3R_DATARATE_MASK 0x000f0000 -#define BKP3R_TX_POWER_SHIFT 20 -#define BKP3R_TX_POWER_MASK 0x00f00000 -#define BKP3R_REPEAT_SHIFT 24 -#define BKP3R_REPEAT_MASK 0x0f000000 -#define BKP3R_ADR_ENABLE_SHIFT 28 -#define BKP3R_ADR_ENABLE_MASK 0x10000000 -#define BKP3R_UPLINK_COUNTER_PRESENT 0x20000000 -#define BKP3R_DOWNLINK_COUNTER_PRESENT 0x40000000 -#define BKP3R_ADR_PRESENT 0x80000000 +#define BKP2R_UPLINK_COUNTER_SHIFT 0 +#define BKP2R_UPLINK_COUNTER_MASK 0x000000ff +#define BKP2R_DOWNLINK_COUNTER_SHIFT 8 +#define BKP2R_DOWNLINK_COUNTER_MASK 0x0000ff00 +#define BKP2R_DATARATE_SHIFT 16 +#define BKP2R_DATARATE_MASK 0x000f0000 +#define BKP2R_TX_POWER_SHIFT 20 +#define BKP2R_TX_POWER_MASK 0x00f00000 +#define BKP2R_REPEAT_SHIFT 24 +#define BKP2R_REPEAT_MASK 0x0f000000 +#define BKP2R_ADR_ENABLE_SHIFT 28 +#define BKP2R_ADR_ENABLE_MASK 0x10000000 +#define BKP2R_UPLINK_COUNTER_PRESENT 0x20000000 +#define BKP2R_DOWNLINK_COUNTER_PRESENT 0x40000000 +#define BKP2R_ADR_PRESENT 0x80000000 static stm32l0_eeprom_transaction_t EEPROMTransaction; static uint32_t EEPROMSessionCRC32 = 0; @@ -557,27 +557,27 @@ int LoRaWANClass::begin(const struct LoRaWANBand &band) _DutyCycle = _Band->DutyCycle; if (_restoreSession()) { - if (RTC->BKP3R & BKP3R_UPLINK_COUNTER_PRESENT) { - if ((((RTC->BKP3R & BKP3R_UPLINK_COUNTER_MASK) >> BKP3R_UPLINK_COUNTER_SHIFT) ^ _UpLinkCounter) & EEPROM_COUNTER_UPDATE_PERIOD) { + if (RTC->BKP2R & BKP2R_UPLINK_COUNTER_PRESENT) { + if ((((RTC->BKP2R & BKP2R_UPLINK_COUNTER_MASK) >> BKP2R_UPLINK_COUNTER_SHIFT) ^ _UpLinkCounter) & EEPROM_COUNTER_UPDATE_PERIOD) { _UpLinkCounter += EEPROM_COUNTER_UPDATE_PERIOD; } - _UpLinkCounter = (_UpLinkCounter & ~(EEPROM_COUNTER_UPDATE_PERIOD-1)) | ((RTC->BKP3R >> BKP3R_UPLINK_COUNTER_SHIFT) & (EEPROM_COUNTER_UPDATE_PERIOD-1)); + _UpLinkCounter = (_UpLinkCounter & ~(EEPROM_COUNTER_UPDATE_PERIOD-1)) | ((RTC->BKP2R >> BKP2R_UPLINK_COUNTER_SHIFT) & (EEPROM_COUNTER_UPDATE_PERIOD-1)); } else { _UpLinkCounter += (EEPROM_COUNTER_UPDATE_PERIOD << 1); } - if (RTC->BKP3R & BKP3R_DOWNLINK_COUNTER_PRESENT) { - if ((((RTC->BKP3R & BKP3R_DOWNLINK_COUNTER_MASK) >> BKP3R_DOWNLINK_COUNTER_SHIFT) ^ _DownLinkCounter) & EEPROM_COUNTER_UPDATE_PERIOD) { + if (RTC->BKP2R & BKP2R_DOWNLINK_COUNTER_PRESENT) { + if ((((RTC->BKP2R & BKP2R_DOWNLINK_COUNTER_MASK) >> BKP2R_DOWNLINK_COUNTER_SHIFT) ^ _DownLinkCounter) & EEPROM_COUNTER_UPDATE_PERIOD) { _DownLinkCounter += EEPROM_COUNTER_UPDATE_PERIOD; } - _DownLinkCounter = (_DownLinkCounter & ~(EEPROM_COUNTER_UPDATE_PERIOD-1)) | ((RTC->BKP3R >> BKP3R_DOWNLINK_COUNTER_SHIFT) & (EEPROM_COUNTER_UPDATE_PERIOD-1)); + _DownLinkCounter = (_DownLinkCounter & ~(EEPROM_COUNTER_UPDATE_PERIOD-1)) | ((RTC->BKP2R >> BKP2R_DOWNLINK_COUNTER_SHIFT) & (EEPROM_COUNTER_UPDATE_PERIOD-1)); } } else { _session.Activation = LORAWAN_ACTIVATION_NONE; - RTC->BKP3R = 0; + RTC->BKP2R = 0; } LoRaMacInitialization(&LoRaMacPrimitives, &LoRaMacCallbacks, _Band->LoRaMacRegion); @@ -1136,7 +1136,7 @@ int LoRaWANClass::setDevAddr(const char *devAddr) return 0; } - commissioning.DevAddr = (DevAddr[0] << 24) | (DevAddr[1] << 16) | (DevAddr[2] << 8) | (DevAddr[3] << 0); + commissioning.DevAddr = (DevAddr[0] << 24) | (DevAddr[1] << 16) | (DevAddr[2] << 8) | (DevAddr[3] << 0); } return _storeCommissioning(&commissioning); @@ -1270,9 +1270,9 @@ float LoRaWANClass::getTxPower() LoRaWANQueryTxPossible(0, _DataRate, &txInfo); if (_Band->Region == LORAWAN_REGION_US915) { - return 30.0f - 2 * txInfo.TxPower; + return 30.0f - 2 * txInfo.TxPower; } else { - return LoRaMacParams.MaxEirp - 2 * txInfo.TxPower; + return LoRaMacParams.MaxEirp - 2 * txInfo.TxPower; } } @@ -1446,7 +1446,7 @@ int LoRaWANClass::setADR(bool enable) } if (_AdrEnable && !enable) { - _DataRate = LoRaMacParams.ChannelsDatarate; + _DataRate = LoRaMacParams.ChannelsDatarate; } _AdrEnable = enable; @@ -1507,9 +1507,9 @@ int LoRaWANClass::setTxPower(float power) } if (_Band->Region == LORAWAN_REGION_US915) { - txPower = (floorf(30.0f - power) + 1) / 2; + txPower = (floorf(30.0f - power) + 1) / 2; } else { - txPower = (floorf(LoRaMacParams.MaxEirp - power) + 1) / 2; + txPower = (floorf(LoRaMacParams.MaxEirp - power) + 1) / 2; } mibReq.Type = MIB_CHANNELS_TX_POWER; @@ -2115,7 +2115,7 @@ int LoRaWANClass::setDutyCycle(bool enable) } if (!LoRaWAN._Band->DutyCycle) { - return 0; + return 0; } LoRaMacTestSetDutyCycleOn(enable); @@ -2230,24 +2230,24 @@ bool LoRaWANClass::_restoreSession() void LoRaWANClass::_saveADR() { - RTC->BKP3R = ((RTC->BKP3R & ~(BKP3R_DATARATE_MASK | BKP3R_TX_POWER_MASK | BKP3R_REPEAT_MASK | BKP3R_ADR_ENABLE_MASK)) | - ((_AdrEnable ? LoRaMacParams.ChannelsDatarate : _DataRate) << BKP3R_DATARATE_SHIFT) | - (LoRaMacParams.ChannelsTxPower << BKP3R_TX_POWER_SHIFT) | - (LoRaMacParams.ChannelsNbRep << BKP3R_REPEAT_SHIFT) | - (_AdrEnable << BKP3R_ADR_ENABLE_SHIFT) | - BKP3R_ADR_PRESENT); + RTC->BKP2R = ((RTC->BKP2R & ~(BKP2R_DATARATE_MASK | BKP2R_TX_POWER_MASK | BKP2R_REPEAT_MASK | BKP2R_ADR_ENABLE_MASK)) | + ((_AdrEnable ? LoRaMacParams.ChannelsDatarate : _DataRate) << BKP2R_DATARATE_SHIFT) | + (LoRaMacParams.ChannelsTxPower << BKP2R_TX_POWER_SHIFT) | + (LoRaMacParams.ChannelsNbRep << BKP2R_REPEAT_SHIFT) | + (_AdrEnable << BKP2R_ADR_ENABLE_SHIFT) | + BKP2R_ADR_PRESENT); } bool LoRaWANClass::_restoreADR() { MibRequestConfirm_t mibReq; - if (!(RTC->BKP3R & BKP3R_ADR_PRESENT)) { + if (!(RTC->BKP2R & BKP2R_ADR_PRESENT)) { return false; } - _AdrEnable = (RTC->BKP3R & BKP3R_ADR_ENABLE_MASK) >> BKP3R_ADR_ENABLE_SHIFT; - _DataRate = (RTC->BKP3R & BKP3R_DATARATE_MASK) >> BKP3R_DATARATE_SHIFT; + _AdrEnable = (RTC->BKP2R & BKP2R_ADR_ENABLE_MASK) >> BKP2R_ADR_ENABLE_SHIFT; + _DataRate = (RTC->BKP2R & BKP2R_DATARATE_MASK) >> BKP2R_DATARATE_SHIFT; mibReq.Type = MIB_ADR; mibReq.Param.AdrEnable = _AdrEnable; @@ -2262,13 +2262,13 @@ bool LoRaWANClass::_restoreADR() } mibReq.Type = MIB_CHANNELS_TX_POWER; - mibReq.Param.ChannelsTxPower = (RTC->BKP3R & BKP3R_TX_POWER_MASK) >> BKP3R_TX_POWER_SHIFT; + mibReq.Param.ChannelsTxPower = (RTC->BKP2R & BKP2R_TX_POWER_MASK) >> BKP2R_TX_POWER_SHIFT; if (LoRaWANMibSetRequestConfirm(&mibReq) != LORAMAC_STATUS_OK) { return false; } mibReq.Type = MIB_CHANNELS_NB_REP; - mibReq.Param.ChannelNbRep = (RTC->BKP3R & BKP3R_REPEAT_MASK) >> BKP3R_REPEAT_SHIFT; + mibReq.Param.ChannelNbRep = (RTC->BKP2R & BKP2R_REPEAT_MASK) >> BKP2R_REPEAT_SHIFT; if (LoRaWANMibSetRequestConfirm(&mibReq) != LORAMAC_STATUS_OK) { return false; } @@ -2448,9 +2448,9 @@ void LoRaWANClass::_saveDevNonce() void LoRaWANClass::_saveUpLinkCounter() { - RTC->BKP3R = ((RTC->BKP3R & ~BKP3R_UPLINK_COUNTER_MASK) | - ((_UpLinkCounter << BKP3R_UPLINK_COUNTER_SHIFT) & BKP3R_UPLINK_COUNTER_MASK) | - BKP3R_UPLINK_COUNTER_PRESENT); + RTC->BKP2R = ((RTC->BKP2R & ~BKP2R_UPLINK_COUNTER_MASK) | + ((_UpLinkCounter << BKP2R_UPLINK_COUNTER_SHIFT) & BKP2R_UPLINK_COUNTER_MASK) | + BKP2R_UPLINK_COUNTER_PRESENT); if ((EEPROMUpLinkCounter ^ _UpLinkCounter) & ~(EEPROM_COUNTER_UPDATE_PERIOD-1)) { if (EEPROMTransaction.status != STM32L0_EEPROM_STATUS_BUSY) { @@ -2461,9 +2461,9 @@ void LoRaWANClass::_saveUpLinkCounter() void LoRaWANClass::_saveDownLinkCounter() { - RTC->BKP3R = ((RTC->BKP3R & ~BKP3R_DOWNLINK_COUNTER_MASK) | - ((_DownLinkCounter << BKP3R_DOWNLINK_COUNTER_SHIFT) & BKP3R_DOWNLINK_COUNTER_MASK) | - BKP3R_DOWNLINK_COUNTER_PRESENT); + RTC->BKP2R = ((RTC->BKP2R & ~BKP2R_DOWNLINK_COUNTER_MASK) | + ((_DownLinkCounter << BKP2R_DOWNLINK_COUNTER_SHIFT) & BKP2R_DOWNLINK_COUNTER_MASK) | + BKP2R_DOWNLINK_COUNTER_PRESENT); if ((EEPROMDownLinkCounter ^ _DownLinkCounter) & ~(EEPROM_COUNTER_UPDATE_PERIOD-1)) { if (EEPROMTransaction.status != STM32L0_EEPROM_STATUS_BUSY) { @@ -2725,7 +2725,7 @@ bool LoRaWANClass::_send() _tx_active = false; _tx_busy = false; - _ComplianceTestLinkCheck = 0; + _ComplianceTestLinkCheck = 0; return false; } @@ -2755,7 +2755,7 @@ bool LoRaWANClass::_send() if (_ComplianceTestState == 1) { tx_size = 2; - tx_data = &txData[0]; + tx_data = &txData[0]; tx_data[0] = _ComplianceTestCount >> 8; tx_data[1] = _ComplianceTestCount & 0xFF; @@ -2838,7 +2838,7 @@ bool LoRaWANClass::_send() _tx_active = false; _tx_busy = false; - _ComplianceTestLinkCheck = 0; + _ComplianceTestLinkCheck = 0; return false; } @@ -2848,9 +2848,9 @@ bool LoRaWANClass::_send() if (_ComplianceTestRunning) { if (_ComplianceTestLinkCheck) { - _ComplianceTestLinkCheck = 0; + _ComplianceTestLinkCheck = 0; - _tx_active = tx_active; + _tx_active = tx_active; } } @@ -3056,7 +3056,7 @@ void LoRaWANClass::__McpsConfirm( McpsConfirm_t *mcpsConfirm ) } else { - LoRaWAN._saveADR(); + LoRaWAN._saveADR(); if (mcpsConfirm->McpsRequest == MCPS_CONFIRMED) { @@ -3129,7 +3129,7 @@ void LoRaWANClass::__McpsConfirm( McpsConfirm_t *mcpsConfirm ) { LoRaWAN._ComplianceTestRunning = true; - LoRaWAN._tx_active = true; + LoRaWAN._tx_active = true; armv6m_pendsv_enqueue((armv6m_pendsv_routine_t)LoRaWANClass::__McpsSend, NULL, 0); } @@ -3176,10 +3176,10 @@ void LoRaWANClass::__McpsIndication( McpsIndication_t *mcpsIndication ) if (mcpsIndication->ParamsUpdated) { - if (!LoRaWAN._ComplianceTestRunning) - { - LoRaWAN._saveADR(); - } + if (!LoRaWAN._ComplianceTestRunning) + { + LoRaWAN._saveADR(); + } if (LoRaWAN._Save) { @@ -3220,7 +3220,7 @@ void LoRaWANClass::__McpsIndication( McpsIndication_t *mcpsIndication ) { LoRaWAN._ComplianceTestRunning = true; - LoRaWAN._tx_active = true; + LoRaWAN._tx_active = true; armv6m_pendsv_enqueue((armv6m_pendsv_routine_t)LoRaWANClass::__McpsSend, NULL, 0); } @@ -3232,9 +3232,9 @@ void LoRaWANClass::__McpsIndication( McpsIndication_t *mcpsIndication ) switch(LoRaWAN._ComplianceTestState) { case 0: // Check compliance test disable command (ii) LoRaWAN._ComplianceTestRunning = false; - LoRaWAN._ComplianceTestState = 0; + LoRaWAN._ComplianceTestState = 0; - LoRaWAN._restoreADR(); + LoRaWAN._restoreADR(); if (LoRaWAN._Band->DutyCycle) { LoRaMacTestSetDutyCycleOn(LoRaWAN._DutyCycle); @@ -3273,9 +3273,9 @@ void LoRaWANClass::__McpsIndication( McpsIndication_t *mcpsIndication ) case 6: // Disable TestMode and revert back to normal operation (ix) LoRaWAN._ComplianceTestRunning = false; - LoRaWAN._ComplianceTestState = 0; + LoRaWAN._ComplianceTestState = 0; - LoRaWAN._restoreADR(); + LoRaWAN._restoreADR(); if (LoRaWAN._Band->DutyCycle) { LoRaMacTestSetDutyCycleOn(LoRaWAN._DutyCycle); @@ -3305,12 +3305,12 @@ void LoRaWANClass::__McpsIndication( McpsIndication_t *mcpsIndication ) break; } - if (LoRaWAN._ComplianceTestState != 4) { - LoRaWAN._ComplianceTestState = 1; - } + if (LoRaWAN._ComplianceTestState != 4) { + LoRaWAN._ComplianceTestState = 1; + } if (LoRaWAN._ComplianceTestRunning) { - LoRaWAN._tx_active = true; + LoRaWAN._tx_active = true; armv6m_pendsv_enqueue((armv6m_pendsv_routine_t)LoRaWANClass::__McpsSend, NULL, 0); } @@ -3487,11 +3487,11 @@ void LoRaWANClass::__MlmeConfirm( MlmeConfirm_t *mlmeConfirm ) { LoRaWAN._ComplianceTestLinkCheck = 1; - if (LoRaWAN._ComplianceTestRunning) { - if (!LoRaWAN._tx_active) { + if (LoRaWAN._ComplianceTestRunning) { + if (!LoRaWAN._tx_active) { armv6m_pendsv_enqueue((armv6m_pendsv_routine_t)LoRaWANClass::__McpsSend, NULL, 0); } - } + } } else { diff --git a/libraries/RTC/src/RTC.cpp b/libraries/RTC/src/RTC.cpp index 57510ed9..6c1ac6a5 100644 --- a/libraries/RTC/src/RTC.cpp +++ b/libraries/RTC/src/RTC.cpp @@ -37,6 +37,8 @@ RTCClass::RTCClass() { _alarm_enable = false; _alarm_match = 0; + _alarm_year = 0; + _alarm_month = 1; _alarm_day = 1; _alarm_hours = 0; _alarm_minutes = 0; @@ -56,9 +58,9 @@ void RTCClass::enableAlarm(AlarmMatch match) void RTCClass::disableAlarm() { if (_alarm_enable) { - _alarm_enable = false; + _alarm_enable = false; - stm32l0_rtc_alarm_detach(); + stm32l0_rtc_alarm_stop(); } } @@ -80,6 +82,15 @@ void RTCClass::detachInterrupt() * Get Functions */ +uint32_t RTCClass::getSubSeconds() +{ + stm32l0_rtc_calendar_t calendar; + + stm32l0_rtc_get_calendar(&calendar); + + return calendar.subseconds << 17; +} + uint8_t RTCClass::getSeconds() { stm32l0_rtc_calendar_t calendar; @@ -107,6 +118,29 @@ uint8_t RTCClass::getHours() return calendar.hours; } +void RTCClass::getTime(uint8_t &hours, uint8_t &minutes, uint8_t &seconds) +{ + stm32l0_rtc_calendar_t calendar; + + stm32l0_rtc_get_calendar(&calendar); + + hours = calendar.hours; + minutes = calendar.minutes; + seconds = calendar.seconds; +} + +void RTCClass::getTime(uint8_t &hours, uint8_t &minutes, uint8_t &seconds, uint32_t &subSeconds) +{ + stm32l0_rtc_calendar_t calendar; + + stm32l0_rtc_get_calendar(&calendar); + + hours = calendar.hours; + minutes = calendar.minutes; + seconds = calendar.seconds; + subSeconds = calendar.subseconds << 17; +} + uint8_t RTCClass::getDay() { stm32l0_rtc_calendar_t calendar; @@ -134,6 +168,17 @@ uint8_t RTCClass::getYear() return calendar.year; } +void RTCClass::getDate(uint8_t &day, uint8_t &month, uint8_t &year) +{ + stm32l0_rtc_calendar_t calendar; + + stm32l0_rtc_get_calendar(&calendar); + + day = calendar.day; + month = calendar.month; + year = calendar.year; +} + uint8_t RTCClass::getAlarmSeconds() { return _alarm_seconds; @@ -149,11 +194,35 @@ uint8_t RTCClass::getAlarmHours() return _alarm_hours; } +void RTCClass::getAlarmTime(uint8_t &hours, uint8_t &minutes, uint8_t &seconds) +{ + hours = _alarm_hours; + minutes = _alarm_minutes; + seconds = _alarm_seconds; +} + uint8_t RTCClass::getAlarmDay() { return _alarm_day; } +uint8_t RTCClass::getAlarmMonth() +{ + return _alarm_month; +} + +uint8_t RTCClass::getAlarmYear() +{ + return _alarm_year; +} + +void RTCClass::getAlarmDate(uint8_t &day, uint8_t &month, uint8_t &year) +{ + day = _alarm_day; + month = _alarm_month; + year = _alarm_year; +} + /* * Set Functions */ @@ -234,20 +303,6 @@ void RTCClass::setDate(uint8_t day, uint8_t month, uint8_t year) stm32l0_rtc_set_calendar((STM32L0_RTC_CALENDAR_MASK_DAY | STM32L0_RTC_CALENDAR_MASK_MONTH | STM32L0_RTC_CALENDAR_MASK_YEAR), &calendar); } -void RTCClass::setTimeDate(uint8_t hours, uint8_t minutes, uint8_t seconds, uint8_t day, uint8_t month, uint8_t year) -{ - stm32l0_rtc_calendar_t calendar; - - calendar.hours = hours; - calendar.minutes = minutes; - calendar.seconds = seconds; - calendar.day = day; - calendar.month = month; - calendar.year = year; - - stm32l0_rtc_set_calendar((STM32L0_RTC_CALENDAR_MASK_SECONDS | STM32L0_RTC_CALENDAR_MASK_MINUTES | STM32L0_RTC_CALENDAR_MASK_HOURS | STM32L0_RTC_CALENDAR_MASK_DAY | STM32L0_RTC_CALENDAR_MASK_MONTH | STM32L0_RTC_CALENDAR_MASK_YEAR), &calendar); -} - void RTCClass::setAlarmSeconds(uint8_t seconds) { _alarm_seconds = seconds; @@ -285,6 +340,29 @@ void RTCClass::setAlarmDay(uint8_t day) SyncAlarm(); } +void RTCClass::setAlarmMonth(uint8_t month) +{ + _alarm_month = month; + + SyncAlarm(); +} + +void RTCClass::setAlarmYear(uint8_t year) +{ + _alarm_year = year; + + SyncAlarm(); +} + +void RTCClass::setAlarmDate(uint8_t day, uint8_t month, uint8_t year) +{ + _alarm_day = day; + _alarm_month = month; + _alarm_year = year; + + SyncAlarm(); +} + uint32_t RTCClass::getEpoch() { stm32l0_rtc_calendar_t calendar; @@ -311,70 +389,166 @@ uint32_t RTCClass::getY2kEpoch() return seconds; } -void RTCClass::setEpoch(uint32_t time) +void RTCClass::setEpoch(uint32_t ts) { stm32l0_rtc_calendar_t calendar; - if (time < EPOCH2K_OFFSET) { - return; + if (ts < EPOCH2K_OFFSET) { + return; } - stm32l0_rtc_time_to_calendar(time - EPOCH2K_OFFSET, 0, &calendar); + stm32l0_rtc_time_to_calendar(ts - EPOCH2K_OFFSET, 0, &calendar); stm32l0_rtc_set_calendar((STM32L0_RTC_CALENDAR_MASK_SECONDS | STM32L0_RTC_CALENDAR_MASK_MINUTES | STM32L0_RTC_CALENDAR_MASK_HOURS | STM32L0_RTC_CALENDAR_MASK_DAY | STM32L0_RTC_CALENDAR_MASK_MONTH | STM32L0_RTC_CALENDAR_MASK_YEAR), &calendar); } -void RTCClass::setY2kEpoch(uint32_t time) +void RTCClass::setY2kEpoch(uint32_t ts) { stm32l0_rtc_calendar_t calendar; - stm32l0_rtc_time_to_calendar(time, 0, &calendar); + stm32l0_rtc_time_to_calendar(ts, 0, &calendar); stm32l0_rtc_set_calendar((STM32L0_RTC_CALENDAR_MASK_SECONDS | STM32L0_RTC_CALENDAR_MASK_MINUTES | STM32L0_RTC_CALENDAR_MASK_HOURS | STM32L0_RTC_CALENDAR_MASK_DAY | STM32L0_RTC_CALENDAR_MASK_MONTH | STM32L0_RTC_CALENDAR_MASK_YEAR), &calendar); } - -uint16_t RTCClass::getSubSeconds() + +void RTCClass::setAlarmEpoch(uint32_t ts) { - return stm32l0_rtc_get_subseconds(); -} + stm32l0_rtc_calendar_t calendar; -void RTCClass::adjustSubSeconds(int32_t delta) -{ - stm32l0_rtc_adjust_subseconds(delta); -} + if (ts < EPOCH2K_OFFSET) { + return; + } -int32_t RTCClass::getCalibration() -{ - return stm32l0_rtc_get_calibration(); -} + stm32l0_rtc_time_to_calendar(ts - EPOCH2K_OFFSET, 0, &calendar); -void RTCClass::setCalibration(int32_t calibration) -{ - stm32l0_rtc_set_calibration(calibration); + _alarm_year = calendar.year; + _alarm_month = calendar.month; + _alarm_day = calendar.day; + _alarm_hours = calendar.hours; + _alarm_minutes = calendar.minutes; + _alarm_seconds = calendar.seconds; + + SyncAlarm(); } - + void RTCClass::SyncAlarm() { - uint32_t match; - stm32l0_rtc_alarm_t alarm; + stm32l0_rtc_calendar_t calendar; if (_alarm_enable) { - alarm.day = _alarm_day; - alarm.hours = _alarm_hours; - alarm.minutes = _alarm_minutes; - alarm.seconds = _alarm_seconds; - - match = (_alarm_match & (STM32L0_RTC_ALARM_MATCH_SECONDS | STM32L0_RTC_ALARM_MATCH_MINUTES | STM32L0_RTC_ALARM_MATCH_HOURS | STM32L0_RTC_ALARM_MATCH_DAY)); + _alarm_calendar.year = _alarm_year; + _alarm_calendar.month = _alarm_month; + _alarm_calendar.day = _alarm_day; + _alarm_calendar.hours = _alarm_hours; + _alarm_calendar.minutes = _alarm_minutes; + _alarm_calendar.seconds = _alarm_seconds; + _alarm_calendar.subseconds = 0; + + if (_alarm_match != MATCH_YYMMDDHHMMSS) + { + stm32l0_rtc_get_calendar(&calendar); + + switch (_alarm_match) { + case MATCH_ANY: // Every Second + _alarm_calendar.year = calendar.year; + _alarm_calendar.month = calendar.month; + _alarm_calendar.day = calendar.day; + _alarm_calendar.hours = calendar.hours; + _alarm_calendar.minutes = calendar.minutes; + _alarm_calendar.seconds = calendar.seconds; + break; + case MATCH_SS: // Every Minute + _alarm_calendar.year = calendar.year; + _alarm_calendar.month = calendar.month; + _alarm_calendar.day = calendar.day; + _alarm_calendar.hours = calendar.hours; + _alarm_calendar.minutes = calendar.minutes; + break; + case MATCH_MMSS: // Every Hour + _alarm_calendar.year = calendar.year; + _alarm_calendar.month = calendar.month; + _alarm_calendar.day = calendar.day; + _alarm_calendar.hours = calendar.hours; + break; + case MATCH_HHMMSS: // Every Day + _alarm_calendar.year = calendar.year; + _alarm_calendar.month = calendar.month; + _alarm_calendar.day = calendar.day; + break; + case MATCH_DHHMMSS: // Every Month + _alarm_calendar.year = calendar.year; + _alarm_calendar.month = calendar.month; + break; + case MATCH_MMDDHHMMSS: // Every Year + _alarm_calendar.year = calendar.year; + break; + default: + break; + } + + while (!stm32l0_rtc_alarm_start(&_alarm_calendar, (stm32l0_rtc_callback_t)_alarmCallback, (void*)this)) + { + AdvanceAlarm(); + } + } + else + { + stm32l0_rtc_alarm_start(&_alarm_calendar, (stm32l0_rtc_callback_t)_alarmCallback, (void*)this); + } + } +} - stm32l0_rtc_alarm_attach(match, &alarm, (stm32l0_rtc_callback_t)_alarmCallback, (void*)this); +void RTCClass::AdvanceAlarm() +{ + static const uint16_t _alarm_days_after_month[2][12] = { + { 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365 }, + { 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335, 366 }, + }; + + switch (_alarm_match) { + case MATCH_ANY: // Every Second + stm32l0_rtc_calendar_offset(&_alarm_calendar, 1, 0, &_alarm_calendar); + break; + case MATCH_SS: // Every Minute + stm32l0_rtc_calendar_offset(&_alarm_calendar, 60, 0, &_alarm_calendar); + break; + case MATCH_MMSS: // Every Hour + stm32l0_rtc_calendar_offset(&_alarm_calendar, 3600, 0, &_alarm_calendar); + break; + case MATCH_HHMMSS: // Every Day + stm32l0_rtc_calendar_offset(&_alarm_calendar, 86400, 0, &_alarm_calendar); + break; + case MATCH_DHHMMSS: // Every Month + stm32l0_rtc_calendar_offset(&_alarm_calendar, _alarm_days_after_month[(_alarm_calendar.year & 3) ? 0 : 1][_alarm_calendar.month -1] * 86400, 0, &_alarm_calendar); + break; + case MATCH_MMDDHHMMSS: // Every Year + stm32l0_rtc_calendar_offset(&_alarm_calendar, ((_alarm_calendar.year & 3) ? 31536000 : 31633400), 0, &_alarm_calendar); + break; + default: + break; } } void RTCClass::_alarmCallback(class RTCClass *self) { + + if (self->_alarm_match == MATCH_YYMMDDHHMMSS) + { + // Once, on a specific date and a specific time + stm32l0_rtc_alarm_stop(); + } + else + { + do + { + self->AdvanceAlarm(); + } + while (!stm32l0_rtc_alarm_start(&self->_alarm_calendar, (stm32l0_rtc_callback_t)_alarmCallback, (void*)self)); + } + if (self->_alarm_callback) { - (*self->_alarm_callback)(); + (*self->_alarm_callback)(); } } diff --git a/libraries/RTC/src/RTC.h b/libraries/RTC/src/RTC.h index 319a539b..a74dcaed 100644 --- a/libraries/RTC/src/RTC.h +++ b/libraries/RTC/src/RTC.h @@ -30,14 +30,18 @@ #define _RTC_H #include "Arduino.h" +#include "stm32l0_rtc.h" class RTCClass { public: - enum AlarmMatch: uint32_t { - MATCH_ANY = 0, // Every Second - MATCH_SS = 1, // Every Minute - MATCH_MMSS = 3, // Every Hour - MATCH_HHMMSS = 7, // Every Day + enum AlarmMatch: uint8_t { + MATCH_ANY = 0, // Every Second + MATCH_SS = 1, // Every Minute + MATCH_MMSS = 2, // Every Hour + MATCH_HHMMSS = 3, // Every Day + MATCH_DHHMMSS = 4, // Every Month + MATCH_MMDDHHMMSS = 5, // Every Year + MATCH_YYMMDDHHMMSS = 6, // Once, on a specific date and a specific time }; RTCClass(); @@ -49,19 +53,28 @@ class RTCClass { void detachInterrupt(); // Get Functions + uint32_t getSubSeconds(); uint8_t getSeconds(); uint8_t getMinutes(); uint8_t getHours(); + void getTime(uint8_t &hours, uint8_t &minutes, uint8_t &seconds); + void getTime(uint8_t &hours, uint8_t &minutes, uint8_t &seconds, uint32_t &subSeconds); uint8_t getDay(); uint8_t getMonth(); uint8_t getYear(); + void getDate(uint8_t &day, uint8_t &month, uint8_t &year); uint8_t getAlarmSeconds(); uint8_t getAlarmMinutes(); uint8_t getAlarmHours(); + void getAlarmTime(uint8_t &hours, uint8_t &minutes, uint8_t &seconds); uint8_t getAlarmDay(); + uint8_t getAlarmMonth(); + uint8_t getAlarmYear(); + void getAlarmDate(uint8_t &day, uint8_t &month, uint8_t &year); + // Set Functions void setSeconds(uint8_t seconds); @@ -74,33 +87,31 @@ class RTCClass { void setYear(uint8_t year); void setDate(uint8_t day, uint8_t month, uint8_t year); - void setTimeDate(uint8_t hours, uint8_t minutes, uint8_t seconds, uint8_t day, uint8_t month, uint8_t year); - void setAlarmSeconds(uint8_t seconds); void setAlarmMinutes(uint8_t minutes); void setAlarmHours(uint8_t hours); void setAlarmTime(uint8_t hours, uint8_t minutes, uint8_t seconds); void setAlarmDay(uint8_t day); + void setAlarmMonth(uint8_t month); + void setAlarmYear(uint8_t year); + void setAlarmDate(uint8_t day, uint8_t month, uint8_t year); // Epoch Functions uint32_t getEpoch(); uint32_t getY2kEpoch(); - void setEpoch(uint32_t time); - void setY2kEpoch(uint32_t time); + void setEpoch(uint32_t ts); + void setY2kEpoch(uint32_t ts); + void setAlarmEpoch(uint32_t ts); - // SubSecond Functions [-32767..32768] - uint16_t getSubSeconds(); - void adjustSubSeconds(int32_t delta); - - // Calibration Functions [-511..512] - int32_t getCalibration(); - void setCalibration(int32_t calibration); + bool isConfigured() { return true; } private: uint8_t _alarm_enable; uint8_t _alarm_wakeup; uint8_t _alarm_match; + uint8_t _alarm_year; + uint8_t _alarm_month; uint8_t _alarm_day; uint8_t _alarm_hours; uint8_t _alarm_minutes; @@ -108,7 +119,10 @@ class RTCClass { void (*_alarm_callback)(void); + stm32l0_rtc_calendar_t _alarm_calendar; + void SyncAlarm(); + void AdvanceAlarm(); static void _alarmCallback(class RTCClass *self); }; diff --git a/libraries/TimerMillis/src/TimerMillis.cpp b/libraries/TimerMillis/src/TimerMillis.cpp index b926d432..7acaf44f 100644 --- a/libraries/TimerMillis/src/TimerMillis.cpp +++ b/libraries/TimerMillis/src/TimerMillis.cpp @@ -71,7 +71,7 @@ int TimerMillis::start(Callback callback, uint32_t delay, uint32_t period) _callback = callback; - stm32l0_rtc_timer_reference(&seconds, &subseconds); + stm32l0_rtc_get_time(&seconds, &subseconds); stm32l0_rtc_millis_to_time(delay, &_seconds, &_subseconds); stm32l0_rtc_time_offset(_seconds, _subseconds, seconds, subseconds, &_seconds, &_subseconds); @@ -108,7 +108,7 @@ int TimerMillis::restart(uint32_t delay, uint32_t period) stm32l0_rtc_timer_stop(_timer); - stm32l0_rtc_timer_reference(&seconds, &subseconds); + stm32l0_rtc_get_time(&seconds, &subseconds); stm32l0_rtc_millis_to_time(delay, &_seconds, &_subseconds); stm32l0_rtc_time_offset(_seconds, _subseconds, seconds, subseconds, &_seconds, &_subseconds); diff --git a/system/STM32L0xx/Include/armv6m_systick.h b/system/STM32L0xx/Include/armv6m_systick.h index c839bd7b..cf3aac2e 100644 --- a/system/STM32L0xx/Include/armv6m_systick.h +++ b/system/STM32L0xx/Include/armv6m_systick.h @@ -36,7 +36,6 @@ extern "C" { extern void armv6m_systick_initialize(void); extern void armv6m_systick_enable(void); extern void armv6m_systick_disable(void); -extern void armv6m_systick_sync(uint32_t seconds, uint16_t subseconds); extern uint32_t armv6m_systick_micros(void); extern uint32_t armv6m_systick_millis(void); extern void armv6m_systick_delay(uint32_t delay); diff --git a/system/STM32L0xx/Include/stm32l0_rtc.h b/system/STM32L0xx/Include/stm32l0_rtc.h index 6fdaac25..74273bf9 100644 --- a/system/STM32L0xx/Include/stm32l0_rtc.h +++ b/system/STM32L0xx/Include/stm32l0_rtc.h @@ -43,6 +43,7 @@ extern "C" { #define STM32L0_RTC_CALENDAR_MASK_YEAR 0x00000020 #define STM32L0_RTC_CALENDAR_MASK_TIME 0x00000007 #define STM32L0_RTC_CALENDAR_MASK_DATE 0x00000038 +#define STM32L0_RTC_CALENDAR_MASK_ALL 0x0000007f typedef struct __attribute__((aligned(4))) _stm32l0_rtc_calendar_t { uint16_t subseconds; @@ -54,18 +55,6 @@ typedef struct __attribute__((aligned(4))) _stm32l0_rtc_calendar_t { uint8_t year; } stm32l0_rtc_calendar_t; -#define STM32L0_RTC_ALARM_MATCH_SECONDS 0x00000001 -#define STM32L0_RTC_ALARM_MATCH_MINUTES 0x00000002 -#define STM32L0_RTC_ALARM_MATCH_HOURS 0x00000004 -#define STM32L0_RTC_ALARM_MATCH_DAY 0x00000008 - -typedef struct __attribute__((aligned(4))) _stm32l0_rtc_alarm_t { - uint8_t seconds; - uint8_t minutes; - uint8_t hours; - uint8_t day; -} stm32l0_rtc_alarm_t; - typedef struct _stm32l0_rtc_timer_t stm32l0_rtc_timer_t; typedef void (*stm32l0_rtc_callback_t)(void *context); @@ -84,17 +73,22 @@ struct _stm32l0_rtc_timer_t { extern void __stm32l0_rtc_initialize(void); extern void stm32l0_rtc_configure(unsigned int priority); +extern void stm32l0_rtc_clock_capture(uint32_t *p_data); +extern void stm32l0_rtc_clock_convert(uint32_t *data, uint32_t *p_seconds, uint16_t *p_subseconds); +extern void stm32l0_rtc_clock_time(uint32_t *p_seconds, uint16_t *p_subseconds); +extern void stm32l0_rtc_clock_calendar(stm32l0_rtc_calendar_t *p_calendar); +extern void stm32l0_rtc_get_time(uint32_t *p_seconds, uint16_t *p_subseconds); extern void stm32l0_rtc_get_calendar(stm32l0_rtc_calendar_t *p_calendar); extern void stm32l0_rtc_set_calendar(unsigned int mask, const stm32l0_rtc_calendar_t *calendar); extern uint32_t stm32l0_rtc_get_subseconds(void); -extern void stm32l0_rtc_adjust_subseconds(int32_t delta); +extern int32_t stm32l0_rtc_get_adjust(void); +extern void stm32l0_rtc_set_adjust(int32_t adjust); extern int32_t stm32l0_rtc_get_calibration(void); extern void stm32l0_rtc_set_calibration(int32_t calibration); -extern void stm32l0_rtc_alarm_attach(unsigned int match, const stm32l0_rtc_alarm_t *alarm, stm32l0_rtc_callback_t callback, void *context); -extern void stm32l0_rtc_alarm_detach(void); +extern bool stm32l0_rtc_alarm_start(const stm32l0_rtc_calendar_t *alarm, stm32l0_rtc_callback_t callback, void *context); +extern void stm32l0_rtc_alarm_stop(void); -extern void stm32l0_rtc_timer_reference(uint32_t *p_seconds, uint16_t *p_subseconds); extern void stm32l0_rtc_timer_create(stm32l0_rtc_timer_t *timer, stm32l0_rtc_timer_callback_t callback, void *context); extern bool stm32l0_rtc_timer_destroy(stm32l0_rtc_timer_t *timer); extern bool stm32l0_rtc_timer_start(stm32l0_rtc_timer_t *timer, uint32_t seconds, uint16_t subseconds, bool absolute); diff --git a/system/STM32L0xx/Lib/libstm32l052xx.a b/system/STM32L0xx/Lib/libstm32l052xx.a index 452729012ade2aa15996108fb507be8d10d76cef..49c9967c0617c1816605e19df4f0b6e473a55ca8 100644 GIT binary patch delta 85325 zcmc${2Vhji+CDyWwkMlpH_0ZOWRq+f2}uZPgdmVkq=a5XYC_R~^dew80Z{=_frx_= zMN|+G6%br2Vnfk;6%f3LfL{}<*wZ<}}eoH=t!wqL*C z#v}7r#p^}+rA6I}3yb{zd_Vo#AN~Hq!u+BVDX$M<%(RrT@wff^;ejf~f}!owDp&?*vp)*@ zA1VH<-0I3>|BImi>&UMaGVA|Qu&uh5*;eUv`0oe%;0f$c1^v$&wzG3YJ;?rBLH{R5 zhkjy?|L=nSUr8+FcQI!$d^CzV5yHm&58<{IEbKoE`tL{l@GBPfJ0ZNoBkT{upaCrW-wyhJ z66t@4^Y?Kq{9lBK*jm;WbYkY6`2Q{F|8C;0^l|Ke3==yrSNoukVy@p0`adgPpTk`3 z!}lf3h2VDni%<~G-2YL~|I>*7dA#VpUojch-o>JIIv{v@4`80 zd43aOk{@J$Ht5oD`e_#P+i>ST7V~Gq-$t;QKM1i}B>NwNey%~U?^x`=6W%Ffv0v=` zr{MKI&b)a$|3uLLjM0DBCN49C#fRKx1U*O)mabs&*S`9nhmR2V-wgV{8{vOrpU|>` z{U+$Y75pjQ$G>C$>#$`j^KH@T@IQydu+LdrIR9go_^-mS87%S7hEadk@ZYyoDp=S*gE=S?pvoR&X+&b*1^m1gFQODE5n z_dA+-Q>On;gyxh!G4_im&l^u_;V+D$;&-3G&ukRBlPFUg+#T|ul*5<^bBL>o<5HXTK29;-8fOu2 z^EkV3bcrh!5A<`{MUP*+(NghnNZ((aCf2!gv-^UKX8#3_=8_A3u^E@w1%iKIi?tNy z7nb_PGn*}$y4}p^XDODD#at|m%?E9W&AbLQcXP%rN1&f(wuJ*sX3LZr^O(l1lcCVK zJ)c0c%$8sqLSVL3ORyzSJiA3kx7#`yUUrc#j@!!!xmE|DlrqAjLQUZb;mu|H6GGqJH@4wHwr_~WZ)&YUKmnd|n58C}Cd#r=W!5b;qG?+K@)kIJjQb+u0pzb1OrgxfvXmH?Wg*xb#KAG{w6JAX#`eM{0>LR7 ztR|ls8H^SwS$wW|yGK~KxGFU!N+k9S>m&x$cwHAe8JjqL!NP*eE^C-@S*Hmz8|F;P zo5IR-nc$2K4C}&wN^KL7l{r7Z zONp30l4tVzz^x*R*tH-^z4nuR`UQH!^Ytd z{v8Y4v6O#Qn6f3Fv7DQcFy|rE$@UXJIZ5*K&qJpZTLQcjA0ple@X>spD14L$_!jZ; zqdbQviI~TD4|gAAwbPT4h%!3#uhES44NQEDmvHx`iEx#d4Ee*($D$Y$V(a6)Mtd|- zoB}4i33WF_m5o|EasC{}PdQ(P-A{>P;1fJM-iusx^TPnHnPCtaMh11F`3asAIUaf= z-OMmb_wgig0P(VukYwr94va}+9Ed_l%0{9`*EE5v1y{2Y#6=?gNxqz4EgpQ5Cq=#h zvEgp9boY6(IPoOUt&Bq!I_*VO^J~JW-lq`%h6euHFsknW@v;W53!@tRg7`wRUltYy zGa>pt#eLeBDPqb~{C(arFklbw*`e+(m_CSLVuPB^+d(`TWcGk~ImrA4#L*yg48#XP z=3@|)A2eW6_-{*x>USC z?AvJ~rV8vmVsaIXhKbz-b;43jwwYo?HI!q-Ca`>^_*P1@L~RYEE5+Ix7(L%nd;nJa zw4*5L1#zyprWeJ{5pNJ%EHY}rzMm^Dt%cP$xnduXn}z3mxQrH)3DU)GfcAVRVeJj2 zPYmxZrJD$f#kT}CfnI&I4I#+e--l{Ld0)|On3iVwbQEW+L<5l*-ON~p;2Athv<%Z+ z+7-HZaG2J?vUx3LGI6rd86`d?`L-r;8ghP-$QZ6=YGbYu1BPoIwB4Jl^Y4&sRZ{ZykFr% z3LjPYq{0^z?iZD_<6`v_ihWn%M+!ev_`SlP6>2y)QTeP2T?(TWCMZl+*im68g~bX> z4Gdv@m0*B)hVnB(u@@<%Q>C_$vC9-LR(Op

VyzyA*C#_$cA!IEN^FPT`9R>0GN_ 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 delta 102359 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

S81C1#xJz}D(6or=bD^bI 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 diff --git a/system/STM32L0xx/Lib/libstm32l072xx.a b/system/STM32L0xx/Lib/libstm32l072xx.a index 9167f637009a9baab6c4d59b3e430dd6d0cff26d..8bdf417f2be07154895abd4bc8f6f7bfdc4b1ac5 100644 GIT binary patch delta 102970 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

_dU|(FEHSu*u`A46t3= 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%0Dt$xdrdYaG|ucIN)xH?-{$%y@cJ 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 delta 98262 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 diff --git a/system/STM32L0xx/Lib/libstm32l082xx.a b/system/STM32L0xx/Lib/libstm32l082xx.a index 3aa9290512ebcc17ed4f995884924365e23cba7b..e4cfa8af73443aa0db1e651f2d02dca562974b42 100644 GIT binary patch delta 155909 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 QnhHvAv;K8d6P5J;0H=89a{vGU delta 151065 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¨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 diff --git a/system/STM32L0xx/Source/LoRa/Boards/cmwx1zzabz-board.c b/system/STM32L0xx/Source/LoRa/Boards/cmwx1zzabz-board.c index 5a2cb03b..a3bf478f 100644 --- a/system/STM32L0xx/Source/LoRa/Boards/cmwx1zzabz-board.c +++ b/system/STM32L0xx/Source/LoRa/Boards/cmwx1zzabz-board.c @@ -24,6 +24,9 @@ #include "utilities.h" #include "radio.h" #include "sx1276-board.h" +#include "stm32l0_rtc.h" + +#if defined(STM32L072xx) || defined(STM32L082xx) /*! * Radio driver structure initialization @@ -75,8 +78,8 @@ const struct Radio_s Radio = #define RADIO_NSS STM32L0_GPIO_PIN_PA15_SPI1_NSS #define RADIO_DIO_0 STM32L0_GPIO_PIN_PB4 -#define RADIO_DIO_1 STM32L0_GPIO_PIN_PB1 -#define RADIO_DIO_2 STM32L0_GPIO_PIN_PB0 +#define RADIO_DIO_1 STM32L0_GPIO_PIN_PB1_TIM3_CH4 +#define RADIO_DIO_2 STM32L0_GPIO_PIN_PB0_TIM3_CH3 //#define RADIO_DIO_3 STM32L0_GPIO_PIN_PC13 //#define RADIO_TCXO_VCC STM32L0_GPIO_PIN_PH1 @@ -235,11 +238,11 @@ void SX1276SetRfTxPower( int8_t power ) if ( power > 15 ) { - paConfig = RF_PACONFIG_PASELECT_PABOOST; + paConfig = RF_PACONFIG_PASELECT_PABOOST; } else { - paConfig = RF_PACONFIG_PASELECT_RFO; + paConfig = RF_PACONFIG_PASELECT_RFO; } paDac = RF_PADAC_20DBM_OFF; @@ -274,24 +277,24 @@ void SX1276SetRfTxPower( int8_t power ) } else { - if( power > 0 ) - { - if( power > 15 ) - { - power = 15; - } + if( power > 0 ) + { + if( power > 15 ) + { + power = 15; + } paConfig = ( paConfig & RF_PACONFIG_MAX_POWER_MASK & RF_PACONFIG_OUTPUTPOWER_MASK ) | ( 7 << 4 ) | ( power - 0 ); - } - else - { - if( power < -4 ) - { - power = -4; - } + } + else + { + if( power < -4 ) + { + power = -4; + } paConfig = ( paConfig & RF_PACONFIG_MAX_POWER_MASK & RF_PACONFIG_OUTPUTPOWER_MASK ) | ( 0 << 4 ) | ( power + 4 ); - } + } } SX1276Write( REG_PACONFIG, paConfig ); @@ -320,6 +323,10 @@ uint32_t SX1276GetBoardTcxoWakeupTime( void ) void CMWX1ZZABZ_Initialize( uint8_t pin_tcxo, uint16_t pin_stsafe ) { + uint32_t tim3_start, tim3_end, tim3_count, tim3_capture, tim3_ccr4; + uint32_t tim21_start, tim21_end, tim21_count, tim21_capture, tim21_ccr1; + uint32_t datarate, primask; + RADIO_TCXO_VCC = pin_tcxo; stm32l0_gpio_pin_configure(RADIO_NSS, (STM32L0_GPIO_PARK_HIZ | STM32L0_GPIO_PUPD_NONE | STM32L0_GPIO_OSPEED_HIGH | STM32L0_GPIO_OTYPE_PUSHPULL | STM32L0_GPIO_MODE_OUTPUT)); @@ -331,4 +338,165 @@ void CMWX1ZZABZ_Initialize( uint8_t pin_tcxo, uint16_t pin_stsafe ) stm32l0_spi_enable(&SX1276.RadioSpi); SX1276Reset( ); + + if (RADIO_TCXO_VCC != STM32L0_GPIO_PIN_NONE) + { + SX1276SetBoardTcxo( true ); + + SX1276Delay( BOARD_TCXO_WAKEUP_TIME ); + } + + datarate = ( 16 * XTAL_FREQ ) / 2048; + SX1276Write( REG_BITRATEMSB, ( uint8_t )( datarate >> 12 ) ); + SX1276Write( REG_BITRATELSB, ( uint8_t )( datarate >> 4 ) ); + SX1276Write( REG_BITRATEFRAC, ( uint8_t )( datarate >> 0 ) ); + + SX1276Write( REG_PACONFIG, 0x00 ); + SX1276Write( REG_PACKETCONFIG2, ( SX1276Read( REG_PACKETCONFIG2 ) & RF_PACKETCONFIG2_DATAMODE_MASK ) ); + SX1276Write( REG_OPMODE, ( SX1276Read( REG_OPMODE ) & RF_OPMODE_MASK ) | RF_OPMODE_TRANSMITTER ); + + // Wait 25 ms + SX1276Delay( 25 ); + + stm32l0_gpio_pin_configure(RADIO_DIO_1, (STM32L0_GPIO_PARK_NONE | STM32L0_GPIO_PUPD_PULLDOWN | STM32L0_GPIO_OSPEED_HIGH | STM32L0_GPIO_OTYPE_PUSHPULL | STM32L0_GPIO_MODE_ALTERNATE)); + + RCC->APB1ENR |= RCC_APB1ENR_TIM3EN; + RCC->APB1ENR; + + TIM3->CR1 = TIM_CR1_URS; + TIM3->CR2 = 0; + TIM3->DIER = 0; + TIM3->PSC = 0; + TIM3->ARR = 0xffff; + TIM3->EGR = TIM_EGR_UG; + + TIM3->CCER = 0; + TIM3->CCMR2 = TIM_CCMR2_CC4S_0 | TIM_CCMR2_IC4F_0; + TIM3->CCER = TIM_CCER_CC4E; + + tim3_start = 0; + tim3_end = 0; + tim3_capture = 0; + tim3_count = 0; + + RCC->APB2ENR |= RCC_APB2ENR_TIM21EN; + RCC->APB2ENR; + + TIM21->CR1 = TIM_CR1_URS; + TIM21->CR2 = 0; + TIM21->DIER = 0; + TIM21->PSC = 0; + TIM21->ARR = 0xffff; + TIM21->OR = TIM21_OR_TI1_RMP_2; /* Select LSE as TI1 */ + TIM21->EGR = TIM_EGR_UG; + + TIM21->CCER = 0; + TIM21->CCMR1 = TIM_CCMR1_CC1S_0 | TIM_CCMR1_IC1F_0 | TIM_CCMR1_IC1PSC_1 | TIM_CCMR1_IC1PSC_0; /* Count every 8th pulse */ + TIM21->CCER = TIM_CCER_CC1E; + + tim21_start = 0; + tim21_end = 0; + tim21_capture = 0; + tim21_count = 0; + + primask = __get_PRIMASK(); + + __disable_irq(); + + TIM3->CR1 |= TIM_CR1_CEN; + TIM3->SR = 0; + + TIM21->CR1 |= TIM_CR1_CEN; + TIM21->SR = 0; + + do + { + if (TIM3->SR & TIM_SR_CC4IF) + { + TIM3->SR = ~TIM_SR_CC4IF; + + tim3_ccr4 = TIM3->CCR4 & 0xffff; + + if (tim3_ccr4 < (tim3_capture & 0x0000ffff)) + { + tim3_capture = ((tim3_capture + 0x00010000) & 0xffff0000) | tim3_ccr4; + } + else + { + tim3_capture = (tim3_capture & 0xffff0000) | tim3_ccr4; + } + + if (tim3_count == 0) + { + tim3_start = tim3_capture; + } + + if (tim3_count <= 256) + { + tim3_end = tim3_capture; + tim3_count++; + } + } + + if (TIM21->SR & TIM_SR_CC1IF) + { + TIM21->SR = ~TIM_SR_CC1IF; + + tim21_ccr1 = TIM21->CCR1 & 0xffff; + + if (tim21_ccr1 < (tim21_capture & 0x0000ffff)) + { + tim21_capture = ((tim21_capture + 0x00010000) & 0xffff0000) | tim21_ccr1; + } + else + { + tim21_capture = (tim21_capture & 0xffff0000) | tim21_ccr1; + } + + if (tim21_count == 0) + { + tim21_start = tim21_capture; + } + + if (tim21_count <= 512) + { + tim21_end = tim21_capture; + tim21_count++; + } + } + } + while ((tim3_count <= 256) || (tim21_count <= 512)); + + TIM3->CR1 = 0; + TIM21->CR1 = 0; + + __set_PRIMASK(primask); + + stm32l0_gpio_pin_configure(RADIO_DIO_1, (STM32L0_GPIO_PARK_NONE | STM32L0_GPIO_MODE_ANALOG)); + + RCC->APB2RSTR |= RCC_APB2RSTR_TIM21RST; + RCC->APB2RSTR &= ~RCC_APB2RSTR_TIM21RST; + RCC->APB2ENR &= ~RCC_APB2ENR_TIM21EN; + + RCC->APB1RSTR |= RCC_APB1RSTR_TIM3RST; + RCC->APB1RSTR &= ~RCC_APB1RSTR_TIM3RST; + RCC->APB1ENR &= ~RCC_APB1ENR_TIM3EN; + + SX1276Write( REG_OPMODE, ( SX1276Read( REG_OPMODE ) & RF_OPMODE_MASK ) | RF_OPMODE_SLEEP ); + + SX1276Release( ); + + if (RADIO_TCXO_VCC != STM32L0_GPIO_PIN_NONE) + { + SX1276Delay( 1 ); + + SX1276SetBoardTcxo( false ); + } + + if (tim3_start != tim3_end) + { + stm32l0_rtc_set_calibration( ((uint32_t)(((uint64_t)(tim21_end - tim21_start) << 20) / (uint32_t)(tim3_end - tim3_start)) - (1 << 20)) ); + } } + +#endif /* defined(STM32L072xx) || defined(STM32L082xx) */ diff --git a/system/STM32L0xx/Source/LoRa/System/timer.c b/system/STM32L0xx/Source/LoRa/System/timer.c index 09db1ca4..54f3c149 100644 --- a/system/STM32L0xx/Source/LoRa/System/timer.c +++ b/system/STM32L0xx/Source/LoRa/System/timer.c @@ -68,7 +68,7 @@ TimerTime_t TimerGetCurrentTime( void ) uint16_t subseconds; TimerTime_t currentTime; - stm32l0_rtc_timer_reference(&seconds, &subseconds); + stm32l0_rtc_get_time(&seconds, &subseconds); currentTime = (seconds * 1000) + ((subseconds * 1000) / 32768); @@ -81,7 +81,7 @@ TimerTime_t TimerGetElapsedTime( TimerTime_t savedTime ) uint16_t subseconds; TimerTime_t currentTime; - stm32l0_rtc_timer_reference(&seconds, &subseconds); + stm32l0_rtc_get_time(&seconds, &subseconds); currentTime = (seconds * 1000) + ((subseconds * 1000) / 32768); diff --git a/system/STM32L0xx/Source/armv6m_systick.c b/system/STM32L0xx/Source/armv6m_systick.c index 2fb0bab5..1e6ffbb1 100644 --- a/system/STM32L0xx/Source/armv6m_systick.c +++ b/system/STM32L0xx/Source/armv6m_systick.c @@ -78,47 +78,6 @@ void armv6m_systick_disable(void) SysTick->CTRL = 0; } -void armv6m_systick_sync(uint32_t seconds, uint16_t subseconds) -{ - uint32_t cycle; - - SysTick->CTRL = 0; - - if (armv6m_systick_control.clock != SystemCoreClock) - { - cycle = SystemCoreClock / 8 -1; - - if (armv6m_systick_control.clock) - { - SysTick->VAL = cycle - (uint32_t)(((uint64_t)(armv6m_systick_control.cycle - SysTick->VAL) * (uint64_t)SystemCoreClock) / (uint64_t)armv6m_systick_control.clock); - } - else - { - SysTick->VAL = cycle; - } - - armv6m_systick_control.clock = SystemCoreClock; - armv6m_systick_control.cycle = cycle; - - /* To get from the current counter to the microsecond offset, - * the ((cycle - 1) - Systick->VAL) value is scaled so that the resulting - * microseconds fit into the upper 17 bits of a 32bit value. Then - * this is post divided by 2^15. That ensures proper scaling. - * - * For millisconds we can use the upper 7 bits of a 32bit value. - */ - - armv6m_systick_control.scale[0] = (uint64_t)32768000000ull / (uint64_t)SystemCoreClock; - armv6m_systick_control.scale[1] = (uint64_t)33554432000ull / (uint64_t)SystemCoreClock; - } - - armv6m_systick_control.micros = 125000 * ((seconds * 8) + (subseconds / 4096)); - armv6m_systick_control.millis = 125 * ((seconds * 8) + (subseconds / 4096)); - - SysTick->LOAD = armv6m_systick_control.cycle - (((subseconds & 4095) * (SystemCoreClock / 64)) / (32768 / 64)); - SysTick->CTRL = (SysTick_CTRL_TICKINT_Msk | SysTick_CTRL_CLKSOURCE_Msk | SysTick_CTRL_ENABLE_Msk); -} - uint32_t armv6m_systick_micros(void) { uint32_t micros, count; diff --git a/system/STM32L0xx/Source/dosfs_core.c b/system/STM32L0xx/Source/dosfs_core.c index 44bd1f14..920aecf4 100644 --- a/system/STM32L0xx/Source/dosfs_core.c +++ b/system/STM32L0xx/Source/dosfs_core.c @@ -668,7 +668,7 @@ static int dosfs_volume_mount(dosfs_volume_t * volume) volume->cwd_clsno = DOSFS_CLSNO_NONE; - volume->files = NULL; + volume->files = NULL; #if (DOSFS_CONFIG_TRANSACTION_SAFE_SUPPORTED == 1) if (!write_protected) @@ -829,9 +829,9 @@ static int dosfs_volume_unmount(dosfs_volume_t * volume) if (volume->state >= DOSFS_VOLUME_STATE_MOUNTED) { - while ((status == F_NO_ERROR) && volume->files) - { - status = dosfs_file_close(volume, volume->files); + while ((status == F_NO_ERROR) && volume->files) + { + status = dosfs_file_close(volume, volume->files); } if (status == F_NO_ERROR) @@ -5613,83 +5613,83 @@ static int dosfs_path_find_callback_pattern(dosfs_volume_t *volume, void *privat { if (!(dir->dir_attr & DOSFS_DIR_ATTR_VOLUME_ID)) { - if (sequence != DOSFS_LDIR_SEQUENCE_LAST) - { - /* A SFN is converted into a LFN before pattern matching. - * Otherwise, the matching would be inconsistent. - */ - - i = 0; - - for (n_e = 7; n_e != 0; n_e--) - { - if (dir->dir_name[n_e] != ' ') - { - break; - } - } + if (sequence != DOSFS_LDIR_SEQUENCE_LAST) + { + /* A SFN is converted into a LFN before pattern matching. + * Otherwise, the matching would be inconsistent. + */ + + i = 0; + + for (n_e = 7; n_e != 0; n_e--) + { + if (dir->dir_name[n_e] != ' ') + { + break; + } + } - for (n = 0; n <= n_e; n++) - { - /* Matching is always done case insensitive. However when the name is converted - * back into a cstring, it needs to be case sensitive. - */ - if ((dir->dir_nt_reserved & DOSFS_DIR_TYPE_LCASE_NAME) && (dir->dir_name[n] >= 'A') && (dir->dir_name[n] <= 'Z')) - { - volume->lfn_name[i++] = (dir->dir_name[n] + ('a' - 'A')); - } - else - { - volume->lfn_name[i++] = dir->dir_name[n]; - } - } - - offset = i; - - for (n_e = 10; n_e != 7; n_e--) - { - if (dir->dir_name[n_e] != ' ') - { - break; - } - } + for (n = 0; n <= n_e; n++) + { + /* Matching is always done case insensitive. However when the name is converted + * back into a cstring, it needs to be case sensitive. + */ + if ((dir->dir_nt_reserved & DOSFS_DIR_TYPE_LCASE_NAME) && (dir->dir_name[n] >= 'A') && (dir->dir_name[n] <= 'Z')) + { + volume->lfn_name[i++] = (dir->dir_name[n] + ('a' - 'A')); + } + else + { + volume->lfn_name[i++] = dir->dir_name[n]; + } + } + + offset = i; + + for (n_e = 10; n_e != 7; n_e--) + { + if (dir->dir_name[n_e] != ' ') + { + break; + } + } - if (n_e != 7) - { - volume->lfn_name[i++] = '.'; - - for (n = 8; n <= n_e; n++) - { - /* Matching is always done case insensitive. However when the name is converted - * back into a cstring, it needs to be case sensitive. - */ - if ((dir->dir_nt_reserved & DOSFS_DIR_TYPE_LCASE_EXT) && (dir->dir_name[n] >= 'A') && (dir->dir_name[n] <= 'Z')) - { - volume->lfn_name[i++] = (dir->dir_name[n] + ('a' - 'A')); - } - else - { - volume->lfn_name[i++] = dir->dir_name[n]; - } - } - } - - volume->dir_entries = 0; - volume->lfn_count = i; - } - else - { - /* Compute the offset of the last '.' in the LFN. - */ - - for (offset = volume->lfn_count, i = 0; i < volume->lfn_count; i++) - { - if (volume->lfn_name[i] == '.') - { - offset = i; - } - } - } + if (n_e != 7) + { + volume->lfn_name[i++] = '.'; + + for (n = 8; n <= n_e; n++) + { + /* Matching is always done case insensitive. However when the name is converted + * back into a cstring, it needs to be case sensitive. + */ + if ((dir->dir_nt_reserved & DOSFS_DIR_TYPE_LCASE_EXT) && (dir->dir_name[n] >= 'A') && (dir->dir_name[n] <= 'Z')) + { + volume->lfn_name[i++] = (dir->dir_name[n] + ('a' - 'A')); + } + else + { + volume->lfn_name[i++] = dir->dir_name[n]; + } + } + } + + volume->dir_entries = 0; + volume->lfn_count = i; + } + else + { + /* Compute the offset of the last '.' in the LFN. + */ + + for (offset = volume->lfn_count, i = 0; i < volume->lfn_count; i++) + { + if (volume->lfn_name[i] == '.') + { + offset = i; + } + } + } match = true; @@ -6328,7 +6328,7 @@ static int dosfs_path_find_pattern(dosfs_volume_t *volume, F_DIR *parent, char * parent->dir_dir.index = index +1; #endif /* (DOSFS_CONFIG_VFAT_SUPPORTED == 1) */ - *p_dir = dir; + *p_dir = dir; } else { @@ -6866,19 +6866,19 @@ static dosfs_file_t * dosfs_file_enumerate(dosfs_volume_t *volume, dosfs_file_t { if (file) { - file = file->next; + file = file->next; } else { - file = volume->files; + file = volume->files; } for (; file; file = file->next) { if ((file->dir_clsno == clsno) && (file->dir_index == index)) { - break; - } + break; + } } return file; @@ -7729,252 +7729,252 @@ static int dosfs_file_open(dosfs_volume_t *volume, dosfs_file_t *file, const cha if ((mode & DOSFS_FILE_MODE_WRITE) && (volume->flags & DOSFS_VOLUME_FLAG_WRITE_PROTECTED)) { - status = F_ERR_WRITEPROTECT; + status = F_ERR_WRITEPROTECT; } else { - status = dosfs_path_find_directory(volume, filename, &filename, &clsno_d); + status = dosfs_path_find_directory(volume, filename, &filename, &clsno_d); - if (status == F_NO_ERROR) - { - status = dosfs_path_convert_filename(volume, filename, NULL); + if (status == F_NO_ERROR) + { + status = dosfs_path_convert_filename(volume, filename, NULL); - if (status == F_NO_ERROR) - { - if (mode & DOSFS_FILE_MODE_CREATE) - { + if (status == F_NO_ERROR) + { + if (mode & DOSFS_FILE_MODE_CREATE) + { #if (DOSFS_CONFIG_VFAT_SUPPORTED == 1) - if ((volume->dir.dir_name[0] == '\0') || (volume->dir.dir_nt_reserved & DOSFS_DIR_TYPE_LOSSY)) - { - count = 1 + volume->dir_entries; - } - else + if ((volume->dir.dir_name[0] == '\0') || (volume->dir.dir_nt_reserved & DOSFS_DIR_TYPE_LOSSY)) + { + count = 1 + volume->dir_entries; + } + else #endif /* (DOSFS_CONFIG_VFAT_SUPPORTED == 1) */ - { - count = 1; - } - } - else - { - count = 0; - } - - status = dosfs_path_find_entry(volume, clsno_d, 0, count, dosfs_path_find_callback_name, NULL, &clsno, &index, &dir); - - if (status == F_NO_ERROR) - { - if (dir != NULL) - { - if (dir->dir_attr & DOSFS_DIR_ATTR_DIRECTORY) - { - status = F_ERR_INVALIDDIR; - } - else - { - if ((mode & DOSFS_FILE_MODE_WRITE) && (dir->dir_attr & DOSFS_DIR_ATTR_READ_ONLY)) - { - status = F_ERR_ACCESSDENIED; - } + { + count = 1; + } + } + else + { + count = 0; + } + + status = dosfs_path_find_entry(volume, clsno_d, 0, count, dosfs_path_find_callback_name, NULL, &clsno, &index, &dir); + + if (status == F_NO_ERROR) + { + if (dir != NULL) + { + if (dir->dir_attr & DOSFS_DIR_ATTR_DIRECTORY) + { + status = F_ERR_INVALIDDIR; + } + else + { + if ((mode & DOSFS_FILE_MODE_WRITE) && (dir->dir_attr & DOSFS_DIR_ATTR_READ_ONLY)) + { + status = F_ERR_ACCESSDENIED; + } #if (DOSFS_CONFIG_VFAT_SUPPORTED == 1) - else - { - /* Advance to primary dir entry. */ - index += volume->dir_entries; - } + else + { + /* Advance to primary dir entry. */ + index += volume->dir_entries; + } #endif /* (DOSFS_CONFIG_VFAT_SUPPORTED == 1) */ - - file->dir_clsno = clsno; - file->dir_index = index; - file->length = DOSFS_FTOHL(dir->dir_file_size); - if (volume->type == DOSFS_VOLUME_TYPE_FAT32) - { - file->first_clsno = ((uint32_t)DOSFS_FTOHS(dir->dir_clsno_hi) << 16) | (uint32_t)DOSFS_FTOHS(dir->dir_clsno_lo); - } - else - { - file->first_clsno = (uint32_t)DOSFS_FTOHS(dir->dir_clsno_lo); - } - } - } - else - { - if (mode & DOSFS_FILE_MODE_CREATE) - { + file->dir_clsno = clsno; + file->dir_index = index; + file->length = DOSFS_FTOHL(dir->dir_file_size); + + if (volume->type == DOSFS_VOLUME_TYPE_FAT32) + { + file->first_clsno = ((uint32_t)DOSFS_FTOHS(dir->dir_clsno_hi) << 16) | (uint32_t)DOSFS_FTOHS(dir->dir_clsno_lo); + } + else + { + file->first_clsno = (uint32_t)DOSFS_FTOHS(dir->dir_clsno_lo); + } + } + } + else + { + if (mode & DOSFS_FILE_MODE_CREATE) + { #if defined(DOSFS_PORT_CORE_TIMEDATE) - DOSFS_PORT_CORE_TIMEDATE(&ctime, &cdate); + DOSFS_PORT_CORE_TIMEDATE(&ctime, &cdate); #else /* DOSFS_PORT_CORE_TIMEDATE */ - ctime = 0; - cdate = 0; + ctime = 0; + cdate = 0; #endif /* DOSFS_PORT_CORE_TIMEDATE */ - status = dosfs_path_create_entry(volume, clsno_d, clsno, index, NULL, 0, DOSFS_CLSNO_NONE, ctime, cdate); + status = dosfs_path_create_entry(volume, clsno_d, clsno, index, NULL, 0, DOSFS_CLSNO_NONE, ctime, cdate); - if (status == F_NO_ERROR) - { + if (status == F_NO_ERROR) + { #if (DOSFS_CONFIG_VFAT_SUPPORTED == 1) - /* Stip out allocations bits, and advance to primary dir entry. */ - index = (index & 0x0000ffff) + (count -1); + /* Stip out allocations bits, and advance to primary dir entry. */ + index = (index & 0x0000ffff) + (count -1); #else /* (DOSFS_CONFIG_VFAT_SUPPORTED == 1) */ - index = (index & 0x0000ffff); + index = (index & 0x0000ffff); #endif /* (DOSFS_CONFIG_VFAT_SUPPORTED == 1) */ - - file->dir_clsno = clsno; - file->dir_index = index; - file->length = 0; - file->first_clsno = DOSFS_CLSNO_NONE; - } - } - else - { - status = F_ERR_NOTFOUND; - } - } - - if (status == F_NO_ERROR) - { - file_o = NULL; - - do - { - file_o = dosfs_file_enumerate(volume, file_o, clsno, index); - - if (file_o != NULL) - { - if (mode & DOSFS_FILE_MODE_WRITE) - { - status = F_ERR_LOCKED; - } - else - { - if (file_o->mode & DOSFS_FILE_MODE_WRITE) - { - status = F_ERR_LOCKED; - } - } - } - } - while ((status == F_NO_ERROR) && (file_o != NULL)); - - if (status == F_NO_ERROR) - { - file->status = F_NO_ERROR; - file->position = 0; - file->last_clsno = DOSFS_CLSNO_NONE; - - if (file->first_clsno == DOSFS_CLSNO_NONE) - { - file->flags |= DOSFS_FILE_FLAG_END_OF_CHAIN; - file->clsno = DOSFS_CLSNO_NONE; - file->blkno = DOSFS_BLKNO_INVALID; - file->blkno_e = DOSFS_BLKNO_INVALID; - } - else - { - file->clsno = file->first_clsno; - file->blkno = DOSFS_CLSNO_TO_BLKNO(file->clsno); - file->blkno_e = file->blkno + volume->cls_blk_size; - } - - if (mode & DOSFS_FILE_MODE_TRUNCATE) - { - file->length = 0; - - status = dosfs_file_shrink(volume, file); - } - + + file->dir_clsno = clsno; + file->dir_index = index; + file->length = 0; + file->first_clsno = DOSFS_CLSNO_NONE; + } + } + else + { + status = F_ERR_NOTFOUND; + } + } + + if (status == F_NO_ERROR) + { + file_o = NULL; + + do + { + file_o = dosfs_file_enumerate(volume, file_o, clsno, index); + + if (file_o != NULL) + { + if (mode & DOSFS_FILE_MODE_WRITE) + { + status = F_ERR_LOCKED; + } + else + { + if (file_o->mode & DOSFS_FILE_MODE_WRITE) + { + status = F_ERR_LOCKED; + } + } + } + } + while ((status == F_NO_ERROR) && (file_o != NULL)); + + if (status == F_NO_ERROR) + { + file->status = F_NO_ERROR; + file->position = 0; + file->last_clsno = DOSFS_CLSNO_NONE; + + if (file->first_clsno == DOSFS_CLSNO_NONE) + { + file->flags |= DOSFS_FILE_FLAG_END_OF_CHAIN; + file->clsno = DOSFS_CLSNO_NONE; + file->blkno = DOSFS_BLKNO_INVALID; + file->blkno_e = DOSFS_BLKNO_INVALID; + } + else + { + file->clsno = file->first_clsno; + file->blkno = DOSFS_CLSNO_TO_BLKNO(file->clsno); + file->blkno_e = file->blkno + volume->cls_blk_size; + } + + if (mode & DOSFS_FILE_MODE_TRUNCATE) + { + file->length = 0; + + status = dosfs_file_shrink(volume, file); + } + #if (DOSFS_CONFIG_CONTIGUOUS_SUPPORTED == 1) - if (size) - { - if (file->first_clsno == DOSFS_CLSNO_NONE) - { - status = dosfs_file_reserve(volume, file, size); - } - else - { - clsno = file->first_clsno; - clscnt = 0; - - do - { - status = dosfs_cluster_read(volume, clsno, &clsdata); + if (size) + { + if (file->first_clsno == DOSFS_CLSNO_NONE) + { + status = dosfs_file_reserve(volume, file, size); + } + else + { + clsno = file->first_clsno; + clscnt = 0; + + do + { + status = dosfs_cluster_read(volume, clsno, &clsdata); - if (status == F_NO_ERROR) - { - if ((clsdata >= 2) && (clsdata <= volume->last_clsno)) - { - if ((clsno +1) == clsdata) - { - clsno++; - clscnt++; - } - else - { - status = F_ERR_EOF; - } - - } - else - { - if (clsdata < DOSFS_CLSNO_LAST) - { - status = F_ERR_EOF; - } - } - } - } - while ((status == F_NO_ERROR) && (clsdata < DOSFS_CLSNO_LAST)); - - if (status == F_NO_ERROR) - { - if (clscnt == DOSFS_SIZE_TO_CLSCNT(size)) - { - file->flags |= (DOSFS_FILE_FLAG_CONTIGUOUS | DOSFS_FILE_FLAG_END_OF_CHAIN); - file->last_clsno = file->first_clsno + clscnt -1; - - if (size >= (DOSFS_FILE_SIZE_MAX & ~volume->cls_mask)) - { - file->size = DOSFS_FILE_SIZE_MAX; - } - else - { - file->size = (size + volume->cls_mask) & ~volume->cls_mask; - } - } - else - { - status = F_ERR_EOF; - } - } - } - } + if (status == F_NO_ERROR) + { + if ((clsdata >= 2) && (clsdata <= volume->last_clsno)) + { + if ((clsno +1) == clsdata) + { + clsno++; + clscnt++; + } + else + { + status = F_ERR_EOF; + } + + } + else + { + if (clsdata < DOSFS_CLSNO_LAST) + { + status = F_ERR_EOF; + } + } + } + } + while ((status == F_NO_ERROR) && (clsdata < DOSFS_CLSNO_LAST)); + + if (status == F_NO_ERROR) + { + if (clscnt == DOSFS_SIZE_TO_CLSCNT(size)) + { + file->flags |= (DOSFS_FILE_FLAG_CONTIGUOUS | DOSFS_FILE_FLAG_END_OF_CHAIN); + file->last_clsno = file->first_clsno + clscnt -1; + + if (size >= (DOSFS_FILE_SIZE_MAX & ~volume->cls_mask)) + { + file->size = DOSFS_FILE_SIZE_MAX; + } + else + { + file->size = (size + volume->cls_mask) & ~volume->cls_mask; + } + } + else + { + status = F_ERR_EOF; + } + } + } + } #endif /* (DOSFS_CONFIG_CONTIGUOUS_SUPPORTED == 1) */ - if (status == F_NO_ERROR) - { - if (mode & DOSFS_FILE_MODE_APPEND) - { - status = dosfs_file_seek(volume, file, file->length); - } + if (status == F_NO_ERROR) + { + if (mode & DOSFS_FILE_MODE_APPEND) + { + status = dosfs_file_seek(volume, file, file->length); + } - if (status == F_NO_ERROR) - { + if (status == F_NO_ERROR) + { #if (DOSFS_CONFIG_FILE_DATA_CACHE == 1) - file->data_cache.blkno = DOSFS_BLKNO_INVALID; + file->data_cache.blkno = DOSFS_BLKNO_INVALID; #endif /* (DOSFS_CONFIG_FILE_DATA_CACHE == 1) */ - file->mode = mode; + file->mode = mode; - file->next = volume->files; + file->next = volume->files; - volume->files = file; - } - } - } - } - } - } - } + volume->files = file; + } + } + } + } + } + } + } } return status; @@ -7993,10 +7993,10 @@ static int dosfs_file_close(dosfs_volume_t *volume, dosfs_file_t *file) for (file_p = &volume->files, file_s = *file_p; file_s; file_p = &file_s->next, file_s = *file_p) { - if (file == file_s) - { - *file_p = file->next; - } + if (file == file_s) + { + *file_p = file->next; + } } file->mode = 0; @@ -9505,38 +9505,38 @@ int f_opendir(F_DIR *dir, const char *dirname) if (status == F_NO_ERROR) { - if (((dirname[0] == '/') || (dirname[0] == '\\')) && (dirname[1] == '\0')) - { - clsno_d = DOSFS_CLSNO_NONE; - } - else - { - status = dosfs_path_find_file(volume, dirname, NULL, NULL, &dir_e); - - if (status == F_NO_ERROR) - { - if (dir_e->dir_attr & DOSFS_DIR_ATTR_DIRECTORY) - { - if (volume->type == DOSFS_VOLUME_TYPE_FAT32) - { - clsno_d = ((uint32_t)DOSFS_FTOHS(dir_e->dir_clsno_hi) << 16) | (uint32_t)DOSFS_FTOHS(dir_e->dir_clsno_lo); - } - else - { - clsno_d = (uint32_t)DOSFS_FTOHS(dir_e->dir_clsno_lo); - } - } - else - { - status = F_ERR_INVALIDDIR; - } - } - } + if (((dirname[0] == '/') || (dirname[0] == '\\')) && (dirname[1] == '\0')) + { + clsno_d = DOSFS_CLSNO_NONE; + } + else + { + status = dosfs_path_find_file(volume, dirname, NULL, NULL, &dir_e); + + if (status == F_NO_ERROR) + { + if (dir_e->dir_attr & DOSFS_DIR_ATTR_DIRECTORY) + { + if (volume->type == DOSFS_VOLUME_TYPE_FAT32) + { + clsno_d = ((uint32_t)DOSFS_FTOHS(dir_e->dir_clsno_hi) << 16) | (uint32_t)DOSFS_FTOHS(dir_e->dir_clsno_lo); + } + else + { + clsno_d = (uint32_t)DOSFS_FTOHS(dir_e->dir_clsno_lo); + } + } + else + { + status = F_ERR_INVALIDDIR; + } + } + } if (status == F_NO_ERROR) { - dir->dir_clsno = dir->dot_clsno = clsno_d; - } + dir->dir_clsno = dir->dot_clsno = clsno_d; + } } return status; @@ -9560,13 +9560,13 @@ int f_readdir(F_DIR *dir, F_DIRENT *dirent) } else { - status = dosfs_path_find_pattern(volume, dir, NULL, dirent->filename, &dir_e); + status = dosfs_path_find_pattern(volume, dir, NULL, dirent->filename, &dir_e); - if (status == F_NO_ERROR) - { + if (status == F_NO_ERROR) + { dirent->attr = dir_e->dir_attr; dirent->filesize = DOSFS_FTOHL(dir_e->dir_file_size); - } + } } status = dosfs_volume_unlock(volume, status); @@ -10161,7 +10161,7 @@ int f_findfirst(const char *filename, F_FIND *find) } while ((status == F_NO_ERROR) && (c != '\0')); #endif /* (DOSFS_CONFIG_VFAT_SUPPORTED == 0) */ - } + } if (status != F_NO_ERROR) { @@ -10173,7 +10173,7 @@ int f_findfirst(const char *filename, F_FIND *find) if (status == F_NO_ERROR) { - status = f_findnext(find); + status = f_findnext(find); } return status; @@ -10199,24 +10199,24 @@ int f_findnext(F_FIND *find) { status = dosfs_path_find_pattern(volume, &find->find_dir, find->find_pattern, find->filename, &dir_e); - if (status == F_NO_ERROR) - { - memcpy(&find->name[0], &dir_e->dir_name[0], (F_MAXNAME+F_MAXEXT)); + if (status == F_NO_ERROR) + { + memcpy(&find->name[0], &dir_e->dir_name[0], (F_MAXNAME+F_MAXEXT)); - find->attr = dir_e->dir_attr; - find->ctime = DOSFS_FTOHS(dir_e->dir_wrt_time); - find->cdate = DOSFS_FTOHS(dir_e->dir_wrt_date); - find->filesize = DOSFS_FTOHL(dir_e->dir_file_size); - - if (volume->type == DOSFS_VOLUME_TYPE_FAT32) - { - find->cluster = ((uint32_t)DOSFS_FTOHS(dir_e->dir_clsno_hi) << 16) | (uint32_t)DOSFS_FTOHS(dir_e->dir_clsno_lo); - } - else - { - find->cluster = (uint32_t)DOSFS_FTOHS(dir_e->dir_clsno_lo); - } - } + find->attr = dir_e->dir_attr; + find->ctime = DOSFS_FTOHS(dir_e->dir_wrt_time); + find->cdate = DOSFS_FTOHS(dir_e->dir_wrt_date); + find->filesize = DOSFS_FTOHL(dir_e->dir_file_size); + + if (volume->type == DOSFS_VOLUME_TYPE_FAT32) + { + find->cluster = ((uint32_t)DOSFS_FTOHS(dir_e->dir_clsno_hi) << 16) | (uint32_t)DOSFS_FTOHS(dir_e->dir_clsno_lo); + } + else + { + find->cluster = (uint32_t)DOSFS_FTOHS(dir_e->dir_clsno_lo); + } + } } status = dosfs_volume_unlock(volume, status); @@ -10460,7 +10460,7 @@ int f_open(F_FILE *file, const char *filename, const char *type) if (status == F_NO_ERROR) { - status = dosfs_file_open(volume, file, filename, mode, size); + status = dosfs_file_open(volume, file, filename, mode, size); status = dosfs_volume_unlock(volume, status); } diff --git a/system/STM32L0xx/Source/dosfs_storage.c b/system/STM32L0xx/Source/dosfs_storage.c index 1e5e5f7d..143306dd 100644 --- a/system/STM32L0xx/Source/dosfs_storage.c +++ b/system/STM32L0xx/Source/dosfs_storage.c @@ -34,6 +34,28 @@ #include "armv6m.h" #include "dosfs_core.h" #include "usbd_msc.h" +#include "stm32l0_rtc.h" + +static bool dosfs_storage_delay(void) +{ + uint32_t seconds; + uint16_t subseconds; + + static bool delay = true; + + if (delay) + { + stm32l0_rtc_get_time(&seconds, &subseconds); + + if (seconds >= 2) + { + delay = false; + } + } + + return delay; +} + static int8_t dosfs_storage_init(uint8_t lun) { @@ -86,7 +108,7 @@ static int8_t dosfs_storage_get_capacity(uint8_t lun, uint32_t *block_num, uint1 return -1; } - if ((dosfs_device.lock & (DOSFS_DEVICE_LOCK_INIT | DOSFS_DEVICE_LOCK_SFLASH | DOSFS_DEVICE_LOCK_VOLUME | DOSFS_DEVICE_LOCK_EJECTED)) || (armv6m_systick_millis() < 2000)) + if ((dosfs_device.lock & (DOSFS_DEVICE_LOCK_INIT | DOSFS_DEVICE_LOCK_SFLASH | DOSFS_DEVICE_LOCK_VOLUME | DOSFS_DEVICE_LOCK_EJECTED)) || dosfs_storage_delay()) { return -1; } @@ -111,7 +133,7 @@ static int8_t dosfs_storage_is_ready(uint8_t lun) return -1; } - if ((dosfs_device.lock & (DOSFS_DEVICE_LOCK_INIT | DOSFS_DEVICE_LOCK_SFLASH | DOSFS_DEVICE_LOCK_VOLUME | DOSFS_DEVICE_LOCK_EJECTED)) || (armv6m_systick_millis() < 2000)) + if ((dosfs_device.lock & (DOSFS_DEVICE_LOCK_INIT | DOSFS_DEVICE_LOCK_SFLASH | DOSFS_DEVICE_LOCK_VOLUME | DOSFS_DEVICE_LOCK_EJECTED)) || dosfs_storage_delay()) { return -1; } @@ -146,7 +168,7 @@ static int8_t dosfs_storage_start_stop_unit(uint8_t lun, uint8_t start, uint8_t return -1; } - if ((dosfs_device.lock & (DOSFS_DEVICE_LOCK_INIT | DOSFS_DEVICE_LOCK_SFLASH | DOSFS_DEVICE_LOCK_VOLUME | DOSFS_DEVICE_LOCK_EJECTED)) || (armv6m_systick_millis() < 2000)) + if ((dosfs_device.lock & (DOSFS_DEVICE_LOCK_INIT | DOSFS_DEVICE_LOCK_SFLASH | DOSFS_DEVICE_LOCK_VOLUME | DOSFS_DEVICE_LOCK_EJECTED)) || dosfs_storage_delay()) { return -1; } @@ -167,7 +189,7 @@ static int8_t dosfs_storage_prevent_allow_medium_removal(uint8_t lun, uint8_t pa return -1; } - if ((dosfs_device.lock & (DOSFS_DEVICE_LOCK_INIT | DOSFS_DEVICE_LOCK_SFLASH | DOSFS_DEVICE_LOCK_VOLUME | DOSFS_DEVICE_LOCK_EJECTED)) || (armv6m_systick_millis() < 2000)) + if ((dosfs_device.lock & (DOSFS_DEVICE_LOCK_INIT | DOSFS_DEVICE_LOCK_SFLASH | DOSFS_DEVICE_LOCK_VOLUME | DOSFS_DEVICE_LOCK_EJECTED)) || dosfs_storage_delay()) { return -1; } @@ -187,7 +209,7 @@ static int8_t dosfs_storage_prevent_allow_medium_removal(uint8_t lun, uint8_t pa static int8_t dosfs_storage_acquire(uint8_t lun) { - if ((dosfs_device.lock & (DOSFS_DEVICE_LOCK_INIT | DOSFS_DEVICE_LOCK_SFLASH | DOSFS_DEVICE_LOCK_VOLUME | DOSFS_DEVICE_LOCK_EJECTED)) || (armv6m_systick_millis() < 2000)) + if ((dosfs_device.lock & (DOSFS_DEVICE_LOCK_INIT | DOSFS_DEVICE_LOCK_SFLASH | DOSFS_DEVICE_LOCK_VOLUME | DOSFS_DEVICE_LOCK_EJECTED)) || dosfs_storage_delay()) { return -1; } diff --git a/system/STM32L0xx/Source/stm32l0_eeprom.c b/system/STM32L0xx/Source/stm32l0_eeprom.c index 038c81e2..0b9a4d96 100644 --- a/system/STM32L0xx/Source/stm32l0_eeprom.c +++ b/system/STM32L0xx/Source/stm32l0_eeprom.c @@ -84,32 +84,32 @@ bool stm32l0_eeprom_enqueue(stm32l0_eeprom_transaction_t *transaction) if (stm32l0_eeprom_device.state == STM32L0_EEPROM_STATE_NONE) { - return false; + return false; } if (transaction->control == STM32L0_EEPROM_CONTROL_ERASE) { - if ((transaction->address & 3) || - (transaction->count & 3) || - ((transaction->address + transaction->count) > DATA_EEPROM_SIZE)) - { - return false; - } + if ((transaction->address & 3) || + (transaction->count & 3) || + ((transaction->address + transaction->count) > DATA_EEPROM_SIZE)) + { + return false; + } } else { - if ((transaction->address + transaction->count) > DATA_EEPROM_SIZE) - { - return false; - } + if ((transaction->address + transaction->count) > DATA_EEPROM_SIZE) + { + return false; + } } transaction->status = STM32L0_EEPROM_STATUS_BUSY; do { - queue = stm32l0_eeprom_device.queue; - transaction->next = queue; + queue = stm32l0_eeprom_device.queue; + transaction->next = queue; } while (armv6m_atomic_compare_and_swap((volatile uint32_t*)&stm32l0_eeprom_device.queue, (uint32_t)queue, (uint32_t)transaction) != (uint32_t)queue); @@ -124,18 +124,18 @@ static bool stm32l0_eeprom_do_erase(void) do { - address = stm32l0_eeprom_device.address; + address = stm32l0_eeprom_device.address; - stm32l0_eeprom_device.address += 4; - stm32l0_eeprom_device.count -= 4; + stm32l0_eeprom_device.address += 4; + stm32l0_eeprom_device.count -= 4; - if (*((volatile uint32_t*)(address)) != 0x00000000) - { - *((volatile uint32_t*)(address)) = 0x00000000; + if (*((volatile uint32_t*)(address)) != 0x00000000) + { + *((volatile uint32_t*)(address)) = 0x00000000; - return true; - } - + return true; + } + } while (stm32l0_eeprom_device.count); @@ -148,48 +148,48 @@ static bool stm32l0_eeprom_do_program(void) do { - address = stm32l0_eeprom_device.address & ~3; - offset = stm32l0_eeprom_device.address & 3; - - data = *((volatile uint32_t*)address); - - size = 4 - offset; - - if (size > stm32l0_eeprom_device.count) - { - size = stm32l0_eeprom_device.count; - } - - if (size >= 1) - { - ((uint8_t*)&data + offset)[0] = stm32l0_eeprom_device.data[0]; - } - - if (size >= 2) - { - ((uint8_t*)&data + offset)[1] = stm32l0_eeprom_device.data[1]; - } - - if (size >= 3) - { - ((uint8_t*)&data + offset)[2] = stm32l0_eeprom_device.data[2]; - } - - if (size >= 4) - { - ((uint8_t*)&data + offset)[3] = stm32l0_eeprom_device.data[3]; - } - - stm32l0_eeprom_device.address += size; - stm32l0_eeprom_device.data += size; - stm32l0_eeprom_device.count -= size; - - if (*((volatile uint32_t*)address) != data) - { - *((volatile uint32_t*)address) = data; - - return true; - } + address = stm32l0_eeprom_device.address & ~3; + offset = stm32l0_eeprom_device.address & 3; + + data = *((volatile uint32_t*)address); + + size = 4 - offset; + + if (size > stm32l0_eeprom_device.count) + { + size = stm32l0_eeprom_device.count; + } + + if (size >= 1) + { + ((uint8_t*)&data + offset)[0] = stm32l0_eeprom_device.data[0]; + } + + if (size >= 2) + { + ((uint8_t*)&data + offset)[1] = stm32l0_eeprom_device.data[1]; + } + + if (size >= 3) + { + ((uint8_t*)&data + offset)[2] = stm32l0_eeprom_device.data[2]; + } + + if (size >= 4) + { + ((uint8_t*)&data + offset)[3] = stm32l0_eeprom_device.data[3]; + } + + stm32l0_eeprom_device.address += size; + stm32l0_eeprom_device.data += size; + stm32l0_eeprom_device.count -= size; + + if (*((volatile uint32_t*)address) != data) + { + *((volatile uint32_t*)address) = data; + + return true; + } } while (stm32l0_eeprom_device.count); @@ -203,173 +203,173 @@ void FLASH_IRQHandler(void) if (stm32l0_eeprom_device.address != 0x00000000) { - if (FLASH->SR & (FLASH_SR_WRPERR | FLASH_SR_PGAERR | FLASH_SR_SIZERR | FLASH_SR_RDERR | FLASH_SR_NOTZEROERR | FLASH_SR_FWWERR | FLASH_SR_EOP)) - { - if (FLASH->SR & (FLASH_SR_WRPERR | FLASH_SR_PGAERR | FLASH_SR_SIZERR | FLASH_SR_RDERR | FLASH_SR_NOTZEROERR | FLASH_SR_FWWERR)) - { - FLASH->SR = (FLASH_SR_WRPERR | FLASH_SR_PGAERR | FLASH_SR_SIZERR | FLASH_SR_RDERR | FLASH_SR_NOTZEROERR | FLASH_SR_FWWERR); - - FLASH->PECR &= ~(FLASH_PECR_EOPIE | FLASH_PECR_ERRIE | FLASH_PECR_DATA); - - FLASH->PECR |= FLASH_PECR_PELOCK; - - stm32l0_system_unlock(STM32L0_SYSTEM_LOCK_CLOCKS); - stm32l0_system_unlock(STM32L0_SYSTEM_LOCK_STOP); - - stm32l0_eeprom_device.address = 0x00000000; - - *stm32l0_eeprom_device.status = STM32L0_EEPROM_STATUS_FAIL; - - if (stm32l0_eeprom_device.callback) - { - (*stm32l0_eeprom_device.callback)(stm32l0_eeprom_device.context); - } - } - else - { - FLASH->SR = FLASH_SR_EOP; - - if (stm32l0_eeprom_device.count) - { - if (stm32l0_eeprom_device.data == NULL) - { - if (stm32l0_eeprom_do_erase()) - { - return; - } - } - else - { - if (stm32l0_eeprom_do_program()) - { - return; - } - } - } - - FLASH->PECR &= ~(FLASH_PECR_EOPIE | FLASH_PECR_ERRIE | FLASH_PECR_DATA); - - FLASH->PECR |= FLASH_PECR_PELOCK; - - stm32l0_system_unlock(STM32L0_SYSTEM_LOCK_CLOCKS); - stm32l0_system_unlock(STM32L0_SYSTEM_LOCK_STOP); - - stm32l0_eeprom_device.address = 0x00000000; - - *stm32l0_eeprom_device.status = STM32L0_EEPROM_STATUS_SUCCESS; - - if (stm32l0_eeprom_device.callback) - { - (*stm32l0_eeprom_device.callback)(stm32l0_eeprom_device.context); - } - } - } + if (FLASH->SR & (FLASH_SR_WRPERR | FLASH_SR_PGAERR | FLASH_SR_SIZERR | FLASH_SR_RDERR | FLASH_SR_NOTZEROERR | FLASH_SR_FWWERR | FLASH_SR_EOP)) + { + if (FLASH->SR & (FLASH_SR_WRPERR | FLASH_SR_PGAERR | FLASH_SR_SIZERR | FLASH_SR_RDERR | FLASH_SR_NOTZEROERR | FLASH_SR_FWWERR)) + { + FLASH->SR = (FLASH_SR_WRPERR | FLASH_SR_PGAERR | FLASH_SR_SIZERR | FLASH_SR_RDERR | FLASH_SR_NOTZEROERR | FLASH_SR_FWWERR); + + FLASH->PECR &= ~(FLASH_PECR_EOPIE | FLASH_PECR_ERRIE | FLASH_PECR_DATA); + + FLASH->PECR |= FLASH_PECR_PELOCK; + + stm32l0_system_unlock(STM32L0_SYSTEM_LOCK_CLOCKS); + stm32l0_system_unlock(STM32L0_SYSTEM_LOCK_STOP); + + stm32l0_eeprom_device.address = 0x00000000; + + *stm32l0_eeprom_device.status = STM32L0_EEPROM_STATUS_FAIL; + + if (stm32l0_eeprom_device.callback) + { + (*stm32l0_eeprom_device.callback)(stm32l0_eeprom_device.context); + } + } + else + { + FLASH->SR = FLASH_SR_EOP; + + if (stm32l0_eeprom_device.count) + { + if (stm32l0_eeprom_device.data == NULL) + { + if (stm32l0_eeprom_do_erase()) + { + return; + } + } + else + { + if (stm32l0_eeprom_do_program()) + { + return; + } + } + } + + FLASH->PECR &= ~(FLASH_PECR_EOPIE | FLASH_PECR_ERRIE | FLASH_PECR_DATA); + + FLASH->PECR |= FLASH_PECR_PELOCK; + + stm32l0_system_unlock(STM32L0_SYSTEM_LOCK_CLOCKS); + stm32l0_system_unlock(STM32L0_SYSTEM_LOCK_STOP); + + stm32l0_eeprom_device.address = 0x00000000; + + *stm32l0_eeprom_device.status = STM32L0_EEPROM_STATUS_SUCCESS; + + if (stm32l0_eeprom_device.callback) + { + (*stm32l0_eeprom_device.callback)(stm32l0_eeprom_device.context); + } + } + } } if (stm32l0_eeprom_device.state == STM32L0_EEPROM_STATE_READY) { - while (stm32l0_eeprom_device.queue) - { - transaction = NULL; - - do - { - queue = stm32l0_eeprom_device.queue; - - for (pp_transaction = NULL, transaction = queue; transaction->next; pp_transaction = &transaction->next, transaction = transaction->next) - { - } - - if (pp_transaction) - { - *pp_transaction = NULL; - - break; - } - } - while (armv6m_atomic_compare_and_swap((volatile uint32_t*)&stm32l0_eeprom_device.queue, (uint32_t)transaction, (uint32_t)NULL) != (uint32_t)queue); - - if ((transaction->control == STM32L0_EEPROM_CONTROL_ERASE) || (transaction->control == STM32L0_EEPROM_CONTROL_PROGRAM)) - { - stm32l0_system_lock(STM32L0_SYSTEM_LOCK_STOP); - stm32l0_system_lock(STM32L0_SYSTEM_LOCK_CLOCKS); - - primask = __get_PRIMASK(); - - __disable_irq(); - - FLASH->PEKEYR = 0x89abcdef; - FLASH->PEKEYR = 0x02030405; - - __set_PRIMASK(primask); - - if (FLASH->PECR & FLASH_PECR_PELOCK) - { - transaction->status = STM32L0_EEPROM_STATUS_FAIL; - - if (transaction->callback) - { - (*transaction->callback)(transaction->context); - } - } - else - { - stm32l0_eeprom_device.address = DATA_EEPROM_BASE + transaction->address; - stm32l0_eeprom_device.count = transaction->count; - stm32l0_eeprom_device.status = &transaction->status; - stm32l0_eeprom_device.callback = transaction->callback; - stm32l0_eeprom_device.context = transaction->context; - - FLASH->PECR |= (FLASH_PECR_EOPIE | FLASH_PECR_ERRIE | FLASH_PECR_DATA); - - if (transaction->control == STM32L0_EEPROM_CONTROL_ERASE) - { - stm32l0_eeprom_device.data = NULL; - - if (stm32l0_eeprom_do_erase()) - { - return; - } - } - else - { - stm32l0_eeprom_device.data = transaction->data; - - if (stm32l0_eeprom_do_program()) - { - return; - } - } - - FLASH->PECR &= ~(FLASH_PECR_EOPIE | FLASH_PECR_ERRIE | FLASH_PECR_DATA); - - FLASH->PECR |= FLASH_PECR_PELOCK; - - stm32l0_system_unlock(STM32L0_SYSTEM_LOCK_CLOCKS); - stm32l0_system_unlock(STM32L0_SYSTEM_LOCK_STOP); - - stm32l0_eeprom_device.address = 0x00000000; - - *stm32l0_eeprom_device.status = STM32L0_EEPROM_STATUS_SUCCESS; - - if (stm32l0_eeprom_device.callback) - { - (*stm32l0_eeprom_device.callback)(stm32l0_eeprom_device.context); - } - } - } - - if (transaction->control == STM32L0_EEPROM_CONTROL_READ) - { - memcpy(transaction->data, (const void*)(DATA_EEPROM_BASE + transaction->address), transaction->count); - - transaction->status = STM32L0_EEPROM_STATUS_SUCCESS; - - if (transaction->callback) - { - (*transaction->callback)(transaction->context); - } - } - } + while (stm32l0_eeprom_device.queue) + { + transaction = NULL; + + do + { + queue = stm32l0_eeprom_device.queue; + + for (pp_transaction = NULL, transaction = queue; transaction->next; pp_transaction = &transaction->next, transaction = transaction->next) + { + } + + if (pp_transaction) + { + *pp_transaction = NULL; + + break; + } + } + while (armv6m_atomic_compare_and_swap((volatile uint32_t*)&stm32l0_eeprom_device.queue, (uint32_t)transaction, (uint32_t)NULL) != (uint32_t)queue); + + if ((transaction->control == STM32L0_EEPROM_CONTROL_ERASE) || (transaction->control == STM32L0_EEPROM_CONTROL_PROGRAM)) + { + stm32l0_system_lock(STM32L0_SYSTEM_LOCK_STOP); + stm32l0_system_lock(STM32L0_SYSTEM_LOCK_CLOCKS); + + primask = __get_PRIMASK(); + + __disable_irq(); + + FLASH->PEKEYR = 0x89abcdef; + FLASH->PEKEYR = 0x02030405; + + __set_PRIMASK(primask); + + if (FLASH->PECR & FLASH_PECR_PELOCK) + { + transaction->status = STM32L0_EEPROM_STATUS_FAIL; + + if (transaction->callback) + { + (*transaction->callback)(transaction->context); + } + } + else + { + stm32l0_eeprom_device.address = DATA_EEPROM_BASE + transaction->address; + stm32l0_eeprom_device.count = transaction->count; + stm32l0_eeprom_device.status = &transaction->status; + stm32l0_eeprom_device.callback = transaction->callback; + stm32l0_eeprom_device.context = transaction->context; + + FLASH->PECR |= (FLASH_PECR_EOPIE | FLASH_PECR_ERRIE | FLASH_PECR_DATA); + + if (transaction->control == STM32L0_EEPROM_CONTROL_ERASE) + { + stm32l0_eeprom_device.data = NULL; + + if (stm32l0_eeprom_do_erase()) + { + return; + } + } + else + { + stm32l0_eeprom_device.data = transaction->data; + + if (stm32l0_eeprom_do_program()) + { + return; + } + } + + FLASH->PECR &= ~(FLASH_PECR_EOPIE | FLASH_PECR_ERRIE | FLASH_PECR_DATA); + + FLASH->PECR |= FLASH_PECR_PELOCK; + + stm32l0_system_unlock(STM32L0_SYSTEM_LOCK_CLOCKS); + stm32l0_system_unlock(STM32L0_SYSTEM_LOCK_STOP); + + stm32l0_eeprom_device.address = 0x00000000; + + *stm32l0_eeprom_device.status = STM32L0_EEPROM_STATUS_SUCCESS; + + if (stm32l0_eeprom_device.callback) + { + (*stm32l0_eeprom_device.callback)(stm32l0_eeprom_device.context); + } + } + } + + if (transaction->control == STM32L0_EEPROM_CONTROL_READ) + { + memcpy(transaction->data, (const void*)(DATA_EEPROM_BASE + transaction->address), transaction->count); + + transaction->status = STM32L0_EEPROM_STATUS_SUCCESS; + + if (transaction->callback) + { + (*transaction->callback)(transaction->context); + } + } + } } } diff --git a/system/STM32L0xx/Source/stm32l0_flash.c b/system/STM32L0xx/Source/stm32l0_flash.c index 583e6d73..9148a443 100644 --- a/system/STM32L0xx/Source/stm32l0_flash.c +++ b/system/STM32L0xx/Source/stm32l0_flash.c @@ -98,26 +98,26 @@ bool stm32l0_flash_unlock(void) if (FLASH->PECR & FLASH_PECR_PELOCK) { - FLASH->PEKEYR = 0x89abcdef; - FLASH->PEKEYR = 0x02030405; + FLASH->PEKEYR = 0x89abcdef; + FLASH->PEKEYR = 0x02030405; } if (!(FLASH->PECR & FLASH_PECR_PELOCK)) { - if (FLASH->PECR & FLASH_PECR_PRGLOCK) - { - FLASH->PRGKEYR = 0x8c9daebf; - FLASH->PRGKEYR = 0x13141516; - } + if (FLASH->PECR & FLASH_PECR_PRGLOCK) + { + FLASH->PRGKEYR = 0x8c9daebf; + FLASH->PRGKEYR = 0x13141516; + } } __set_PRIMASK(primask); if (FLASH->PECR & FLASH_PECR_PRGLOCK) { - stm32l0_eeprom_release(); + stm32l0_eeprom_release(); - return false; + return false; } return true; diff --git a/system/STM32L0xx/Source/stm32l0_lptim.c b/system/STM32L0xx/Source/stm32l0_lptim.c index 6af5a43e..92a0ce4f 100644 --- a/system/STM32L0xx/Source/stm32l0_lptim.c +++ b/system/STM32L0xx/Source/stm32l0_lptim.c @@ -72,27 +72,27 @@ bool stm32l0_lptim_start(uint32_t timeout, stm32l0_lptim_callback_t callback, vo if (timeout <= 65536) { - period = timeout; - presc = 0; + period = timeout; + presc = 0; } else { - if (timeout > 65536 * 128) - { - period = 65536 * 128; - presc = LPTIM_CFGR_PRESC_0 | LPTIM_CFGR_PRESC_1 | LPTIM_CFGR_PRESC_2;; - } - else - { - period = timeout; - presc = 0; + if (timeout > 65536 * 128) + { + period = 65536 * 128; + presc = LPTIM_CFGR_PRESC_0 | LPTIM_CFGR_PRESC_1 | LPTIM_CFGR_PRESC_2;; + } + else + { + period = timeout; + presc = 0; - while (period > 65536) - { - period = (period + 1) / 2; - presc += LPTIM_CFGR_PRESC_0; - } - } + while (period > 65536) + { + period = (period + 1) / 2; + presc += LPTIM_CFGR_PRESC_0; + } + } } stm32l0_lptim_device.state = STM32L0_LPTIM_STATE_TIMEOUT; @@ -134,18 +134,18 @@ void LPTIM1_IRQHandler(void) { if (LPTIM1->ISR & LPTIM_ISR_ARRM) { - LPTIM1->ICR = LPTIM_ICR_ARRMCF; - - stm32l0_lptim_device.state = STM32L0_LPTIM_STATE_READY; - - if (stm32l0_lptim_device.callback) - { - (*stm32l0_lptim_device.callback)(stm32l0_lptim_device.context); - } - - if (stm32l0_lptim_device.state == STM32L0_LPTIM_STATE_READY) - { - stm32l0_lptim_stop(); - } + LPTIM1->ICR = LPTIM_ICR_ARRMCF; + + stm32l0_lptim_device.state = STM32L0_LPTIM_STATE_READY; + + if (stm32l0_lptim_device.callback) + { + (*stm32l0_lptim_device.callback)(stm32l0_lptim_device.context); + } + + if (stm32l0_lptim_device.state == STM32L0_LPTIM_STATE_READY) + { + stm32l0_lptim_stop(); + } } } diff --git a/system/STM32L0xx/Source/stm32l0_rtc.c b/system/STM32L0xx/Source/stm32l0_rtc.c index cb1d4972..31babeb3 100644 --- a/system/STM32L0xx/Source/stm32l0_rtc.c +++ b/system/STM32L0xx/Source/stm32l0_rtc.c @@ -40,6 +40,10 @@ typedef struct _stm32l0_rtc_device_t { void *wakeup_context; int32_t reference_seconds; uint16_t reference_subseconds; + int16_t adjust_subseconds; + uint32_t offset_seconds; + stm32l0_rtc_calendar_t alarm_stop; + volatile uint8_t alarm_busy; volatile uint8_t timer_busy; volatile uint32_t timer_events; stm32l0_rtc_timer_t *timer_queue; @@ -76,6 +80,30 @@ static const uint8_t stm32l0_rtc_bcd_to_int[] = { }; +static const uint16_t stm32l0_rtc_bcd_year_to_days[160] = { + 0, 366, 731, 1096, 1461, 1827, 2192, 2557, 2922, 3288, 3653, 3653, 3653, 3653, 3653, 3653, + 3653, 4018, 4383, 4749, 5114, 5479, 5844, 6210, 6575, 6940, 7305, 7305, 7305, 7305, 7305, 7305, + 7305, 7671, 8036, 8401, 8766, 9132, 9497, 9862, 10227, 10593, 10958, 10958, 10958, 10958, 10958, 10958, + 10958, 11323, 11688, 12054, 12419, 12784, 13149, 13515, 13880, 14245, 14610, 14610, 14610, 14610, 14610, 14610, + 14610, 14976, 15341, 15706, 16071, 16437, 16802, 17167, 17532, 17898, 18263, 18263, 18263, 18263, 18263, 18263, + 18263, 18628, 18993, 19359, 19724, 20089, 20454, 20820, 21185, 21550, 21915, 21915, 21915, 21915, 21915, 21915, + 21915, 22281, 22646, 23011, 23376, 23742, 24107, 24472, 24837, 25203, 25568, 25568, 25568, 25568, 25568, 25568, + 25568, 25933, 26298, 26664, 27029, 27394, 27759, 28125, 28490, 28855, 29220, 29220, 29220, 29220, 29220, 29220, + 29220, 29586, 29951, 30316, 30681, 31047, 31412, 31777, 32142, 32508, 32873, 32873, 32873, 32873, 32873, 32873, + 32873, 33238, 33603, 33969, 34334, 34699, 35064, 35430, 35795, 36160, 36525, 36525, 36525, 36525, 36525, 36525, +}; + +static const uint16_t stm32l0_rtc_bcd_month_to_days[2][32] = { + { + 0, 0, 31, 59, 90, 120, 151, 181, 212, 243, 243, 243, 243, 243, 243, 243, + 273, 304, 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, + }, + { + 0, 0, 31, 60, 91, 121, 152, 182, 213, 244, 244, 244, 244, 244, 244, 244, + 274, 305, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + }, +}; + static inline void stm32l0_rtc_calendar_pack(const stm32l0_rtc_calendar_t *calendar, uint32_t *p_c0, uint32_t *p_c1) { *p_c0 = ((const uint32_t*)calendar)[0]; @@ -89,16 +117,12 @@ static inline void stm32l0_rtc_calendar_unpack(uint32_t c0, uint32_t c1, stm32l0 } static void stm32l0_rtc_timer_routine(void); -static void stm32l0_rtc_timer_sync(const stm32l0_rtc_calendar_t *stop, const stm32l0_rtc_calendar_t *start); -static void stm32l0_rtc_timer_sync_1(uint32_t c0, uint32_t c1); -static void stm32l0_rtc_timer_sync_2(uint32_t c0, uint32_t c1); static void stm32l0_rtc_timer_alarm(const stm32l0_rtc_calendar_t *start); void __stm32l0_rtc_initialize(void) { uint32_t r_seconds; uint16_t r_subseconds; - stm32l0_rtc_calendar_t calendar; RTC->WPR = 0xca; RTC->WPR = 0x53; @@ -141,13 +165,13 @@ void __stm32l0_rtc_initialize(void) EXTI->PR = EXTI_PR_PIF17 | EXTI_PR_PIF20; - stm32l0_rtc_get_calendar(&calendar); - stm32l0_rtc_calendar_to_time(&calendar, &r_seconds, &r_subseconds); + stm32l0_rtc_clock_time(&r_seconds, &r_subseconds); stm32l0_rtc_time_delta(0, 0, r_seconds, r_subseconds, &stm32l0_rtc_device.reference_seconds, &stm32l0_rtc_device.reference_subseconds); - stm32l0_rtc_device.timer_queue = NULL; + stm32l0_rtc_device.adjust_subseconds = ((int32_t)(RTC->BKP4R & 0xfff00000) >> 20) * STM32L0_RTC_PREDIV_A; + stm32l0_rtc_device.offset_seconds = (uint32_t)RTC->BKP3R; - armv6m_systick_sync(0, 0); + stm32l0_rtc_device.timer_queue = NULL; } void stm32l0_rtc_configure(unsigned int priority) @@ -163,81 +187,62 @@ void stm32l0_rtc_configure(unsigned int priority) armv6m_atomic_or(&EXTI->IMR, (EXTI_IMR_IM17 | EXTI_IMR_IM20)); } -static void stm32l0_rtc_modify_calendar(uint32_t mask, const stm32l0_rtc_calendar_t *calendar) +__attribute__((optimize("O3"))) void stm32l0_rtc_clock_capture(uint32_t *p_data) { - stm32l0_rtc_calendar_t before, after; - int32_t d_seconds; - uint16_t d_subseconds; - uint32_t ipsr, c0, c1; - - armv6m_atomic_and(&RTC->CR, ~(RTC_CR_ALRBIE | RTC_CR_ALRBE)); - armv6m_atomic_modify(&RTC->ISR, ~RTC_ISR_INIT, ~(RTC_ISR_ALRBF | RTC_ISR_INIT)); - - armv6m_atomic_add(&stm32l0_rtc_device.timer_events, 1); - - NVIC_DisableIRQ(RTC_IRQn); - - stm32l0_rtc_get_calendar(&before); - - after.subseconds = 0; - after.seconds = (mask & STM32L0_RTC_CALENDAR_MASK_SECONDS) ? calendar->seconds : before.seconds; - after.minutes = (mask & STM32L0_RTC_CALENDAR_MASK_MINUTES) ? calendar->minutes : before.minutes; - after.hours = (mask & STM32L0_RTC_CALENDAR_MASK_HOURS) ? calendar->hours : before.hours; - after.day = (mask & STM32L0_RTC_CALENDAR_MASK_DAY) ? calendar->day : before.day; - after.month = (mask & STM32L0_RTC_CALENDAR_MASK_MONTH) ? calendar->month : before.month; - after.year = (mask & STM32L0_RTC_CALENDAR_MASK_YEAR) ? calendar->year : before.year; + uint32_t rtc_ssr, rtc_tr, rtc_dr; - /* Set all bits including RTC_ISR_INIT, hence no ISR flag gets cleaned. - */ - RTC->ISR = ~0u | RTC_ISR_INIT; - - while (!(RTC->ISR & RTC_ISR_INITF)) + do { + rtc_ssr = RTC->SSR; + rtc_tr = RTC->TR; + rtc_dr = RTC->DR; } + while (rtc_ssr != RTC->SSR); - RTC->TR = ((stm32l0_rtc_int_to_bcd[after.seconds] << RTC_TR_SU_Pos) | - (stm32l0_rtc_int_to_bcd[after.minutes] << RTC_TR_MNU_Pos) | - (stm32l0_rtc_int_to_bcd[after.hours] << RTC_TR_HU_Pos)); - - RTC->DR = ((stm32l0_rtc_int_to_bcd[after.day] << RTC_DR_DU_Pos) | - (stm32l0_rtc_int_to_bcd[after.month] << RTC_DR_MU_Pos) | - (stm32l0_rtc_int_to_bcd[after.year] << RTC_DR_YU_Pos)); - - /* Set all bits excluding RTC_ISR_INIT, hence no ISR flag gets cleaned - */ - RTC->ISR = ~0u & ~RTC_ISR_INIT; - - /* With RTC_CR_BYPSHAD there is no indication when the RTC can - * be read again. So there needs to be a delay that covers - * the 4 RTCCLK periods before the clock is restarted. - */ - - armv6m_core_udelay(150); + p_data[0] = rtc_ssr; + p_data[1] = rtc_tr; + p_data[2] = rtc_dr; +} - stm32l0_rtc_calendar_delta(&after, &before, &d_seconds, &d_subseconds); - stm32l0_rtc_time_subtract(stm32l0_rtc_device.reference_seconds, stm32l0_rtc_device.reference_subseconds, d_seconds, d_subseconds, &stm32l0_rtc_device.reference_seconds, &stm32l0_rtc_device.reference_subseconds); +__attribute__((optimize("O3"))) void stm32l0_rtc_clock_convert(uint32_t *data, uint32_t *p_seconds, uint16_t *p_subseconds) +{ + uint32_t rtc_ssr, rtc_tr, rtc_dr; - NVIC_EnableIRQ(RTC_IRQn); + rtc_ssr = data[0]; + rtc_tr = data[1]; + rtc_dr = data[2]; + + *p_seconds = (((stm32l0_rtc_bcd_year_to_days[(rtc_dr & (RTC_DR_YU_Msk | RTC_DR_YT_Msk)) >> RTC_DR_YU_Pos] + + stm32l0_rtc_bcd_month_to_days[(((rtc_dr & (RTC_DR_YU_Msk | RTC_DR_YT_Msk)) >> RTC_DR_YU_Pos) & 3) ? 0 : 1][(rtc_dr & (RTC_DR_MU_Msk | RTC_DR_MT_Msk)) >> RTC_DR_MU_Pos] + + stm32l0_rtc_bcd_to_int[(rtc_dr & (RTC_DR_DU_Msk | RTC_DR_DT_Msk)) >> RTC_DR_DU_Pos] - 1) * 86400) + + (stm32l0_rtc_bcd_to_int[(rtc_tr & (RTC_TR_HU_Msk | RTC_TR_HT_Msk)) >> RTC_TR_HU_Pos] * 3600) + + (stm32l0_rtc_bcd_to_int[(rtc_tr & (RTC_TR_MNU_Msk | RTC_TR_MNT_Msk)) >> RTC_TR_MNU_Pos] * 60) + + (stm32l0_rtc_bcd_to_int[(rtc_tr & (RTC_TR_SU_Msk | RTC_TR_ST_Msk)) >> RTC_TR_SU_Pos])); + *p_subseconds = ((STM32L0_RTC_PREDIV_S - 1) - (rtc_ssr & (STM32L0_RTC_PREDIV_S - 1))) * STM32L0_RTC_PREDIV_A; +} - ipsr = __get_IPSR(); +__attribute__((optimize("O3"))) void stm32l0_rtc_clock_time(uint32_t *p_seconds, uint16_t *p_subseconds) +{ + uint32_t rtc_ssr, rtc_tr, rtc_dr; - if ((ipsr == 11) || (ipsr == 14)) - { - stm32l0_rtc_timer_sync(&before, &after); - } - else + do { - stm32l0_rtc_calendar_pack(&before, &c0, &c1); - - armv6m_pendsv_enqueue((armv6m_pendsv_routine_t)stm32l0_rtc_timer_sync_1, (void*)c0, c1); - - stm32l0_rtc_calendar_pack(&after, &c0, &c1); - - armv6m_pendsv_enqueue((armv6m_pendsv_routine_t)stm32l0_rtc_timer_sync_2, (void*)c0, c1); + rtc_ssr = RTC->SSR; + rtc_tr = RTC->TR; + rtc_dr = RTC->DR; } + while (rtc_ssr != RTC->SSR); + + *p_seconds = (((stm32l0_rtc_bcd_year_to_days[(rtc_dr & (RTC_DR_YU_Msk | RTC_DR_YT_Msk)) >> RTC_DR_YU_Pos] + + stm32l0_rtc_bcd_month_to_days[(((rtc_dr & (RTC_DR_YU_Msk | RTC_DR_YT_Msk)) >> RTC_DR_YU_Pos) & 3) ? 0 : 1][(rtc_dr & (RTC_DR_MU_Msk | RTC_DR_MT_Msk)) >> RTC_DR_MU_Pos] + + stm32l0_rtc_bcd_to_int[(rtc_dr & (RTC_DR_DU_Msk | RTC_DR_DT_Msk)) >> RTC_DR_DU_Pos] - 1) * 86400) + + (stm32l0_rtc_bcd_to_int[(rtc_tr & (RTC_TR_HU_Msk | RTC_TR_HT_Msk)) >> RTC_TR_HU_Pos] * 3600) + + (stm32l0_rtc_bcd_to_int[(rtc_tr & (RTC_TR_MNU_Msk | RTC_TR_MNT_Msk)) >> RTC_TR_MNU_Pos] * 60) + + (stm32l0_rtc_bcd_to_int[(rtc_tr & (RTC_TR_SU_Msk | RTC_TR_ST_Msk)) >> RTC_TR_SU_Pos])); + *p_subseconds = ((STM32L0_RTC_PREDIV_S - 1) - (rtc_ssr & (STM32L0_RTC_PREDIV_S - 1))) * STM32L0_RTC_PREDIV_A; } -void stm32l0_rtc_get_calendar(stm32l0_rtc_calendar_t *p_calendar) +__attribute__((optimize("O3"))) void stm32l0_rtc_clock_calendar(stm32l0_rtc_calendar_t *p_calendar) { uint32_t rtc_ssr, rtc_tr, rtc_dr; @@ -248,7 +253,7 @@ void stm32l0_rtc_get_calendar(stm32l0_rtc_calendar_t *p_calendar) rtc_dr = RTC->DR; } while (rtc_ssr != RTC->SSR); - + p_calendar->subseconds = ((STM32L0_RTC_PREDIV_S - 1) - (rtc_ssr & (STM32L0_RTC_PREDIV_S - 1))) * STM32L0_RTC_PREDIV_A; p_calendar->seconds = stm32l0_rtc_bcd_to_int[(rtc_tr & (RTC_TR_SU_Msk | RTC_TR_ST_Msk)) >> RTC_TR_SU_Pos]; p_calendar->minutes = stm32l0_rtc_bcd_to_int[(rtc_tr & (RTC_TR_MNU_Msk | RTC_TR_MNT_Msk)) >> RTC_TR_MNU_Pos]; @@ -258,6 +263,100 @@ void stm32l0_rtc_get_calendar(stm32l0_rtc_calendar_t *p_calendar) p_calendar->year = stm32l0_rtc_bcd_to_int[(rtc_dr & (RTC_DR_YU_Msk | RTC_DR_YT_Msk)) >> RTC_DR_YU_Pos]; } +void stm32l0_rtc_get_time(uint32_t *p_seconds, uint16_t *p_subseconds) +{ + uint32_t r_seconds; + uint16_t r_subseconds; + + stm32l0_rtc_clock_time(&r_seconds, &r_subseconds); + stm32l0_rtc_time_offset(r_seconds, r_subseconds, stm32l0_rtc_device.reference_seconds, stm32l0_rtc_device.reference_subseconds, &r_seconds, &r_subseconds); + + *p_seconds = r_seconds; + *p_subseconds = r_subseconds; +} + +static void stm32l0_rtc_modify_calendar(uint32_t mask, const stm32l0_rtc_calendar_t *calendar) +{ + stm32l0_rtc_calendar_t before, after; + uint32_t seconds, b_seconds, a_seconds; + uint16_t subseconds, b_subseconds, a_subseconds; + + stm32l0_rtc_clock_time(&seconds, &subseconds); + + if (stm32l0_rtc_device.adjust_subseconds < 0) + { + if ((int)subseconds < -stm32l0_rtc_device.adjust_subseconds) + { + seconds -= 1; + subseconds += 32768; + } + + subseconds += stm32l0_rtc_device.adjust_subseconds; + } + else + { + subseconds += stm32l0_rtc_device.adjust_subseconds; + + if (subseconds >= 32768) + { + seconds += 1; + subseconds -= 32768; + } + } + + b_seconds = seconds + stm32l0_rtc_device.offset_seconds; + b_subseconds = subseconds; + + stm32l0_rtc_time_to_calendar(b_seconds, b_subseconds, &before); + + after.subseconds = before.subseconds; + after.seconds = (mask & STM32L0_RTC_CALENDAR_MASK_SECONDS) ? calendar->seconds : before.seconds; + after.minutes = (mask & STM32L0_RTC_CALENDAR_MASK_MINUTES) ? calendar->minutes : before.minutes; + after.hours = (mask & STM32L0_RTC_CALENDAR_MASK_HOURS) ? calendar->hours : before.hours; + after.day = (mask & STM32L0_RTC_CALENDAR_MASK_DAY) ? calendar->day : before.day; + after.month = (mask & STM32L0_RTC_CALENDAR_MASK_MONTH) ? calendar->month : before.month; + after.year = (mask & STM32L0_RTC_CALENDAR_MASK_YEAR) ? calendar->year : before.year; + + stm32l0_rtc_calendar_to_time(&after, &a_seconds, &a_subseconds); + + stm32l0_rtc_device.offset_seconds = a_seconds - seconds; + + RTC->BKP3R = stm32l0_rtc_device.offset_seconds; +} + +void stm32l0_rtc_get_calendar(stm32l0_rtc_calendar_t *p_calendar) +{ + uint32_t seconds; + uint16_t subseconds; + + stm32l0_rtc_clock_time(&seconds, &subseconds); + + if (stm32l0_rtc_device.adjust_subseconds < 0) + { + if ((int)subseconds < -stm32l0_rtc_device.adjust_subseconds) + { + seconds -= 1; + subseconds += 32768; + } + + subseconds += stm32l0_rtc_device.adjust_subseconds; + } + else + { + subseconds += stm32l0_rtc_device.adjust_subseconds; + + if (subseconds >= 32768) + { + seconds += 1; + subseconds -= 32768; + } + } + + seconds = seconds + stm32l0_rtc_device.offset_seconds; + + stm32l0_rtc_time_to_calendar(seconds, subseconds, p_calendar); +} + void stm32l0_rtc_set_calendar(unsigned int mask, const stm32l0_rtc_calendar_t *calendar) { if (__get_IPSR() == 0) @@ -287,30 +386,16 @@ uint32_t stm32l0_rtc_get_subseconds(void) return ((STM32L0_RTC_PREDIV_S - 1) - (RTC->SSR & (STM32L0_RTC_PREDIV_S - 1))) * STM32L0_RTC_PREDIV_A; } -void stm32l0_rtc_adjust_subseconds(int32_t delta) +void stm32l0_rtc_set_adjust(int32_t adjust) { - if (delta > 0) - { - if (delta > 32768) - { - delta = 32768; - } - - RTC->SHIFTR = RTC_SHIFTR_ADD1S | (((uint32_t)(32768 - delta) / STM32L0_RTC_PREDIV_A) << RTC_SHIFTR_SUBFS_Pos); - } - else - { - if (delta < -32767) - { - delta = -32767; - } + stm32l0_rtc_device.adjust_subseconds = adjust; - RTC->SHIFTR = (((uint32_t)(-delta) / STM32L0_RTC_PREDIV_A) << RTC_SHIFTR_SUBFS_Pos); - } + RTC->BKP4R = (RTC->BKP4R & ~0xfff00000) | ((stm32l0_rtc_device.adjust_subseconds / STM32L0_RTC_PREDIV_A) << 20); +} - while (RTC->ISR & RTC_ISR_SHPF) - { - } +int32_t stm32l0_rtc_get_adjust(void) +{ + return stm32l0_rtc_device.adjust_subseconds; } void stm32l0_rtc_set_calibration(int32_t calibration) @@ -339,9 +424,12 @@ void stm32l0_rtc_set_calibration(int32_t calibration) } } -void stm32l0_rtc_alarm_attach(unsigned int match, const stm32l0_rtc_alarm_t *alarm, stm32l0_rtc_callback_t callback, void *context) +bool stm32l0_rtc_alarm_start(const stm32l0_rtc_calendar_t *alarm, stm32l0_rtc_callback_t callback, void *context) { - uint32_t n_alrmr; + uint32_t seconds; + uint16_t subseconds; + uint32_t primask; + stm32l0_rtc_calendar_t calendar; armv6m_atomic_and(&RTC->CR, ~(RTC_CR_ALRAIE | RTC_CR_ALRAE)); armv6m_atomic_modify(&RTC->ISR, ~RTC_ISR_INIT, ~(RTC_ISR_ALRAF | RTC_ISR_INIT)); @@ -349,55 +437,67 @@ void stm32l0_rtc_alarm_attach(unsigned int match, const stm32l0_rtc_alarm_t *ala stm32l0_rtc_device.alarm_callback = callback; stm32l0_rtc_device.alarm_context = context; - n_alrmr = 0; - - if (match & STM32L0_RTC_ALARM_MATCH_SECONDS) - { - n_alrmr |= (stm32l0_rtc_int_to_bcd[alarm->seconds] << RTC_ALRMAR_SU_Pos); - } - else - { - n_alrmr |= RTC_ALRMAR_MSK1; - } - - if (match & STM32L0_RTC_ALARM_MATCH_MINUTES) - { - n_alrmr |= (stm32l0_rtc_int_to_bcd[alarm->minutes] << RTC_ALRMAR_MNU_Pos); - } - else - { - n_alrmr |= RTC_ALRMAR_MSK2; - } - - if (match & STM32L0_RTC_ALARM_MATCH_HOURS) + stm32l0_rtc_calendar_to_time(alarm, &seconds, &subseconds); + + if (stm32l0_rtc_device.adjust_subseconds < 0) { - n_alrmr |= (stm32l0_rtc_int_to_bcd[alarm->hours] << RTC_ALRMAR_HU_Pos); + if ((int)subseconds < -stm32l0_rtc_device.adjust_subseconds) + { + seconds -= 1; + subseconds += 32768; + } + + subseconds += stm32l0_rtc_device.adjust_subseconds; } - else + else { - n_alrmr |= RTC_ALRMAR_MSK3; + subseconds += stm32l0_rtc_device.adjust_subseconds; + + if (subseconds >= 32768) + { + seconds += 1; + subseconds -= 32768; + } } + + seconds -= stm32l0_rtc_device.offset_seconds; + + stm32l0_rtc_time_to_calendar(seconds, subseconds, &stm32l0_rtc_device.alarm_stop); + + RTC->ALRMAR = ((stm32l0_rtc_int_to_bcd[stm32l0_rtc_device.alarm_stop.seconds] << RTC_ALRMAR_SU_Pos) | + (stm32l0_rtc_int_to_bcd[stm32l0_rtc_device.alarm_stop.minutes] << RTC_ALRMAR_MNU_Pos) | + (stm32l0_rtc_int_to_bcd[stm32l0_rtc_device.alarm_stop.hours] << RTC_ALRMAR_HU_Pos) | + (stm32l0_rtc_int_to_bcd[stm32l0_rtc_device.alarm_stop.day] << RTC_ALRMAR_DU_Pos)); - if (match & STM32L0_RTC_ALARM_MATCH_DAY) - { - n_alrmr |= (stm32l0_rtc_int_to_bcd[alarm->day] << RTC_ALRMAR_DU_Pos); - } - else - { - n_alrmr |= RTC_ALRMAR_MSK4; - } + RTC->ALRMASSR = ((STM32L0_RTC_PREDIV_S - 1) - (stm32l0_rtc_device.alarm_stop.subseconds / STM32L0_RTC_PREDIV_A)) | STM32L0_RTC_ALRMSSR_MASKSS; + + primask = __get_PRIMASK(); + + __disable_irq(); + + stm32l0_rtc_device.alarm_busy = 1; + + RTC->CR |= (RTC_CR_ALRAIE | RTC_CR_ALRAE); + + __set_PRIMASK(primask); - while (!(RTC->ISR & RTC_ISR_ALRAWF)) + stm32l0_rtc_clock_calendar(&calendar); + + if (stm32l0_rtc_calendar_compare(&calendar, &stm32l0_rtc_device.alarm_stop) >= 0) { + if (stm32l0_rtc_device.alarm_busy) + { + armv6m_atomic_and(&RTC->CR, ~(RTC_CR_ALRAIE | RTC_CR_ALRAE)); + armv6m_atomic_modify(&RTC->ISR, ~RTC_ISR_INIT, ~(RTC_ISR_ALRAF | RTC_ISR_INIT)); + + return false; + } } - - RTC->ALRMAR = n_alrmr; - RTC->ALRMASSR = 0; - - armv6m_atomic_or(&RTC->CR, (RTC_CR_ALRAIE | RTC_CR_ALRAE)); + + return true; } -void stm32l0_rtc_alarm_detach(void) +void stm32l0_rtc_alarm_stop(void) { stm32l0_rtc_device.alarm_callback = NULL; stm32l0_rtc_device.alarm_context = NULL; @@ -471,53 +571,6 @@ static void stm32l0_rtc_timer_routine(void) } } -static void stm32l0_rtc_timer_sync(const stm32l0_rtc_calendar_t *stop, const stm32l0_rtc_calendar_t *start) -{ - if (stm32l0_rtc_device.timer_busy) - { - stm32l0_rtc_device.timer_busy = 0; - - stm32l0_rtc_timer_callout(stop); - } - - if (armv6m_atomic_sub(&stm32l0_rtc_device.timer_events, 1) == 1) - { - if (stm32l0_rtc_device.timer_queue) - { - stm32l0_rtc_timer_alarm(start); - } - } -} - -static void stm32l0_rtc_timer_sync_1(uint32_t c0, uint32_t c1) -{ - stm32l0_rtc_calendar_t stop; - - if (stm32l0_rtc_device.timer_busy) - { - stm32l0_rtc_device.timer_busy = 0; - - stm32l0_rtc_calendar_unpack(c0, c1, &stop); - - stm32l0_rtc_timer_callout(&stop); - } -} - -static void stm32l0_rtc_timer_sync_2(uint32_t c0, uint32_t c1) -{ - stm32l0_rtc_calendar_t start; - - if (armv6m_atomic_sub(&stm32l0_rtc_device.timer_events, 1) == 1) - { - if (stm32l0_rtc_device.timer_queue) - { - stm32l0_rtc_calendar_unpack(c0, c1, &start); - - stm32l0_rtc_timer_alarm(&start); - } - } -} - static void stm32l0_rtc_timer_alarm(const stm32l0_rtc_calendar_t *start) { int32_t seconds, d_seconds; @@ -563,7 +616,7 @@ static void stm32l0_rtc_timer_alarm(const stm32l0_rtc_calendar_t *start) if (stm32l0_rtc_device.timer_busy) { - stm32l0_rtc_get_calendar(&calendar); + stm32l0_rtc_clock_calendar(&calendar); stm32l0_rtc_calendar_delta(&calendar, &stm32l0_rtc_device.timer_stop, &d_seconds, &d_subseconds); if (d_seconds >= 0) @@ -594,7 +647,7 @@ static void stm32l0_rtc_timer_alarm(const stm32l0_rtc_calendar_t *start) */ do { - stm32l0_rtc_get_calendar(&calendar); + stm32l0_rtc_clock_calendar(&calendar); } while (!stm32l0_rtc_device.timer_events && (stm32l0_rtc_calendar_compare(&calendar, &stm32l0_rtc_device.timer_stop) < 0)); @@ -649,7 +702,7 @@ static void stm32l0_rtc_timer_insert(stm32l0_rtc_timer_t *timer, int32_t seconds timer->subseconds = 0; } - stm32l0_rtc_get_calendar(&calendar); + stm32l0_rtc_clock_calendar(&calendar); if (absolute) { @@ -801,21 +854,6 @@ static void stm32l0_rtc_timer_release(stm32l0_rtc_timer_t *timer) (*callback)(timer->context, timer); } -void stm32l0_rtc_timer_reference(uint32_t *p_seconds, uint16_t *p_subseconds) -{ - uint32_t r_seconds; - uint16_t r_subseconds; - - stm32l0_rtc_calendar_t calendar; - - stm32l0_rtc_get_calendar(&calendar); - stm32l0_rtc_calendar_to_time(&calendar, &r_seconds, &r_subseconds); - stm32l0_rtc_time_offset(r_seconds, r_subseconds, stm32l0_rtc_device.reference_seconds, stm32l0_rtc_device.reference_subseconds, &r_seconds, &r_subseconds); - - *p_seconds = r_seconds; - *p_subseconds = r_subseconds; -} - void stm32l0_rtc_timer_create(stm32l0_rtc_timer_t *timer, stm32l0_rtc_timer_callback_t callback, void *context) { timer->next = NULL; @@ -858,13 +896,13 @@ bool stm32l0_rtc_timer_start(stm32l0_rtc_timer_t *timer, uint32_t seconds, uint1 { success = armv6m_pendsv_enqueue((armv6m_pendsv_routine_t)stm32l0_rtc_timer_insert_2, (void*)timer, seconds); - if (success) - { - if (timer->next == NULL) - { - timer->previous = (void*)~0; - } - } + if (success) + { + if (timer->next == NULL) + { + timer->previous = (void*)~0; + } + } } } @@ -1266,17 +1304,31 @@ void stm32l0_rtc_time_negate(int32_t seconds, uint16_t subseconds, int32_t *p_se void RTC_IRQHandler(void) { + stm32l0_rtc_calendar_t calendar; + if (EXTI->PR & EXTI_PR_PIF17) { EXTI->PR = EXTI_PR_PIF17; if (RTC->ISR & RTC_ISR_ALRAF) { - armv6m_atomic_modify(&RTC->ISR, ~RTC_ISR_INIT, ~(RTC_ISR_ALRAF | RTC_ISR_INIT)); - - if (stm32l0_rtc_device.alarm_callback) + stm32l0_rtc_clock_calendar(&calendar); + + if (stm32l0_rtc_calendar_compare(&calendar, &stm32l0_rtc_device.alarm_stop) >= 0) + { + armv6m_atomic_and(&RTC->CR, ~(RTC_CR_ALRAIE | RTC_CR_ALRAE)); + armv6m_atomic_modify(&RTC->ISR, ~RTC_ISR_INIT, ~(RTC_ISR_ALRAF | RTC_ISR_INIT)); + + stm32l0_rtc_device.alarm_busy = 0; + + if (stm32l0_rtc_device.alarm_callback) + { + (*stm32l0_rtc_device.alarm_callback)(stm32l0_rtc_device.alarm_context); + } + } + else { - (*stm32l0_rtc_device.alarm_callback)(stm32l0_rtc_device.alarm_context); + armv6m_atomic_modify(&RTC->ISR, ~RTC_ISR_INIT, ~(RTC_ISR_ALRAF | RTC_ISR_INIT)); } } diff --git a/system/STM32L0xx/Source/stm32l0_system.c b/system/STM32L0xx/Source/stm32l0_system.c index c537cb41..ec95fd4f 100644 --- a/system/STM32L0xx/Source/stm32l0_system.c +++ b/system/STM32L0xx/Source/stm32l0_system.c @@ -293,7 +293,7 @@ void SystemInit(void) void stm32l0_system_initialize(uint32_t hclk, uint32_t pclk1, uint32_t pclk2, uint32_t lseclk, uint32_t hseclk, uint32_t option) { - uint32_t primask, n, count, bkp4r, hsiclk, hsitrim, clk, trim, tc0, tc1; + uint32_t primask, n, count, hsiclk, hsitrim, clk, trim, tc0, tc1; primask = __get_PRIMASK(); @@ -339,7 +339,7 @@ void stm32l0_system_initialize(uint32_t hclk, uint32_t pclk1, uint32_t pclk2, ui stm32l0_system_device.wakeup = 0; if (RCC->CSR & (RCC_CSR_LPWRRSTF | RCC_CSR_OBLRSTF)) - { + { stm32l0_system_device.reset = STM32L0_SYSTEM_RESET_OTHER; } @@ -373,9 +373,7 @@ void stm32l0_system_initialize(uint32_t hclk, uint32_t pclk1, uint32_t pclk2, ui stm32l0_system_device.hseclk = hseclk; stm32l0_system_device.lsiclk = 37000; - bkp4r = RTC->BKP4R; - - if ((stm32l0_system_device.reset == STM32L0_SYSTEM_RESET_STANDBY) && (bkp4r & 0x0000ffff)) + if (stm32l0_system_device.reset == STM32L0_SYSTEM_RESET_STANDBY) { /* Use saved initialization data from BKP4R when returning from STANDBY to avoid * calbibration. @@ -388,7 +386,7 @@ void stm32l0_system_initialize(uint32_t hclk, uint32_t pclk1, uint32_t pclk2, ui stm32l0_system_device.lsi |= 0x80; } - if (bkp4r & 0x00010000) + if (RTC->BKP4R & 0x00004000) { if (option & STM32L0_SYSTEM_OPTION_HSE_BYPASS) { @@ -400,11 +398,9 @@ void stm32l0_system_initialize(uint32_t hclk, uint32_t pclk1, uint32_t pclk2, ui stm32l0_system_device.hseclk = 0; } - stm32l0_system_device.lsiclk = (bkp4r & 0x0000ffff); + stm32l0_system_device.lsiclk = 29000 + (RTC->BKP4R & 0x00003fff); /* 29k to 45k, typical 37k */ - RCC->ICSCR = ((RCC->ICSCR & ~(RCC_ICSCR_MSITRIM | RCC_ICSCR_HSITRIM)) | - (((bkp4r & 0xff000000) >> 24) << RCC_ICSCR_MSITRIM_Pos) | - (((bkp4r & 0x00f80000) >> 19) << RCC_ICSCR_HSITRIM_Pos)); + RCC->ICSCR = ((RCC->ICSCR & ~RCC_ICSCR_HSITRIM) | (((RTC->BKP4R & 0x000f8000) >> 15) << RCC_ICSCR_HSITRIM_Pos)); } else { @@ -453,11 +449,13 @@ void stm32l0_system_initialize(uint32_t hclk, uint32_t pclk1, uint32_t pclk2, ui if (++count >= 200000) { stm32l0_system_device.hseclk = 0; - - RCC->CR &= ~RCC_CR_HSEON; + + RCC->CR &= ~RCC_CR_HSEBYP; break; } } + + RCC->CR &= ~RCC_CR_HSEON; } RCC->CSR |= RCC_CSR_LSION; @@ -598,22 +596,21 @@ void stm32l0_system_initialize(uint32_t hclk, uint32_t pclk1, uint32_t pclk2, ui } /* Save cablibration to BKP4R for reuse when returning from STANDBY. + * + * 0x00003fff is lsiclk - 29000 + * 0x00004000 is HSE present + * 0x000f8000 is HSITRIM + * 0xfff00000 is RTC subseconds offset */ - bkp4r = stm32l0_system_device.lsiclk & 0x0000ffff;; + + RTC->BKP4R = (RTC->BKP4R & 0xfff00000) | ((stm32l0_system_device.lsiclk - 29000) & 0x00003fff); if (stm32l0_system_device.hseclk) { - bkp4r |= 0x00010000; + RTC->BKP4R |= 0x00004000; } - bkp4r |= (((RCC->ICSCR & RCC_ICSCR_HSITRIM) >> RCC_ICSCR_HSITRIM_Pos) << 19); - bkp4r |= (((RCC->ICSCR & RCC_ICSCR_MSITRIM) >> RCC_ICSCR_MSITRIM_Pos) << 24); - - /* 0x00020000 is unused. - * 0x00040000 is the STM32 BOOTLOADER flag. - */ - - RTC->BKP4R = bkp4r; + RTC->BKP4R |= (((RCC->ICSCR & RCC_ICSCR_HSITRIM) >> RCC_ICSCR_HSITRIM_Pos) << 15); } /* Setup some default sleep mode clock gating. @@ -650,8 +647,7 @@ void stm32l0_system_initialize(uint32_t hclk, uint32_t pclk1, uint32_t pclk2, ui bool stm32l0_system_sysclk_configure(uint32_t hclk, uint32_t pclk1, uint32_t pclk2) { stm32l0_system_notify_t *entry; - uint32_t primask, sysclk, hpre, ppre1, ppre2, msirange, pllmul, plldiv, seconds; - uint16_t subseconds; + uint32_t primask, sysclk, hpre, ppre1, ppre2, msirange, pllmul, plldiv; if (hclk < 8000000) { @@ -787,6 +783,8 @@ bool stm32l0_system_sysclk_configure(uint32_t hclk, uint32_t pclk1, uint32_t pcl return false; } + armv6m_systick_disable(); + RCC->APB1ENR |= RCC_APB1ENR_PWREN; FLASH->ACR = FLASH_ACR_PRFTEN | FLASH_ACR_LATENCY; @@ -965,9 +963,7 @@ bool stm32l0_system_sysclk_configure(uint32_t hclk, uint32_t pclk1, uint32_t pcl stm32l0_system_device.pclk1 = pclk1; stm32l0_system_device.pclk2 = pclk2; - stm32l0_rtc_timer_reference(&seconds, &subseconds); - - armv6m_systick_sync(seconds, subseconds); + armv6m_systick_enable(); for (entry = stm32l0_system_device.notify; entry; entry = entry->next) { @@ -1466,8 +1462,7 @@ uint32_t stm32l0_system_policy(uint32_t policy) void stm32l0_system_sleep(uint32_t policy, uint32_t timeout) { - uint32_t primask, n_policy, seconds; - uint16_t subseconds; + uint32_t primask, n_policy; stm32l0_gpio_state_t gpio_state; stm32l0_system_notify_t *entry; @@ -1633,10 +1628,6 @@ void stm32l0_system_sleep(uint32_t policy, uint32_t timeout) (*entry->callback)(entry->context, STM32L0_SYSTEM_EVENT_STOP_LEAVE); } } - - stm32l0_rtc_timer_reference(&seconds, &subseconds); - - armv6m_systick_sync(seconds, subseconds); } else { diff --git a/system/STM32L0xx/Source/stm32l0_timer.c b/system/STM32L0xx/Source/stm32l0_timer.c index b291f1b0..e5271521 100644 --- a/system/STM32L0xx/Source/stm32l0_timer.c +++ b/system/STM32L0xx/Source/stm32l0_timer.c @@ -172,7 +172,7 @@ uint32_t stm32l0_timer_clock(stm32l0_timer_t *timer) #if defined(STM32L072xx) || defined(STM32L082xx) || (timer->instance == STM32L0_TIMER_INSTANCE_TIM7) #endif /* STM32L072xx || STM32L082xx */ - ) + ) { pclk = stm32l0_system_pclk1(); } diff --git a/system/STM32L0xx/Source/stm32l0_uart.c b/system/STM32L0xx/Source/stm32l0_uart.c index 1eee9063..67926734 100644 --- a/system/STM32L0xx/Source/stm32l0_uart.c +++ b/system/STM32L0xx/Source/stm32l0_uart.c @@ -1196,12 +1196,12 @@ bool stm32l0_uart_configure(stm32l0_uart_t *uart, uint32_t baudrate, uint32_t op * STOP mode. Hence the byte in USART->RDR will be sent directly to * DMA and the uart->rx_sequence logic in stm32l0_uart_interrupt() * will block STOP mode, till the next IDLE condition. - * - * USART/LPUART can wakeup from STOP with the LowPower Voltage Regulator - * up to 19200 baud. Above that the Main Voltage Regulator has to be used. - * Hence STM32L0_SYSTEM_LOCK_REGULATOR. USART/LPUART wakeup time is 12uS - * with PWR_CR_LPSDSR, opposed to 8.7uS without (11.4uS and 8.1uS in - * voltage range 1). + * + * USART/LPUART can wakeup from STOP with the LowPower Voltage Regulator + * up to 19200 baud. Above that the Main Voltage Regulator has to be used. + * Hence STM32L0_SYSTEM_LOCK_REGULATOR. USART/LPUART wakeup time is 12uS + * with PWR_CR_LPSDSR, opposed to 8.7uS without (11.4uS and 8.1uS in + * voltage range 1). * * Above 38400 baud HSI16 cannot wakeup fast enough to guarantee a proper * sampled signal. That means that HSI16 has to be kept alive during STOP diff --git a/variants/Cicada-L082CZ/variant.cpp b/variants/Cicada-L082CZ/variant.cpp index 34038fa6..89f64b55 100644 --- a/variants/Cicada-L082CZ/variant.cpp +++ b/variants/Cicada-L082CZ/variant.cpp @@ -30,7 +30,7 @@ #include "wiring_private.h" #define PWM_INSTANCE_TIM2 0 -#define PWM_INSTANCE_TIM3 1 +#define PWM_INSTANCE_TIM22 1 /* * Pins descriptions @@ -40,7 +40,7 @@ extern const PinDescription g_APinDescription[PINS_COUNT] = // 0..13 - Digital pins { GPIOA, STM32L0_GPIO_PIN_MASK(STM32L0_GPIO_PIN_PA10), STM32L0_GPIO_PIN_PA10, (PIN_ATTR_EXTI), PWM_INSTANCE_NONE, PWM_CHANNEL_NONE, ADC_CHANNEL_NONE }, { GPIOA, STM32L0_GPIO_PIN_MASK(STM32L0_GPIO_PIN_PA9), STM32L0_GPIO_PIN_PA9, (PIN_ATTR_EXTI), PWM_INSTANCE_NONE, PWM_CHANNEL_NONE, ADC_CHANNEL_NONE }, - { GPIOB, STM32L0_GPIO_PIN_MASK(STM32L0_GPIO_PIN_PB5), STM32L0_GPIO_PIN_PB5_TIM3_CH2, (PIN_ATTR_EXTI), PWM_INSTANCE_TIM3, PWM_CHANNEL_2, ADC_CHANNEL_NONE }, + { GPIOB, STM32L0_GPIO_PIN_MASK(STM32L0_GPIO_PIN_PB5), STM32L0_GPIO_PIN_PB5_TIM22_CH2, (PIN_ATTR_EXTI), PWM_INSTANCE_TIM22, PWM_CHANNEL_2, ADC_CHANNEL_NONE }, { GPIOB, STM32L0_GPIO_PIN_MASK(STM32L0_GPIO_PIN_PB6), STM32L0_GPIO_PIN_PB6, (PIN_ATTR_EXTI), PWM_INSTANCE_NONE, PWM_CHANNEL_NONE, ADC_CHANNEL_NONE }, { GPIOB, STM32L0_GPIO_PIN_MASK(STM32L0_GPIO_PIN_PB7), STM32L0_GPIO_PIN_PB7, (PIN_ATTR_EXTI), PWM_INSTANCE_NONE, PWM_CHANNEL_NONE, ADC_CHANNEL_NONE }, { GPIOB, STM32L0_GPIO_PIN_MASK(STM32L0_GPIO_PIN_PB2), STM32L0_GPIO_PIN_PB2, (PIN_ATTR_EXTI), PWM_INSTANCE_NONE, PWM_CHANNEL_NONE, ADC_CHANNEL_NONE }, @@ -88,7 +88,7 @@ extern const PinDescription g_APinDescription[PINS_COUNT] = extern const unsigned int g_PWMInstances[PWM_INSTANCE_COUNT] = { STM32L0_TIMER_INSTANCE_TIM2, - STM32L0_TIMER_INSTANCE_TIM3, + STM32L0_TIMER_INSTANCE_TIM22, }; diff --git a/variants/Cricket-L082CZ/variant.cpp b/variants/Cricket-L082CZ/variant.cpp index 4bf3010f..f7d615d8 100644 --- a/variants/Cricket-L082CZ/variant.cpp +++ b/variants/Cricket-L082CZ/variant.cpp @@ -30,7 +30,7 @@ #include "wiring_private.h" #define PWM_INSTANCE_TIM2 0 -#define PWM_INSTANCE_TIM3 1 +#define PWM_INSTANCE_TIM22 1 /* * Pins descriptions @@ -40,7 +40,7 @@ extern const PinDescription g_APinDescription[PINS_COUNT] = // 0..13 - Digital pins { NULL, STM32L0_GPIO_PIN_MASK(STM32L0_GPIO_PIN_PA10), STM32L0_GPIO_PIN_PA10, (PIN_ATTR_EXTI), PWM_INSTANCE_NONE, PWM_CHANNEL_NONE, ADC_CHANNEL_NONE }, { NULL, STM32L0_GPIO_PIN_MASK(STM32L0_GPIO_PIN_PA9), STM32L0_GPIO_PIN_PA9, (PIN_ATTR_EXTI), PWM_INSTANCE_NONE, PWM_CHANNEL_NONE, ADC_CHANNEL_NONE }, - { GPIOB, STM32L0_GPIO_PIN_MASK(STM32L0_GPIO_PIN_PB5), STM32L0_GPIO_PIN_PB5_TIM3_CH2, (PIN_ATTR_EXTI), PWM_INSTANCE_TIM3, PWM_CHANNEL_2, ADC_CHANNEL_NONE }, + { GPIOB, STM32L0_GPIO_PIN_MASK(STM32L0_GPIO_PIN_PB5), STM32L0_GPIO_PIN_PB5_TIM22_CH2, (PIN_ATTR_EXTI), PWM_INSTANCE_TIM22, PWM_CHANNEL_2, ADC_CHANNEL_NONE }, { GPIOB, STM32L0_GPIO_PIN_MASK(STM32L0_GPIO_PIN_PB6), STM32L0_GPIO_PIN_PB6, (PIN_ATTR_EXTI), PWM_INSTANCE_NONE, PWM_CHANNEL_NONE, ADC_CHANNEL_NONE }, { GPIOB, STM32L0_GPIO_PIN_MASK(STM32L0_GPIO_PIN_PB7), STM32L0_GPIO_PIN_PB7, (PIN_ATTR_EXTI), PWM_INSTANCE_NONE, PWM_CHANNEL_NONE, ADC_CHANNEL_NONE }, { NULL, STM32L0_GPIO_PIN_MASK(STM32L0_GPIO_PIN_PB2), STM32L0_GPIO_PIN_PB2, (PIN_ATTR_EXTI), PWM_INSTANCE_NONE, PWM_CHANNEL_NONE, ADC_CHANNEL_NONE }, @@ -88,7 +88,7 @@ extern const PinDescription g_APinDescription[PINS_COUNT] = extern const unsigned int g_PWMInstances[PWM_INSTANCE_COUNT] = { STM32L0_TIMER_INSTANCE_TIM2, - STM32L0_TIMER_INSTANCE_TIM3, + STM32L0_TIMER_INSTANCE_TIM22, }; diff --git a/variants/Cricket-L082CZ/variant.h b/variants/Cricket-L082CZ/variant.h index 6714e386..8b7fa743 100644 --- a/variants/Cricket-L082CZ/variant.h +++ b/variants/Cricket-L082CZ/variant.h @@ -45,6 +45,7 @@ #define STM32L0_CONFIG_VBAT_SCALE ((float)1.27) #define STM32L0_CONFIG_PIN_GNSS_ENABLE STM32L0_GPIO_PIN_PB2 +#define STM32L0_CONFIG_PIN_GNSS_PPS STM32L0_GPIO_PIN_PB7 #define STM32L0_CONFIG_PIN_GNSS_RX STM32L0_GPIO_PIN_PA10_USART1_RX #define STM32L0_CONFIG_PIN_GNSS_TX STM32L0_GPIO_PIN_PA9_USART1_TX diff --git a/variants/Grasshopper-L082CZ/variant.cpp b/variants/Grasshopper-L082CZ/variant.cpp index 84ec8296..bb332b4c 100644 --- a/variants/Grasshopper-L082CZ/variant.cpp +++ b/variants/Grasshopper-L082CZ/variant.cpp @@ -30,7 +30,7 @@ #include "wiring_private.h" #define PWM_INSTANCE_TIM2 0 -#define PWM_INSTANCE_TIM3 1 +#define PWM_INSTANCE_TIM22 1 /* * Pins descriptions @@ -40,7 +40,7 @@ extern const PinDescription g_APinDescription[PINS_COUNT] = // 0..13 - Digital pins { GPIOA, STM32L0_GPIO_PIN_MASK(STM32L0_GPIO_PIN_PA10), STM32L0_GPIO_PIN_PA10, (PIN_ATTR_EXTI), PWM_INSTANCE_NONE, PWM_CHANNEL_NONE, ADC_CHANNEL_NONE }, { GPIOA, STM32L0_GPIO_PIN_MASK(STM32L0_GPIO_PIN_PA9), STM32L0_GPIO_PIN_PA9, (PIN_ATTR_EXTI), PWM_INSTANCE_NONE, PWM_CHANNEL_NONE, ADC_CHANNEL_NONE }, - { GPIOB, STM32L0_GPIO_PIN_MASK(STM32L0_GPIO_PIN_PB5), STM32L0_GPIO_PIN_PB5_TIM3_CH2, (PIN_ATTR_EXTI), PWM_INSTANCE_TIM3, PWM_CHANNEL_2, ADC_CHANNEL_NONE }, + { GPIOB, STM32L0_GPIO_PIN_MASK(STM32L0_GPIO_PIN_PB5), STM32L0_GPIO_PIN_PB5_TIM22_CH2, (PIN_ATTR_EXTI), PWM_INSTANCE_TIM22, PWM_CHANNEL_2, ADC_CHANNEL_NONE }, { GPIOB, STM32L0_GPIO_PIN_MASK(STM32L0_GPIO_PIN_PB6), STM32L0_GPIO_PIN_PB6, (PIN_ATTR_EXTI), PWM_INSTANCE_NONE, PWM_CHANNEL_NONE, ADC_CHANNEL_NONE }, { GPIOB, STM32L0_GPIO_PIN_MASK(STM32L0_GPIO_PIN_PB7), STM32L0_GPIO_PIN_PB7, (PIN_ATTR_EXTI), PWM_INSTANCE_NONE, PWM_CHANNEL_NONE, ADC_CHANNEL_NONE }, { GPIOB, STM32L0_GPIO_PIN_MASK(STM32L0_GPIO_PIN_PB2), STM32L0_GPIO_PIN_PB2, (PIN_ATTR_EXTI), PWM_INSTANCE_NONE, PWM_CHANNEL_NONE, ADC_CHANNEL_NONE }, @@ -81,7 +81,7 @@ extern const PinDescription g_APinDescription[PINS_COUNT] = extern const unsigned int g_PWMInstances[PWM_INSTANCE_COUNT] = { STM32L0_TIMER_INSTANCE_TIM2, - STM32L0_TIMER_INSTANCE_TIM3, + STM32L0_TIMER_INSTANCE_TIM22, };