/** @file flash_regs.h * Module defining flash memory interface registers. * * Mainly made to be used by the rcc module. It is recommanded to go through * the functions provided by that module instead of directly using the registers * defined here. */ #ifndef _FLASH_REGS_H_ #define _FLASH_REGS_H_ //--includes-------------------------------------------------------------------- #include "reg.h" #include "stdint.h" //--type definitions------------------------------------------------------------ #define FLASH_BASE_ADDRESS 0x40022000 union FLASH_ACR { struct __attribute__((packed)) { uint32_t LATENCY:3; uint32_t HLFCYA:1; uint32_t PRFTBE:1; uint32_t PRFTBS:1; uint32_t reserved1:26; }; uint32_t word; }; #define FLASH_ACR_LATENCY reg_def(0, 3) #define FLASH_ACR_HLFCYA reg_def(3, 1) #define FLASH_ACR_PRFTBE reg_def(4, 1) #define FLASH_ACR_PRFTBS reg_def(5, 1) #define FLASH_ACR_reserved1 reg_def(6, 26) union FLASH_KEYR { struct __attribute__((packed)) { uint32_t reserved1; //TODO }; uint32_t word; }; union FLASH_OPTKEYR { struct __attribute__((packed)) { uint32_t reserved1; //TODO }; uint32_t word; }; union FLASH_SR { struct __attribute__((packed)) { uint32_t reserved1; //TODO }; uint32_t word; }; union FLASH_CR { struct __attribute__((packed)) { uint32_t reserved1; //TODO }; uint32_t word; }; union FLASH_AR { struct __attribute__((packed)) { uint32_t reserved1; //TODO }; uint32_t word; }; union FLASH_OBR { struct __attribute__((packed)) { uint32_t reserved1; //TODO }; uint32_t word; }; union FLASH_WRPR { struct __attribute__((packed)) { uint32_t reserved1; //TODO }; uint32_t word; }; struct __attribute__((packed)) FLASH { union FLASH_ACR ACR; union FLASH_KEYR KEYR; union FLASH_OPTKEYR OPTKEYR; union FLASH_SR SR; union FLASH_CR CR; union FLASH_AR AR; uint32_t reserved1; union FLASH_OBR OBR; union FLASH_WRPR WRPR; }; //--functions------------------------------------------------------------------- #endif //_FLASH_REGS_H_