VSF Documented
vsf_template_flash.h
Go to the documentation of this file.
1/*****************************************************************************
2 * Copyright(C)2009-2022 by VSF Team *
3 * *
4 * Licensed under the Apache License, Version 2.0 (the "License"); *
5 * you may not use this file except in compliance with the License. *
6 * You may obtain a copy of the License at *
7 * *
8 * http://www.apache.org/licenses/LICENSE-2.0 *
9 * *
10 * Unless required by applicable law or agreed to in writing, software *
11 * distributed under the License is distributed on an "AS IS" BASIS, *
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. *
13 * See the License for the specific language governing permissions and *
14 * limitations under the License. *
15 * *
16 ****************************************************************************/
17
18#ifndef __VSF_TEMPLATE_FLASH_H__
19#define __VSF_TEMPLATE_FLASH_H__
20
21/*============================ INCLUDES ======================================*/
22
24#include "hal/arch/vsf_arch.h"
25
26#ifdef __cplusplus
27extern "C" {
28#endif
29
30/*============================ MACROS ========================================*/
31/*============================ MACROFIED FUNCTIONS ===========================*/
32
40#ifndef VSF_FLASH_CFG_MULTI_CLASS
41# define VSF_FLASH_CFG_MULTI_CLASS ENABLED
42#endif
43
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)
53#endif
54
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)
64#endif
65
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
80# else
81# define VSF_FLASH_CFG_PREFIX vsf
82# endif
83#endif
84
94#ifndef VSF_FLASH_CFG_FUNCTION_RENAME
95# define VSF_FLASH_CFG_FUNCTION_RENAME ENABLED
96#endif
97
105#ifndef VSF_FLASH_CFG_REIMPLEMENT_TYPE_IRQ_MASK
106# define VSF_FLASH_CFG_REIMPLEMENT_TYPE_IRQ_MASK DISABLED
107#endif
108
116#ifndef VSF_FLASH_CFG_REIMPLEMENT_TYPE_FLASH_SIZE
117# define VSF_FLASH_CFG_REIMPLEMENT_TYPE_FLASH_SIZE DISABLED
118#endif
119
127#ifndef VSF_FLASH_CFG_REIMPLEMENT_TYPE_STATUS
128# define VSF_FLASH_CFG_REIMPLEMENT_TYPE_STATUS DISABLED
129#endif
130
140#if VSF_FLASH_CFG_REIMPLEMENT_TYPE_CFG == DISABLED
141# define VSF_FLASH_CFG_REIMPLEMENT_TYPE_CFG DISABLED
142#endif
143
153#if VSF_FLASH_CFG_REIMPLEMENT_TYPE_CAPABILITY == DISABLED
154# define VSF_FLASH_CFG_REIMPLEMENT_TYPE_CAPABILITY DISABLED
155#endif
156
164#ifndef VSF_FLASH_CFG_INHERIT_HAL_CAPABILITY
165# define VSF_FLASH_CFG_INHERIT_HAL_CAPABILITY ENABLED
166#endif
167
168/*============================ MACROFIED FUNCTIONS ===========================*/
169
170#define VSF_FLASH_APIS(__prefix_name) \
171 __VSF_HAL_TEMPLATE_API(__prefix_name, vsf_err_t, flash, init, VSF_MCONNECT(__prefix_name, _flash_t) *flash_ptr, vsf_flash_cfg_t *cfg_ptr) \
172 __VSF_HAL_TEMPLATE_API(__prefix_name, void, flash, fini, VSF_MCONNECT(__prefix_name, _flash_t) *flash_ptrr) \
173 __VSF_HAL_TEMPLATE_API(__prefix_name, fsm_rt_t, flash, enable, VSF_MCONNECT(__prefix_name, _flash_t) *flash_ptr) \
174 __VSF_HAL_TEMPLATE_API(__prefix_name, fsm_rt_t, flash, disable, VSF_MCONNECT(__prefix_name, _flash_t) *flash_ptr) \
175 __VSF_HAL_TEMPLATE_API(__prefix_name, vsf_flash_status_t, flash, status, VSF_MCONNECT(__prefix_name, _flash_t) *flash_ptr) \
176 __VSF_HAL_TEMPLATE_API(__prefix_name, vsf_flash_capability_t, flash, capability, VSF_MCONNECT(__prefix_name, _flash_t) *flash_ptr) \
177 __VSF_HAL_TEMPLATE_API(__prefix_name, void, flash, irq_enable, VSF_MCONNECT(__prefix_name, _flash_t) *flash_ptr, vsf_flash_irq_mask_t irq_mask) \
178 __VSF_HAL_TEMPLATE_API(__prefix_name, void, flash, irq_disable, VSF_MCONNECT(__prefix_name, _flash_t) *flash_ptr, vsf_flash_irq_mask_t irq_mask) \
179 __VSF_HAL_TEMPLATE_API(__prefix_name, vsf_err_t, flash, erase_one_sector, VSF_MCONNECT(__prefix_name, _flash_t) *flash_ptr, vsf_flash_size_t offset_of_bytes) \
180 __VSF_HAL_TEMPLATE_API(__prefix_name, vsf_err_t, flash, erase_multi_sector, VSF_MCONNECT(__prefix_name, _flash_t) *flash_ptr, vsf_flash_size_t offset_of_bytes, vsf_flash_size_t size_of_bytes) \
181 __VSF_HAL_TEMPLATE_API(__prefix_name, vsf_err_t, flash, erase_all, VSF_MCONNECT(__prefix_name, _flash_t) *flash_ptr) \
182 __VSF_HAL_TEMPLATE_API(__prefix_name, vsf_err_t, flash, write_one_sector, VSF_MCONNECT(__prefix_name, _flash_t) *flash_ptr, vsf_flash_size_t offset_of_bytes, uint8_t* buffer, vsf_flash_size_t size_of_bytes) \
183 __VSF_HAL_TEMPLATE_API(__prefix_name, vsf_err_t, flash, write_multi_sector, VSF_MCONNECT(__prefix_name, _flash_t) *flash_ptr, vsf_flash_size_t offset_of_bytes, uint8_t* buffer, vsf_flash_size_t size_of_bytes) \
184 __VSF_HAL_TEMPLATE_API(__prefix_name, vsf_err_t, flash, read_one_sector, VSF_MCONNECT(__prefix_name, _flash_t) *flash_ptr, vsf_flash_size_t offset_of_bytes, uint8_t* buffer, vsf_flash_size_t size_of_bytes) \
185 __VSF_HAL_TEMPLATE_API(__prefix_name, vsf_err_t, flash, read_multi_sector, VSF_MCONNECT(__prefix_name, _flash_t) *flash_ptr, vsf_flash_size_t offset_of_bytes, uint8_t* buffer, vsf_flash_size_t size_of_bytes)
186
187/*============================ TYPES =========================================*/
188
189#if VSF_FLASH_CFG_REIMPLEMENT_TYPE_IRQ_MASK == DISABLED
200 VSF_FLASH_IRQ_READ_MASK = (0x1ul << 2),
201
206#endif
207
208enum {
216};
217
218#if VSF_FLASH_CFG_REIMPLEMENT_TYPE_FLASH_SIZE == DISABLED
220#endif
221
222#if VSF_FLASH_CFG_REIMPLEMENT_TYPE_CFG == DISABLED
231typedef void vsf_flash_isr_handler_t(void *target_ptr, vsf_flash_t *flash_ptr,
233typedef struct vsf_flash_isr_t {
238typedef struct vsf_flash_cfg_t {
241#endif
242
243#if VSF_FLASH_CFG_REIMPLEMENT_TYPE_STATUS == DISABLED
251typedef struct vsf_flash_status_t {
252 union {
254 struct {
255 uint32_t is_busy : 1;
256 };
257 };
259#endif
260
261#if VSF_FLASH_CFG_REIMPLEMENT_TYPE_CAPABILITY == DISABLED
263#if VSF_FLASH_CFG_INHERIT_HAL_CAPABILITY == ENABLED
265#endif
267
272 struct {
273 // Some flash allow only full sectors to be write or read
276 };
278#endif
279
280typedef struct vsf_flash_op_t {
282#undef __VSF_HAL_TEMPLATE_API
283#define __VSF_HAL_TEMPLATE_API VSF_HAL_TEMPLATE_API_FP
285
286 VSF_FLASH_APIS(vsf)
288
289#if VSF_FLASH_CFG_MULTI_CLASS == ENABLED
292};
293#endif
294
295/*============================ GLOBAL VARIABLES ==============================*/
296/*============================ PROTOTYPES ====================================*/
297
317extern vsf_err_t vsf_flash_init(vsf_flash_t *flash_ptr, vsf_flash_cfg_t *cfg_ptr);
318
330extern void vsf_flash_fini(vsf_flash_t *flash_ptr);
331
343extern fsm_rt_t vsf_flash_enable(vsf_flash_t *flash_ptr);
344
356extern fsm_rt_t vsf_flash_disable(vsf_flash_t *flash_ptr);
357
370
383
384
401
416
432 vsf_flash_size_t offset_of_bytes);
433
452 vsf_flash_size_t offset_of_bytes,
453 vsf_flash_size_t size_of_bytes);
454
466extern vsf_err_t vsf_flash_erase_all(vsf_flash_t *flash_ptr);
467
468
488 vsf_flash_size_t offset_of_bytes,
489 uint8_t* buffer,
490 vsf_flash_size_t size_of_bytes);
491
511 vsf_flash_size_t offset_of_bytes,
512 uint8_t* buffer,
513 vsf_flash_size_t size_of_bytes);
514
534 vsf_flash_size_t offset_of_bytes,
535 uint8_t* buffer,
536 vsf_flash_size_t size_of_bytes);
537
557 vsf_flash_size_t offset_of_bytes,
558 uint8_t* buffer,
559 vsf_flash_size_t size_of_bytes);
560
561/*============================ MACROFIED FUNCTIONS ===========================*/
562
564#if VSF_FLASH_CFG_FUNCTION_RENAME == ENABLED
565# define __vsf_flash_t VSF_MCONNECT(VSF_FLASH_CFG_PREFIX, _flash_t)
566# define vsf_flash_init(__FLASH, ...) VSF_MCONNECT(VSF_FLASH_CFG_PREFIX, _flash_init) ((__vsf_flash_t *)(__FLASH), ##__VA_ARGS__)
567# define vsf_flash_fini(__FLASH) VSF_MCONNECT(VSF_FLASH_CFG_PREFIX, _flash_fini) ((__vsf_flash_t *)(__FLASH))
568# define vsf_flash_enable(__FLASH) VSF_MCONNECT(VSF_FLASH_CFG_PREFIX, _flash_enable) ((__vsf_flash_t *)(__FLASH))
569# define vsf_flash_disable(__FLASH) VSF_MCONNECT(VSF_FLASH_CFG_PREFIX, _flash_disable) ((__vsf_flash_t *)(__FLASH))
570# define vsf_flash_capability(__FLASH) VSF_MCONNECT(VSF_FLASH_CFG_PREFIX, _flash_capability) ((__vsf_flash_t *)(__FLASH))
571# define vsf_flash_status(__FLASH) VSF_MCONNECT(VSF_FLASH_CFG_PREFIX, _flash_status) ((__vsf_flash_t *)(__FLASH))
572# define vsf_flash_irq_enable(__FLASH, ...) VSF_MCONNECT(VSF_FLASH_CFG_PREFIX, _flash_irq_enable) ((__vsf_flash_t *)(__FLASH), ##__VA_ARGS__)
573# define vsf_flash_irq_disable(__FLASH, ...) VSF_MCONNECT(VSF_FLASH_CFG_PREFIX, _flash_irq_disable) ((__vsf_flash_t *)(__FLASH), ##__VA_ARGS__)
574# define vsf_flash_erase_one_sector(__FLASH, ...) VSF_MCONNECT(VSF_FLASH_CFG_PREFIX, _flash_erase_one_sector) ((__vsf_flash_t *)(__FLASH), ##__VA_ARGS__)
575# define vsf_flash_erase_multi_sector(__FLASH, ...) VSF_MCONNECT(VSF_FLASH_CFG_PREFIX, _flash_erase_multi_sector) ((__vsf_flash_t *)(__FLASH), ##__VA_ARGS__)
576# define vsf_flash_erase(__FLASH, ...) VSF_MCONNECT(VSF_FLASH_CFG_PREFIX, _flash_erase_multi_sector) ((__vsf_flash_t *)(__FLASH), ##__VA_ARGS__)
577# define vsf_flash_erase_all(__FLASH, ...) VSF_MCONNECT(VSF_FLASH_CFG_PREFIX, _flash_erase_all) ((__vsf_flash_t *)(__FLASH), ##__VA_ARGS__)
578# define vsf_flash_write_one_sector(__FLASH, ...) VSF_MCONNECT(VSF_FLASH_CFG_PREFIX, _flash_write_one_sector) ((__vsf_flash_t *)(__FLASH), ##__VA_ARGS__)
579# define vsf_flash_write_multi_sector(__FLASH, ...) VSF_MCONNECT(VSF_FLASH_CFG_PREFIX, _flash_write_multi_sector) ((__vsf_flash_t *)(__FLASH), ##__VA_ARGS__)
580# define vsf_flash_write(__FLASH, ...) VSF_MCONNECT(VSF_FLASH_CFG_PREFIX, _flash_write_multi_sector) ((__vsf_flash_t *)(__FLASH), ##__VA_ARGS__)
581# define vsf_flash_read_one_sector(__FLASH, ...) VSF_MCONNECT(VSF_FLASH_CFG_PREFIX, _flash_read_one_sector) ((__vsf_flash_t *)(__FLASH), ##__VA_ARGS__)
582# define vsf_flash_read_multi_sector(__FLASH, ...) VSF_MCONNECT(VSF_FLASH_CFG_PREFIX, _flash_read_multi_sector) ((__vsf_flash_t *)(__FLASH), ##__VA_ARGS__)
583# define vsf_flash_read(__FLASH, ...) VSF_MCONNECT(VSF_FLASH_CFG_PREFIX, _flash_read_multi_sector) ((__vsf_flash_t *)(__FLASH), ##__VA_ARGS__)
584#endif
586
587#ifdef __cplusplus
588}
589#endif
590
591#endif /*__VSF_TEMPLATE_FLASH_H__*/
vsf_err_t
Definition __type.h:42
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:262
vsf_flash_size_t max_size
Definition vsf_template_flash.h:269
uint8_t none_sector_aligned_read
Definition vsf_template_flash.h:275
vsf_flash_size_t write_sector_size
Definition vsf_template_flash.h:271
inherit(vsf_peripheral_capability_t) vsf_flash_irq_mask_t irq_mask
vsf_flash_size_t base_address
Definition vsf_template_flash.h:268
vsf_flash_size_t erase_sector_size
Definition vsf_template_flash.h:270
uint8_t none_sector_aligned_write
Definition vsf_template_flash.h:274
Definition vsf_template_flash.h:238
vsf_flash_isr_t isr
Interrupt configuration.
Definition vsf_template_flash.h:239
Definition vsf_template_flash.h:233
vsf_flash_isr_handler_t * handler_fn
Interrupt handler function.
Definition vsf_template_flash.h:234
vsf_arch_prio_t prio
Interrupt priority.
Definition vsf_template_flash.h:236
void * target_ptr
User target pointer.
Definition vsf_template_flash.h:235
Definition vsf_template_flash.h:280
Flash status structure that can be reimplemented in specific HAL drivers.
Definition vsf_template_flash.h:251
Definition vsf_template_flash.h:290
const vsf_flash_op_t * op
Definition vsf_template_flash.h:291
Definition vsf_template_hal_driver.h:203
Definition vsf_template_hal_driver.h:196
vsf_flash_irq_mask_t
Definition flash.h:116
void vsf_flash_isr_handler_t(void *target_ptr, vsf_flash_t *flash_ptr, vsf_flash_irq_mask_t mask)
Definition flash.h:132
uint_fast32_t vsf_flash_size_t
Definition flash.h:127
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:170
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:155
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:146
vsf_flash_irq_mask_t
Predefined VSF Flash interrupts that can be reimplemented in specific HAL drivers.
Definition vsf_template_flash.h:197
@ VSF_FLASH_IRQ_ERASE_MASK
Erase operation complete.
Definition vsf_template_flash.h:198
@ VSF_FLASH_IRQ_READ_MASK
Read operation complete.
Definition vsf_template_flash.h:200
@ VSF_FLASH_IRQ_WRITE_ERROR_MASK
Write operation error.
Definition vsf_template_flash.h:203
@ VSF_FLASH_IRQ_WRITE_MASK
Write operation complete.
Definition vsf_template_flash.h:199
@ VSF_FLASH_IRQ_ERASE_ERROR_MASK
Erase operation error.
Definition vsf_template_flash.h:202
@ VSF_FLASH_IRQ_READ_ERROR_MASK
Read operation error.
Definition vsf_template_flash.h:204
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:231
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:164
vsf_err_t vsf_flash_erase_all(vsf_flash_t *flash_ptr)
Flash chip erase.
Definition flash_common.c:128
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:119
vsf_flash_status_t vsf_flash_status(vsf_flash_t *flash_ptr)
Get the status of FLASH instance.
Definition flash_common.c:92
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:110
@ VSF_FLASH_IRQ_COUNT
Definition vsf_template_flash.h:209
@ VSF_FLASH_IRQ_ALL_BITS_MASK
Definition vsf_template_flash.h:210
vsf_flash_capability_t vsf_flash_capability(vsf_flash_t *flash_ptr)
Get the capabilities of FLASH instance.
Definition flash_common.c:101
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:219
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
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:137
Generated from commit: vsfteam/vsf@2b286be