18#ifndef __VSF_TEMPLATE_FLASH_H__
19#define __VSF_TEMPLATE_FLASH_H__
40#ifndef VSF_FLASH_CFG_MULTI_CLASS
41# define VSF_FLASH_CFG_MULTI_CLASS ENABLED
51#if defined(VSF_HW_FLASH_COUNT) && !defined(VSF_HW_FLASH_MASK)
52# define VSF_HW_FLASH_MASK VSF_HAL_COUNT_TO_MASK(VSF_HW_FLASH_COUNT)
62#if defined(VSF_HW_FLASH_MASK) && !defined(VSF_HW_FLASH_COUNT)
63# define VSF_HW_FLASH_COUNT VSF_HAL_MASK_TO_COUNT(VSF_HW_FLASH_MASK)
75#ifndef VSF_FLASH_CFG_PREFIX
76# if VSF_FLASH_CFG_MULTI_CLASS == ENABLED
77# define VSF_FLASH_CFG_PREFIX vsf
78# elif defined(VSF_HW_FLASH_COUNT) && (VSF_HW_FLASH_COUNT != 0)
79# define VSF_FLASH_CFG_PREFIX vsf_hw
81# define VSF_FLASH_CFG_PREFIX vsf
94#ifndef VSF_FLASH_CFG_FUNCTION_RENAME
95# define VSF_FLASH_CFG_FUNCTION_RENAME ENABLED
105#ifndef VSF_FLASH_CFG_REIMPLEMENT_TYPE_IRQ_MASK
106# define VSF_FLASH_CFG_REIMPLEMENT_TYPE_IRQ_MASK DISABLED
116#ifndef VSF_FLASH_CFG_REIMPLEMENT_TYPE_FLASH_SIZE
117# define VSF_FLASH_CFG_REIMPLEMENT_TYPE_FLASH_SIZE DISABLED
127#ifndef VSF_FLASH_CFG_REIMPLEMENT_TYPE_STATUS
128# define VSF_FLASH_CFG_REIMPLEMENT_TYPE_STATUS DISABLED
140#ifndef VSF_FLASH_CFG_REIMPLEMENT_TYPE_CFG
141# define VSF_FLASH_CFG_REIMPLEMENT_TYPE_CFG DISABLED
153#ifndef VSF_FLASH_CFG_REIMPLEMENT_TYPE_CAPABILITY
154# define VSF_FLASH_CFG_REIMPLEMENT_TYPE_CAPABILITY DISABLED
164#ifndef VSF_FLASH_CFG_INHERIT_HAL_CAPABILITY
165# define VSF_FLASH_CFG_INHERIT_HAL_CAPABILITY ENABLED
177#ifndef VSF_FLASH_CFG_REIMPLEMENT_TYPE_CTRL
178# define VSF_FLASH_CFG_REIMPLEMENT_TYPE_CTRL DISABLED
206#ifndef __VSF_FLASH_CFG_SUPPORT_STANDARD_OPTIONAL
207# define __VSF_FLASH_CFG_SUPPORT_STANDARD_OPTIONAL DISABLED
212#define VSF_FLASH_APIS(__prefix_name) \
213 __VSF_HAL_TEMPLATE_API(__prefix_name, vsf_err_t, flash, init, VSF_MCONNECT(__prefix_name, _t) *flash_ptr, vsf_flash_cfg_t *cfg_ptr) \
214 __VSF_HAL_TEMPLATE_API(__prefix_name, void, flash, fini, VSF_MCONNECT(__prefix_name, _t) *flash_ptr) \
215 __VSF_HAL_TEMPLATE_API(__prefix_name, vsf_err_t, flash, get_configuration, VSF_MCONNECT(__prefix_name, _t) *flash_ptr, vsf_flash_cfg_t *cfg_ptr) \
216 __VSF_HAL_TEMPLATE_API(__prefix_name, fsm_rt_t, flash, enable, VSF_MCONNECT(__prefix_name, _t) *flash_ptr) \
217 __VSF_HAL_TEMPLATE_API(__prefix_name, fsm_rt_t, flash, disable, VSF_MCONNECT(__prefix_name, _t) *flash_ptr) \
218 __VSF_HAL_TEMPLATE_API(__prefix_name, vsf_flash_status_t, flash, status, VSF_MCONNECT(__prefix_name, _t) *flash_ptr) \
219 __VSF_HAL_TEMPLATE_API(__prefix_name, vsf_flash_capability_t, flash, capability, VSF_MCONNECT(__prefix_name, _t) *flash_ptr) \
220 __VSF_HAL_TEMPLATE_API(__prefix_name, void, flash, irq_enable, VSF_MCONNECT(__prefix_name, _t) *flash_ptr, vsf_flash_irq_mask_t irq_mask) \
221 __VSF_HAL_TEMPLATE_API(__prefix_name, void, flash, irq_disable, VSF_MCONNECT(__prefix_name, _t) *flash_ptr, vsf_flash_irq_mask_t irq_mask) \
222 __VSF_HAL_TEMPLATE_API(__prefix_name, vsf_flash_irq_mask_t, flash, irq_clear, VSF_MCONNECT(__prefix_name, _t) *flash_ptr, vsf_flash_irq_mask_t irq_mask) \
223 __VSF_HAL_TEMPLATE_API(__prefix_name, vsf_err_t, flash, erase_one_sector, VSF_MCONNECT(__prefix_name, _t) *flash_ptr, vsf_flash_size_t offset_of_bytes) \
224 __VSF_HAL_TEMPLATE_API(__prefix_name, vsf_err_t, flash, erase_multi_sector, VSF_MCONNECT(__prefix_name, _t) *flash_ptr, vsf_flash_size_t offset_of_bytes, vsf_flash_size_t size_of_bytes) \
225 __VSF_HAL_TEMPLATE_API(__prefix_name, vsf_err_t, flash, erase_all, VSF_MCONNECT(__prefix_name, _t) *flash_ptr) \
226 __VSF_HAL_TEMPLATE_API(__prefix_name, vsf_err_t, flash, write_one_sector, VSF_MCONNECT(__prefix_name, _t) *flash_ptr, vsf_flash_size_t offset_of_bytes, uint8_t* buffer, vsf_flash_size_t size_of_bytes) \
227 __VSF_HAL_TEMPLATE_API(__prefix_name, vsf_err_t, flash, write_multi_sector, VSF_MCONNECT(__prefix_name, _t) *flash_ptr, vsf_flash_size_t offset_of_bytes, uint8_t* buffer, vsf_flash_size_t size_of_bytes) \
228 __VSF_HAL_TEMPLATE_API(__prefix_name, vsf_err_t, flash, read_one_sector, VSF_MCONNECT(__prefix_name, _t) *flash_ptr, vsf_flash_size_t offset_of_bytes, uint8_t* buffer, vsf_flash_size_t size_of_bytes) \
229 __VSF_HAL_TEMPLATE_API(__prefix_name, vsf_err_t, flash, read_multi_sector, VSF_MCONNECT(__prefix_name, _t) *flash_ptr, vsf_flash_size_t offset_of_bytes, uint8_t* buffer, vsf_flash_size_t size_of_bytes) \
230 __VSF_HAL_TEMPLATE_API(__prefix_name, vsf_err_t, flash, ctrl, VSF_MCONNECT(__prefix_name, _t) *flash_ptr, vsf_flash_ctrl_t ctrl, void* param)
234#if VSF_FLASH_CFG_REIMPLEMENT_TYPE_IRQ_MASK == DISABLED
263#if VSF_FLASH_CFG_REIMPLEMENT_TYPE_FLASH_SIZE == DISABLED
267#if VSF_FLASH_CFG_REIMPLEMENT_TYPE_CFG == DISABLED
288#if VSF_FLASH_CFG_REIMPLEMENT_TYPE_STATUS == DISABLED
306#if VSF_FLASH_CFG_REIMPLEMENT_TYPE_CAPABILITY == DISABLED
308#if VSF_FLASH_CFG_INHERIT_HAL_CAPABILITY == ENABLED
325#if VSF_FLASH_CFG_REIMPLEMENT_TYPE_CTRL == DISABLED
386#if __VSF_FLASH_CFG_SUPPORT_STANDARD_OPTIONAL
387 VSF_FLASH_CTRL_REQUEST_PAUSE = (0x1ul << 0),
388# define VSF_FLASH_CTRL_REQUEST_PAUSE VSF_FLASH_CTRL_REQUEST_PAUSE
389 VSF_FLASH_CTRL_REQUEST_RESUME = (0x1ul << 1),
390# define VSF_FLASH_CTRL_REQUEST_RESUME VSF_FLASH_CTRL_REQUEST_RESUME
400 VSF_FLASH_CTRL_POWER_DOWN = (0x1ul << 2),
401# define VSF_FLASH_CTRL_POWER_DOWN VSF_FLASH_CTRL_POWER_DOWN
402 VSF_FLASH_CTRL_POWER_UP = (0x1ul << 3),
403# define VSF_FLASH_CTRL_POWER_UP VSF_FLASH_CTRL_POWER_UP
410#undef __VSF_HAL_TEMPLATE_API
411#define __VSF_HAL_TEMPLATE_API VSF_HAL_TEMPLATE_API_FP
417#if VSF_FLASH_CFG_MULTI_CLASS == ENABLED
762#if VSF_FLASH_CFG_FUNCTION_RENAME == ENABLED
763# define __vsf_flash_t VSF_MCONNECT(VSF_FLASH_CFG_PREFIX, _flash_t)
764# define vsf_flash_init(__FLASH, ...) VSF_MCONNECT(VSF_FLASH_CFG_PREFIX, _flash_init) ((__vsf_flash_t *)(__FLASH), ##__VA_ARGS__)
765# define vsf_flash_fini(__FLASH) VSF_MCONNECT(VSF_FLASH_CFG_PREFIX, _flash_fini) ((__vsf_flash_t *)(__FLASH))
766# define vsf_flash_get_configuration(__FLASH, ...) VSF_MCONNECT(VSF_FLASH_CFG_PREFIX, _flash_get_configuration) ((__vsf_flash_t *)(__FLASH), ##__VA_ARGS__)
767# define vsf_flash_enable(__FLASH) VSF_MCONNECT(VSF_FLASH_CFG_PREFIX, _flash_enable) ((__vsf_flash_t *)(__FLASH))
768# define vsf_flash_disable(__FLASH) VSF_MCONNECT(VSF_FLASH_CFG_PREFIX, _flash_disable) ((__vsf_flash_t *)(__FLASH))
769# define vsf_flash_capability(__FLASH) VSF_MCONNECT(VSF_FLASH_CFG_PREFIX, _flash_capability) ((__vsf_flash_t *)(__FLASH))
770# define vsf_flash_status(__FLASH) VSF_MCONNECT(VSF_FLASH_CFG_PREFIX, _flash_status) ((__vsf_flash_t *)(__FLASH))
771# define vsf_flash_irq_enable(__FLASH, ...) VSF_MCONNECT(VSF_FLASH_CFG_PREFIX, _flash_irq_enable) ((__vsf_flash_t *)(__FLASH), ##__VA_ARGS__)
772# define vsf_flash_irq_disable(__FLASH, ...) VSF_MCONNECT(VSF_FLASH_CFG_PREFIX, _flash_irq_disable) ((__vsf_flash_t *)(__FLASH), ##__VA_ARGS__)
773# define vsf_flash_irq_clear(__FLASH, ...) VSF_MCONNECT(VSF_FLASH_CFG_PREFIX, _flash_irq_clear) ((__vsf_flash_t *)(__FLASH), ##__VA_ARGS__)
774# define vsf_flash_erase_one_sector(__FLASH, ...) VSF_MCONNECT(VSF_FLASH_CFG_PREFIX, _flash_erase_one_sector) ((__vsf_flash_t *)(__FLASH), ##__VA_ARGS__)
775# define vsf_flash_erase_multi_sector(__FLASH, ...) VSF_MCONNECT(VSF_FLASH_CFG_PREFIX, _flash_erase_multi_sector) ((__vsf_flash_t *)(__FLASH), ##__VA_ARGS__)
776# define vsf_flash_erase(__FLASH, ...) VSF_MCONNECT(VSF_FLASH_CFG_PREFIX, _flash_erase_multi_sector) ((__vsf_flash_t *)(__FLASH), ##__VA_ARGS__)
777# define vsf_flash_erase_all(__FLASH, ...) VSF_MCONNECT(VSF_FLASH_CFG_PREFIX, _flash_erase_all) ((__vsf_flash_t *)(__FLASH), ##__VA_ARGS__)
778# define vsf_flash_write_one_sector(__FLASH, ...) VSF_MCONNECT(VSF_FLASH_CFG_PREFIX, _flash_write_one_sector) ((__vsf_flash_t *)(__FLASH), ##__VA_ARGS__)
779# define vsf_flash_write_multi_sector(__FLASH, ...) VSF_MCONNECT(VSF_FLASH_CFG_PREFIX, _flash_write_multi_sector) ((__vsf_flash_t *)(__FLASH), ##__VA_ARGS__)
780# define vsf_flash_write(__FLASH, ...) VSF_MCONNECT(VSF_FLASH_CFG_PREFIX, _flash_write_multi_sector) ((__vsf_flash_t *)(__FLASH), ##__VA_ARGS__)
781# define vsf_flash_read_one_sector(__FLASH, ...) VSF_MCONNECT(VSF_FLASH_CFG_PREFIX, _flash_read_one_sector) ((__vsf_flash_t *)(__FLASH), ##__VA_ARGS__)
782# define vsf_flash_read_multi_sector(__FLASH, ...) VSF_MCONNECT(VSF_FLASH_CFG_PREFIX, _flash_read_multi_sector) ((__vsf_flash_t *)(__FLASH), ##__VA_ARGS__)
783# define vsf_flash_read(__FLASH, ...) VSF_MCONNECT(VSF_FLASH_CFG_PREFIX, _flash_read_multi_sector) ((__vsf_flash_t *)(__FLASH), ##__VA_ARGS__)
784# define vsf_flash_ctrl(__FLASH, ...) VSF_MCONNECT(VSF_FLASH_CFG_PREFIX, _flash_ctrl) ((__vsf_flash_t *)(__FLASH), ##__VA_ARGS__)
vsf_err_t
Definition __type.h:42
vsf_flash_irq_mask_t
Definition flash.h:70
vsf_arch_prio_t
Definition cortex_a_generic.h:88
const i_spi_t vsf_spi_irq_mask_t irq_mask
Definition spi_interface.h:38
unsigned uint32_t
Definition stdint.h:9
unsigned int uint_fast32_t
Definition stdint.h:27
unsigned char uint8_t
Definition stdint.h:5
Definition vsf_template_flash.h:307
vsf_flash_size_t max_size
Definition vsf_template_flash.h:314
uint8_t none_sector_aligned_read
Definition vsf_template_flash.h:320
vsf_flash_size_t write_sector_size
Definition vsf_template_flash.h:316
inherit(vsf_peripheral_capability_t) vsf_flash_irq_mask_t irq_mask
vsf_flash_size_t base_address
Definition vsf_template_flash.h:313
vsf_flash_size_t erase_sector_size
Definition vsf_template_flash.h:315
uint8_t none_sector_aligned_write
Definition vsf_template_flash.h:319
Definition vsf_template_flash.h:283
vsf_flash_isr_t isr
Interrupt configuration.
Definition vsf_template_flash.h:284
Definition vsf_template_flash.h:278
vsf_flash_isr_handler_t * handler_fn
Interrupt handler function.
Definition vsf_template_flash.h:279
vsf_arch_prio_t prio
Interrupt priority.
Definition vsf_template_flash.h:281
void * target_ptr
User target pointer.
Definition vsf_template_flash.h:280
Definition vsf_template_flash.h:408
Flash status structure that can be reimplemented in specific HAL drivers.
Definition flash.h:87
Definition vsf_template_flash.h:418
const vsf_flash_op_t * op
Definition vsf_template_flash.h:419
Definition vsf_template_hal_driver.h:204
Definition vsf_template_hal_driver.h:197
vsf_flash_irq_mask_t
Definition flash.h:118
void vsf_flash_isr_handler_t(void *target_ptr, vsf_flash_t *flash_ptr, vsf_flash_irq_mask_t mask)
Definition flash.h:134
uint_fast32_t vsf_flash_size_t
Definition flash.h:129
fsm_rt_t
Definition vsf_fsm.h:315
vsf_err_t vsf_flash_init(vsf_flash_t *flash_ptr, vsf_flash_cfg_t *cfg_ptr)
Initialize a FLASH instance.
Definition flash_common.c:38
#define VSF_FLASH_APIS(__prefix_name)
Definition vsf_template_flash.h:212
vsf_err_t vsf_flash_read_one_sector(vsf_flash_t *flash_ptr, vsf_flash_size_t offset_of_bytes, uint8_t *buffer, vsf_flash_size_t size_of_bytes)
flash read one sector
Definition flash_common.c:164
vsf_err_t vsf_flash_write_multi_sector(vsf_flash_t *flash_ptr, vsf_flash_size_t offset_of_bytes, uint8_t *buffer, vsf_flash_size_t size_of_bytes)
Flash write multi sector.
Definition flash_common.c:155
vsf_flash_irq_mask_t
Predefined VSF Flash interrupts that can be reimplemented in specific HAL drivers.
Definition vsf_template_flash.h:242
@ VSF_FLASH_IRQ_ERASE_MASK
Erase operation complete.
Definition vsf_template_flash.h:243
@ VSF_FLASH_IRQ_READ_MASK
Read operation complete.
Definition vsf_template_flash.h:245
@ VSF_FLASH_IRQ_WRITE_ERROR_MASK
Write operation error.
Definition vsf_template_flash.h:248
@ VSF_FLASH_IRQ_WRITE_MASK
Write operation complete.
Definition vsf_template_flash.h:244
@ VSF_FLASH_IRQ_ERASE_ERROR_MASK
Erase operation error.
Definition vsf_template_flash.h:247
@ VSF_FLASH_IRQ_READ_ERROR_MASK
Read operation error.
Definition vsf_template_flash.h:249
void vsf_flash_isr_handler_t(void *target_ptr, vsf_flash_t *flash_ptr, vsf_flash_irq_mask_t mask)
Definition vsf_template_flash.h:276
vsf_err_t vsf_flash_read_multi_sector(vsf_flash_t *flash_ptr, vsf_flash_size_t offset_of_bytes, uint8_t *buffer, vsf_flash_size_t size_of_bytes)
flash read multi sector
Definition flash_common.c:173
vsf_err_t vsf_flash_erase_all(vsf_flash_t *flash_ptr)
Flash chip erase.
Definition flash_common.c:137
vsf_err_t vsf_flash_erase_multi_sector(vsf_flash_t *flash_ptr, vsf_flash_size_t offset_of_bytes, vsf_flash_size_t size_of_bytes)
Flash erase a continuous range.
Definition flash_common.c:128
vsf_flash_status_t vsf_flash_status(vsf_flash_t *flash_ptr)
Get the status of FLASH instance.
Definition flash_common.c:101
vsf_flash_irq_mask_t vsf_flash_irq_clear(vsf_flash_t *flash_ptr, vsf_flash_irq_mask_t irq_mask)
Clear interrupt flags of FLASH instance and return previous state.
Definition flash_common.c:92
vsf_flash_ctrl_t
Predefined VSF Flash control commands that can be reimplemented in specific HAL drivers.
Definition vsf_template_flash.h:358
@ __VSF_FLASH_CTRL_DUMMY
Dummy value for compilation, required when no actual control commands are defined.
Definition vsf_template_flash.h:376
fsm_rt_t vsf_flash_disable(vsf_flash_t *flash_ptr)
Disable a FLASH instance.
Definition flash_common.c:65
vsf_err_t vsf_flash_erase_one_sector(vsf_flash_t *flash_ptr, vsf_flash_size_t offset_of_bytes)
FLASH erase one sector.
Definition flash_common.c:119
vsf_err_t vsf_flash_ctrl(vsf_flash_t *flash_ptr, vsf_flash_ctrl_t ctrl, void *param)
Execute a control command on the Flash instance.
Definition flash_common.c:192
vsf_err_t vsf_flash_get_configuration(vsf_flash_t *flash_ptr, vsf_flash_cfg_t *cfg_ptr)
Get current configuration of a FLASH instance.
Definition flash_common.c:182
vsf_flash_capability_t vsf_flash_capability(vsf_flash_t *flash_ptr)
Get the capabilities of FLASH instance.
Definition flash_common.c:110
struct vsf_flash_capability_t vsf_flash_capability_t
struct vsf_flash_cfg_t vsf_flash_cfg_t
struct vsf_flash_isr_t vsf_flash_isr_t
fsm_rt_t vsf_flash_enable(vsf_flash_t *flash_ptr)
Enable a FLASH instance.
Definition flash_common.c:56
struct vsf_flash_status_t vsf_flash_status_t
Flash status structure that can be reimplemented in specific HAL drivers.
uint_fast32_t vsf_flash_size_t
Definition vsf_template_flash.h:264
void vsf_flash_fini(vsf_flash_t *flash_ptr)
Finalize a FLASH instance.
Definition flash_common.c:47
void vsf_flash_irq_disable(vsf_flash_t *flash_ptr, vsf_flash_irq_mask_t irq_mask)
Disable interrupt masks of FLASH instance.
Definition flash_common.c:83
@ VSF_FLASH_IRQ_COUNT
Definition vsf_template_flash.h:254
@ VSF_FLASH_IRQ_ALL_BITS_MASK
Definition vsf_template_flash.h:255
void vsf_flash_irq_enable(vsf_flash_t *flash_ptr, vsf_flash_irq_mask_t irq_mask)
Enable interrupt masks of FLASH instance.
Definition flash_common.c:74
vsf_err_t vsf_flash_write_one_sector(vsf_flash_t *flash_ptr, vsf_flash_size_t offset_of_bytes, uint8_t *buffer, vsf_flash_size_t size_of_bytes)
Flash write one sector.
Definition flash_common.c:146