123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300 |
- #ifndef __STM8S_FLASH_H
- #define __STM8S_FLASH_H
- #include "stm8s.h"
- #define FLASH_PROG_START_PHYSICAL_ADDRESS ((uint32_t)0x008000)
- #if defined (STM8S208) || defined(STM8S207) || defined(STM8S007) || defined (STM8AF52Ax) || defined (STM8AF62Ax)
- #define FLASH_PROG_END_PHYSICAL_ADDRESS ((uint32_t)0x027FFF)
- #define FLASH_PROG_BLOCKS_NUMBER ((uint16_t)1024)
- #define FLASH_DATA_START_PHYSICAL_ADDRESS ((uint32_t)0x004000)
- #define FLASH_DATA_END_PHYSICAL_ADDRESS ((uint32_t)0x0047FF)
- #define FLASH_DATA_BLOCKS_NUMBER ((uint16_t)16)
- #define FLASH_BLOCK_SIZE ((uint8_t)128)
- #endif
- #if defined(STM8S105) || defined(STM8S005) || defined(STM8AF626x)
- #define FLASH_PROG_END_PHYSICAL_ADDRESS ((uint32_t)0xFFFF)
- #define FLASH_PROG_BLOCKS_NUMBER ((uint16_t)256)
- #define FLASH_DATA_START_PHYSICAL_ADDRESS ((uint32_t)0x004000)
- #define FLASH_DATA_END_PHYSICAL_ADDRESS ((uint32_t)0x0043FF)
- #define FLASH_DATA_BLOCKS_NUMBER ((uint16_t)8)
- #define FLASH_BLOCK_SIZE ((uint8_t)128)
- #endif
- #if defined(STM8S103) || defined(STM8S003) || defined(STM8S001) || defined(STM8S903) || defined(STM8AF622x)
- #define FLASH_PROG_END_PHYSICAL_ADDRESS ((uint32_t)0x9FFF)
- #define FLASH_PROG_BLOCKS_NUMBER ((uint16_t)128)
- #define FLASH_DATA_START_PHYSICAL_ADDRESS ((uint32_t)0x004000)
- #define FLASH_DATA_END_PHYSICAL_ADDRESS ((uint32_t)0x00427F)
- #define FLASH_DATA_BLOCKS_NUMBER ((uint16_t)10)
- #define FLASH_BLOCK_SIZE ((uint8_t)64)
- #endif
- #define FLASH_RASS_KEY1 ((uint8_t)0x56)
- #define FLASH_RASS_KEY2 ((uint8_t)0xAE)
- #define OPTION_BYTE_START_PHYSICAL_ADDRESS ((uint16_t)0x4800)
- #define OPTION_BYTE_END_PHYSICAL_ADDRESS ((uint16_t)0x487F)
- #define FLASH_OPTIONBYTE_ERROR ((uint16_t)0x5555)
- typedef enum {
- FLASH_MEMTYPE_PROG = (uint8_t)0xFD,
- FLASH_MEMTYPE_DATA = (uint8_t)0xF7
- } FLASH_MemType_TypeDef;
- typedef enum {
- FLASH_PROGRAMMODE_STANDARD = (uint8_t)0x00,
- FLASH_PROGRAMMODE_FAST = (uint8_t)0x10
- } FLASH_ProgramMode_TypeDef;
- typedef enum {
- FLASH_PROGRAMTIME_STANDARD = (uint8_t)0x00,
- FLASH_PROGRAMTIME_TPROG = (uint8_t)0x01
- } FLASH_ProgramTime_TypeDef;
- typedef enum {
- FLASH_LPMODE_POWERDOWN = (uint8_t)0x04,
- FLASH_LPMODE_STANDBY = (uint8_t)0x08,
- FLASH_LPMODE_POWERDOWN_STANDBY = (uint8_t)0x00,
- FLASH_LPMODE_STANDBY_POWERDOWN = (uint8_t)0x0C
- }
- FLASH_LPMode_TypeDef;
- typedef enum {
- #if defined (STM8S208) || defined(STM8S207) || defined(STM8S007) || defined(STM8S105) || \
- defined(STM8S005) || defined (STM8AF52Ax) || defined (STM8AF62Ax) || defined(STM8AF626x)
- FLASH_STATUS_END_HIGH_VOLTAGE = (uint8_t)0x40,
- #endif
- FLASH_STATUS_SUCCESSFUL_OPERATION = (uint8_t)0x04,
- FLASH_STATUS_TIMEOUT = (uint8_t)0x02,
- FLASH_STATUS_WRITE_PROTECTION_ERROR = (uint8_t)0x01
- } FLASH_Status_TypeDef;
- typedef enum {
- #if defined (STM8S208) || defined(STM8S207) || defined(STM8S007) || defined(STM8S105) || \
- defined(STM8S005) || defined (STM8AF52Ax) || defined (STM8AF62Ax) || defined(STM8AF626x)
- FLASH_FLAG_HVOFF = (uint8_t)0x40,
- #endif
- FLASH_FLAG_DUL = (uint8_t)0x08,
- FLASH_FLAG_EOP = (uint8_t)0x04,
- FLASH_FLAG_PUL = (uint8_t)0x02,
- FLASH_FLAG_WR_PG_DIS = (uint8_t)0x01
- } FLASH_Flag_TypeDef;
- #define IS_FLASH_PROG_ADDRESS_OK(ADDRESS) (((ADDRESS) >= FLASH_PROG_START_PHYSICAL_ADDRESS) && \
- ((ADDRESS) <= FLASH_PROG_END_PHYSICAL_ADDRESS))
- #define IS_FLASH_DATA_ADDRESS_OK(ADDRESS) (((ADDRESS) >= FLASH_DATA_START_PHYSICAL_ADDRESS) && \
- ((ADDRESS) <= FLASH_DATA_END_PHYSICAL_ADDRESS))
- #define IS_FLASH_ADDRESS_OK(ADDRESS)((((ADDRESS) >= FLASH_PROG_START_PHYSICAL_ADDRESS) && ((ADDRESS) <= FLASH_PROG_END_PHYSICAL_ADDRESS)) || \
- (((ADDRESS) >= FLASH_DATA_START_PHYSICAL_ADDRESS) && ((ADDRESS) <= FLASH_DATA_END_PHYSICAL_ADDRESS)))
- #define IS_FLASH_PROG_BLOCK_NUMBER_OK(BLOCKNUM) ((BLOCKNUM) < FLASH_PROG_BLOCKS_NUMBER)
- #define IS_FLASH_DATA_BLOCK_NUMBER_OK(BLOCKNUM) ((BLOCKNUM) < FLASH_DATA_BLOCKS_NUMBER)
- #define IS_MEMORY_TYPE_OK(MEMTYPE) (((MEMTYPE) == FLASH_MEMTYPE_PROG) || \
- ((MEMTYPE) == FLASH_MEMTYPE_DATA))
- #define IS_FLASH_PROGRAM_MODE_OK(MODE) (((MODE) == FLASH_PROGRAMMODE_STANDARD) || \
- ((MODE) == FLASH_PROGRAMMODE_FAST))
- #define IS_FLASH_PROGRAM_TIME_OK(TIME) (((TIME) == FLASH_PROGRAMTIME_STANDARD) || \
- ((TIME) == FLASH_PROGRAMTIME_TPROG))
- #define IS_FLASH_LOW_POWER_MODE_OK(LPMODE) (((LPMODE) == FLASH_LPMODE_POWERDOWN) || \
- ((LPMODE) == FLASH_LPMODE_STANDBY) || \
- ((LPMODE) == FLASH_LPMODE_POWERDOWN_STANDBY) || \
- ((LPMODE) == FLASH_LPMODE_STANDBY_POWERDOWN))
- #define IS_OPTION_BYTE_ADDRESS_OK(ADDRESS) (((ADDRESS) >= OPTION_BYTE_START_PHYSICAL_ADDRESS) && \
- ((ADDRESS) <= OPTION_BYTE_END_PHYSICAL_ADDRESS))
- #if defined (STM8S208) || defined(STM8S207) || defined(STM8S007) || defined(STM8S105) || \
- defined(STM8S005) || defined (STM8AF52Ax) || defined (STM8AF62Ax) || defined(STM8AF626x)
- #define IS_FLASH_FLAGS_OK(FLAG) (((FLAG) == FLASH_FLAG_HVOFF) || \
- ((FLAG) == FLASH_FLAG_DUL) || \
- ((FLAG) == FLASH_FLAG_EOP) || \
- ((FLAG) == FLASH_FLAG_PUL) || \
- ((FLAG) == FLASH_FLAG_WR_PG_DIS))
- #else
- #define IS_FLASH_FLAGS_OK(FLAG) (((FLAG) == FLASH_FLAG_DUL) || \
- ((FLAG) == FLASH_FLAG_EOP) || \
- ((FLAG) == FLASH_FLAG_PUL) || \
- ((FLAG) == FLASH_FLAG_WR_PG_DIS))
- #endif
- void FLASH_Unlock(FLASH_MemType_TypeDef FLASH_MemType);
- void FLASH_Lock(FLASH_MemType_TypeDef FLASH_MemType);
- void FLASH_DeInit(void);
- void FLASH_ITConfig(FunctionalState NewState);
- void FLASH_EraseByte(uint32_t Address);
- void FLASH_ProgramByte(uint32_t Address, uint8_t Data);
- uint8_t FLASH_ReadByte(uint32_t Address);
- void FLASH_ProgramWord(uint32_t Address, uint32_t Data);
- uint16_t FLASH_ReadOptionByte(uint16_t Address);
- void FLASH_ProgramOptionByte(uint16_t Address, uint8_t Data);
- void FLASH_EraseOptionByte(uint16_t Address);
- void FLASH_SetLowPowerMode(FLASH_LPMode_TypeDef FLASH_LPMode);
- void FLASH_SetProgrammingTime(FLASH_ProgramTime_TypeDef FLASH_ProgTime);
- FLASH_LPMode_TypeDef FLASH_GetLowPowerMode(void);
- FLASH_ProgramTime_TypeDef FLASH_GetProgrammingTime(void);
- uint32_t FLASH_GetBootSize(void);
- FlagStatus FLASH_GetFlagStatus(FLASH_Flag_TypeDef FLASH_FLAG);
- IN_RAM(void FLASH_EraseBlock(uint16_t BlockNum, FLASH_MemType_TypeDef FLASH_MemType));
- IN_RAM(void FLASH_ProgramBlock(uint16_t BlockNum, FLASH_MemType_TypeDef FLASH_MemType,
- FLASH_ProgramMode_TypeDef FLASH_ProgMode, uint8_t *Buffer));
- IN_RAM(FLASH_Status_TypeDef FLASH_WaitForLastOperation(FLASH_MemType_TypeDef FLASH_MemType));
- #endif
|