# HG changeset patch # User Ethan Zonca # Date 2014-09-25 21:28:44 # Node ID 109bc69daf498d4667c0af14fd2a8c57bba6c933 # Parent 1d2e435794e9b3fda39f31ebdc4be6c5424fadf6 Moved eeprom_min to lib diff --git a/Makefile b/Makefile --- a/Makefile +++ b/Makefile @@ -39,6 +39,7 @@ SRC+=stm32l1xx_it.c SRC+=system_stm32l1xx.c SRC+=stm32l100c_discovery.c SRC+=ssd1306.c +SRC+=eeprom_min.c SRC+=stringhelpers.c # Discovery Source Files diff --git a/eeprom_min.c b/eeprom_min.c new file mode 100644 --- /dev/null +++ b/eeprom_min.c @@ -0,0 +1,88 @@ +#include "stm32l100c_discovery.h" + +void Minimal_EEPROM_Unlock(void) +{ + if((FLASH->PECR & FLASH_PECR_PELOCK) != RESET) + { + /* Unlocking the Data memory and FLASH_PECR register access*/ + FLASH->PEKEYR = FLASH_PEKEY1; + FLASH->PEKEYR = FLASH_PEKEY2; + } +} + +void Minimal_EEPROM_Lock(void) +{ + /* Set the PELOCK Bit to lock the data memory and FLASH_PECR register access */ + FLASH->PECR |= FLASH_PECR_PELOCK; +} + +FLASH_Status Minimal_FLASH_GetStatus(void) +{ + FLASH_Status FLASHstatus = FLASH_COMPLETE; + + if((FLASH->SR & FLASH_FLAG_BSY) == FLASH_FLAG_BSY) + { + FLASHstatus = FLASH_BUSY; + } + else + { + if((FLASH->SR & (uint32_t)FLASH_FLAG_WRPERR)!= (uint32_t)0x00) + { + FLASHstatus = FLASH_ERROR_WRP; + } + else + { + if((FLASH->SR & (uint32_t)0x1E00) != (uint32_t)0x00) + { + FLASHstatus = FLASH_ERROR_PROGRAM; + } + else + { + FLASHstatus = FLASH_COMPLETE; + } + } + } + /* Return the FLASH Status */ + return FLASHstatus; +} + +FLASH_Status Minimal_FLASH_WaitForLastOperation(uint32_t Timeout) +{ + __IO FLASH_Status status = FLASH_COMPLETE; + + /* Check for the FLASH Status */ + status = Minimal_FLASH_GetStatus(); + + /* Wait for a FLASH operation to complete or a TIMEOUT to occur */ + while((status == FLASH_BUSY) && (Timeout != 0x00)) + { + status = Minimal_FLASH_GetStatus(); + Timeout--; + } + + if(Timeout == 0x00 ) + { + status = FLASH_TIMEOUT; + } + /* Return the operation status */ + return status; +} + + +void Minimal_EEPROM_ProgramWord(uint32_t Address, uint32_t Data) +{ + // Wait for last operation to be completed + FLASH_Status status = FLASH_COMPLETE; + status = Minimal_FLASH_WaitForLastOperation(FLASH_ER_PRG_TIMEOUT); + + if(status == FLASH_COMPLETE) + { + *(__IO uint32_t *)Address = Data; + + // Wait for last operation to be completed + status = Minimal_FLASH_WaitForLastOperation(FLASH_ER_PRG_TIMEOUT); + } + // Return the Write Status + return status; +} + diff --git a/eeprom_min.h b/eeprom_min.h new file mode 100644 --- /dev/null +++ b/eeprom_min.h @@ -0,0 +1,13 @@ +#ifndef EEPROM_MIN_H +#define EEPROM_MIN_H + +#define EEPROM_BASE_ADDR 0x08080000 +#define EEPROM_BYTE_SIZE 0x0FFF + +void Minimal_EEPROM_Unlock(void); +void Minimal_EEPROM_Lock(void); +FLASH_Status Minimal_FLASH_GetStatus(void); +FLASH_Status Minimal_FLASH_WaitForLastOperation(uint32_t Timeout); +void Minimal_EEPROM_ProgramWord(uint32_t Address, uint32_t Data); + +#endif diff --git a/main.c b/main.c --- a/main.c +++ b/main.c @@ -2,6 +2,7 @@ #include "stm32l100c_discovery.h" #include "ssd1306.h" #include "config.h" +#include "eeprom_min.h" // USB includes #include "hw_config.h" @@ -308,14 +309,6 @@ uint8_t sw_right_last = 0; #define SW_LEFT_PRESSED (sw_left_last == 0 && sw_left == 1) #define SW_RIGHT_PRESSED (sw_right_last == 0 && sw_right == 1) -/* - * uint8_t boottobrew = 0; -#define WINDUP_GUARD_GAIN 100 -uint16_t windup_guard = WINDUP_GUARD_GAIN; -uint16_t k_p = 1; -uint16_t k_i = 1; -uint16_t k_d = 1;*/ - #define EEPROM_ADDR_WINDUP_GUARD 0x001C #define EEPROM_ADDR_BOOTTOBREW 0x0020 #define EEPROM_ADDR_K_P 0x0024 @@ -325,96 +318,6 @@ uint16_t k_d = 1;*/ #define EEPROM_ADDR_BREWTEMP 0x0030 #define EEPROM_ADDR_STEAMTEMP 0x0034 - -#define EEPROM_BASE_ADDR 0x08080000 -#define EEPROM_BYTE_SIZE 0x0FFF - -void Minimal_EEPROM_Unlock(void) -{ - if((FLASH->PECR & FLASH_PECR_PELOCK) != RESET) - { - /* Unlocking the Data memory and FLASH_PECR register access*/ - FLASH->PEKEYR = FLASH_PEKEY1; - FLASH->PEKEYR = FLASH_PEKEY2; - } -} - -void Minimal_EEPROM_Lock(void) -{ - /* Set the PELOCK Bit to lock the data memory and FLASH_PECR register access */ - FLASH->PECR |= FLASH_PECR_PELOCK; -} - -FLASH_Status Minimal_FLASH_GetStatus(void) -{ - FLASH_Status FLASHstatus = FLASH_COMPLETE; - - if((FLASH->SR & FLASH_FLAG_BSY) == FLASH_FLAG_BSY) - { - FLASHstatus = FLASH_BUSY; - } - else - { - if((FLASH->SR & (uint32_t)FLASH_FLAG_WRPERR)!= (uint32_t)0x00) - { - FLASHstatus = FLASH_ERROR_WRP; - } - else - { - if((FLASH->SR & (uint32_t)0x1E00) != (uint32_t)0x00) - { - FLASHstatus = FLASH_ERROR_PROGRAM; - } - else - { - FLASHstatus = FLASH_COMPLETE; - } - } - } - /* Return the FLASH Status */ - return FLASHstatus; -} - -FLASH_Status Minimal_FLASH_WaitForLastOperation(uint32_t Timeout) -{ - __IO FLASH_Status status = FLASH_COMPLETE; - - /* Check for the FLASH Status */ - status = Minimal_FLASH_GetStatus(); - - /* Wait for a FLASH operation to complete or a TIMEOUT to occur */ - while((status == FLASH_BUSY) && (Timeout != 0x00)) - { - status = Minimal_FLASH_GetStatus(); - Timeout--; - } - - if(Timeout == 0x00 ) - { - status = FLASH_TIMEOUT; - } - /* Return the operation status */ - return status; -} - - -void Minimal_EEPROM_ProgramWord(uint32_t Address, uint32_t Data) -{ - // Wait for last operation to be completed - FLASH_Status status = FLASH_COMPLETE; - status = Minimal_FLASH_WaitForLastOperation(FLASH_ER_PRG_TIMEOUT); - - if(status == FLASH_COMPLETE) - { - *(__IO uint32_t *)Address = Data; - - // Wait for last operation to be completed - status = Minimal_FLASH_WaitForLastOperation(FLASH_ER_PRG_TIMEOUT); - } - // Return the Write Status - return status; -} - void save_settings() { Minimal_EEPROM_Unlock(); @@ -434,11 +337,8 @@ void save_setpoints() Minimal_EEPROM_ProgramWord(EEPROM_BASE_ADDR + EEPROM_ADDR_BREWTEMP, setpoint_brew); Minimal_EEPROM_ProgramWord(EEPROM_BASE_ADDR + EEPROM_ADDR_STEAMTEMP, setpoint_steam); Minimal_EEPROM_Lock(); - } - -// TODO: Save/restore temperature setpoint settings void restore_settings() { Minimal_EEPROM_Unlock();