| /* |
| * Copyright (c) 2016 RnDity Sp. z o.o. |
| * |
| * SPDX-License-Identifier: Apache-2.0 |
| */ |
| |
| #ifndef DRIVERS_FLASH_FLASH_STM32_H_ |
| #define DRIVERS_FLASH_FLASH_STM32_H_ |
| |
| #include <soc.h> |
| #include <flash.h> |
| #include <clock_control.h> |
| #include <flash_registers.h> |
| |
| struct flash_stm32_dev_config { |
| u32_t *base; |
| struct stm32_pclken pclken; |
| }; |
| |
| struct flash_stm32_dev_data { |
| /* For future use. */ |
| }; |
| |
| #define FLASH_CFG(dev) \ |
| ((const struct flash_stm32_dev_config * const)(dev)->config->config_info) |
| #define FLASH_DATA(dev) \ |
| ((struct flash_stm32_dev_data * const)(dev)->driver_data) |
| #define FLASH_STRUCT(base) \ |
| (volatile struct stm32_flash *)(base) |
| |
| /* Flash programming timeout definition. */ |
| #define FLASH_ER_PRG_TIMEOUT ((u32_t)0x000B0000) |
| |
| enum flash_status { |
| FLASH_BUSY = 1, |
| FLASH_ERROR_WRITE_PROTECTION, |
| FLASH_ERROR_PROGRAM, |
| FLASH_COMPLETE, |
| FLASH_TIMEOUT |
| }; |
| |
| void flash_stm32_lock(struct device *flash); |
| |
| void flash_stm32_unlock(struct device *flash); |
| |
| u8_t flash_stm32_program_halfword(struct device *flash, |
| u32_t address, |
| u16_t data); |
| |
| u8_t flash_stm32_program_word(struct device *flash, |
| u32_t address, |
| u32_t data); |
| |
| void flash_stm32_read_data(void *data, u32_t address, size_t len); |
| |
| u8_t flash_stm32_wait_for_last_operation(struct device *flash, |
| u32_t timeout); |
| |
| u8_t flash_stm32_get_status(struct device *flash); |
| |
| u8_t flash_stm32_erase_page(struct device *flash, |
| u32_t page_address); |
| |
| u8_t flash_stm32_erase_all_pages(struct device *flash); |
| |
| #endif /* DRIVERS_FLASH_FLASH_STM32_H_ */ |