From 1dc6698915a0831c7d4d3c7524506aca050a4888 Mon Sep 17 00:00:00 2001 From: Georg Date: Tue, 7 Nov 2017 15:15:25 +0100 Subject: [PATCH] fixed LED bug, now blinks faster without problems --- Firmware/Chameleon-Mini/Chameleon-Mini.c | 3 ++- Firmware/Chameleon-Mini/LED.c | 2 +- Firmware/Chameleon-Mini/Memory.c | 5 +++++ Firmware/Chameleon-Mini/System.h | 8 ++++++++ 4 files changed, 16 insertions(+), 2 deletions(-) diff --git a/Firmware/Chameleon-Mini/Chameleon-Mini.c b/Firmware/Chameleon-Mini/Chameleon-Mini.c index ff4d241..d969af6 100644 --- a/Firmware/Chameleon-Mini/Chameleon-Mini.c +++ b/Firmware/Chameleon-Mini/Chameleon-Mini.c @@ -17,11 +17,12 @@ int main(void) while(1) { if (SystemTick100ms()) { + LEDTick(); // this has to be the first function called here, since it is time-critical - the functions below may have non-negligible runtimes! + RandomTick(); TerminalTick(); ButtonTick(); LogTick(); - LEDTick(); ApplicationTick(); CommandLineTick(); AntennaLevelTick(); diff --git a/Firmware/Chameleon-Mini/LED.c b/Firmware/Chameleon-Mini/LED.c index edb3ace..d0c8fdc 100644 --- a/Firmware/Chameleon-Mini/LED.c +++ b/Firmware/Chameleon-Mini/LED.c @@ -5,7 +5,7 @@ #include "Terminal/CommandLine.h" #include "System.h" -#define BLINK_PRESCALER 2 /* x LEDTick(); */ +#define BLINK_PRESCALER 1 /* x LEDTick(); */ LEDActionEnum LEDGreenAction = LED_NO_ACTION; LEDActionEnum LEDRedAction = LED_NO_ACTION; diff --git a/Firmware/Chameleon-Mini/Memory.c b/Firmware/Chameleon-Mini/Memory.c index 15e78a3..f82e680 100644 --- a/Firmware/Chameleon-Mini/Memory.c +++ b/Firmware/Chameleon-Mini/Memory.c @@ -10,6 +10,7 @@ #include "Common.h" #include "Settings.h" #include "LEDHook.h" +#include "System.h" #define USE_DMA #define RECV_DMA DMA.CH0 @@ -395,6 +396,8 @@ void MemoryRecall(void) { /* Recall memory from permanent flash */ FlashToFRAM((uint32_t) GlobalSettings.ActiveSettingIdx * MEMORY_SIZE_PER_SETTING, MEMORY_SIZE_PER_SETTING); + + SystemTickClearFlag(); } void MemoryStore(void) @@ -404,6 +407,8 @@ void MemoryStore(void) LEDHook(LED_MEMORY_CHANGED, LED_OFF); LEDHook(LED_MEMORY_STORED, LED_PULSE); + + SystemTickClearFlag(); } bool MemoryUploadBlock(void* Buffer, uint32_t BlockAddress, uint16_t ByteCount) diff --git a/Firmware/Chameleon-Mini/System.h b/Firmware/Chameleon-Mini/System.h index 2fcce7c..45e8fc2 100644 --- a/Firmware/Chameleon-Mini/System.h +++ b/Firmware/Chameleon-Mini/System.h @@ -51,6 +51,14 @@ INLINE bool SystemTick100ms(void) return false; } +INLINE void SystemTickClearFlag(void) +{ + while(RTC.STATUS & RTC_SYNCBUSY_bm) + ; + + RTC.INTFLAGS = RTC_COMPIF_bm; +} + INLINE uint16_t SystemGetSysTick(void) { return SYSTEM_TICK_REGISTER | RTC.CNT; }