Microchip® Advanced Software Framework

 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
Enhanced Embedded Flash Controller (EEFC)

The Enhanced Embedded Flash Controller ensures the interface of the Flash block with the 32-bit internal bus.

Macros

#define EEFC_ERROR_FLAGS   (EEFC_FSR_FLOCKE | EEFC_FSR_FCMDE)
 
#define EEFC_FCR_FKEY_PASSWD   EEFC_FCR_FKEY(FWP_KEY)
 
#define FWP_KEY   0x5Au
 

Functions

void efc_disable_cloe (Efc *p_efc)
 Disable code loop optimization. More...
 
void efc_disable_frdy_interrupt (Efc *p_efc)
 Disable the flash ready interrupt. More...
 
void efc_disable_write_protection (Efc *p_efc)
 Disable the write protection. More...
 
void efc_enable_cloe (Efc *p_efc)
 Enable code loop optimization. More...
 
void efc_enable_frdy_interrupt (Efc *p_efc)
 Enable the flash ready interrupt. More...
 
void efc_enable_write_protection (Efc *p_efc)
 Enable the write protection. More...
 
uint32_t efc_get_result (Efc *p_efc)
 Get the result of the last executed command. More...
 
uint32_t efc_get_status (Efc *p_efc)
 Get the current status of the EEFC. More...
 
uint32_t efc_get_wait_state (Efc *p_efc)
 Get flash wait state. More...
 
uint32_t efc_init (Efc *p_efc, uint32_t ul_access_mode, uint32_t ul_fws)
 Initialize the EFC controller. More...
 
uint32_t efc_perform_command (Efc *p_efc, uint32_t ul_command, uint32_t ul_argument)
 Perform the given command and wait until its completion (or an error). More...
 
uint32_t efc_perform_fcr (Efc *p_efc, uint32_t ul_fcr)
 Perform command. More...
 
__no_inline RAMFUNC uint32_t efc_perform_read_sequence (Efc *p_efc, uint32_t ul_cmd_st, uint32_t ul_cmd_sp, uint32_t *p_ul_buf, uint32_t ul_size)
 Perform read sequence. More...
 
void efc_set_wait_state (Efc *p_efc, uint32_t ul_fws)
 Set flash wait state. More...
 
void efc_write_fmr (Efc *p_efc, uint32_t ul_fmr)
 Set mode register. More...
 

#define EEFC_ERROR_FLAGS   (EEFC_FSR_FLOCKE | EEFC_FSR_FCMDE)

Referenced by efc_perform_fcr().

#define EEFC_FCR_FKEY_PASSWD   EEFC_FCR_FKEY(FWP_KEY)
#define FWP_KEY   0x5Au

void efc_disable_cloe ( Efc *  p_efc)

Disable code loop optimization.

Parameters
p_efcPointer to an EFC instance.

References efc_write_fmr().

void efc_disable_frdy_interrupt ( Efc *  p_efc)

Disable the flash ready interrupt.

Parameters
p_efcPointer to an EFC instance.

References efc_write_fmr().

void efc_disable_write_protection ( Efc *  p_efc)

Disable the write protection.

Parameters
p_efcPointer to an EFC instance.
void efc_enable_cloe ( Efc *  p_efc)

Enable code loop optimization.

Parameters
p_efcPointer to an EFC instance.

References efc_write_fmr().

void efc_enable_frdy_interrupt ( Efc *  p_efc)

Enable the flash ready interrupt.

Parameters
p_efcPointer to an EFC instance.

References efc_write_fmr().

void efc_enable_write_protection ( Efc *  p_efc)

Enable the write protection.

Parameters
p_efcPointer to an EFC instance.
uint32_t efc_get_result ( Efc *  p_efc)

Get the result of the last executed command.

Parameters
p_efcPointer to an EFC instance.
Returns
The result of the last executed command.

Referenced by flash_get_descriptor(), flash_is_gpnvm_set(), and flash_is_locked().

uint32_t efc_get_status ( Efc *  p_efc)

Get the current status of the EEFC.

Note
This function clears the value of some status bits (FLOCKE, FCMDE).
Parameters
p_efcPointer to an EFC instance.
Returns
The current status.
uint32_t efc_get_wait_state ( Efc *  p_efc)

Get flash wait state.

Parameters
p_efcPointer to an EFC instance.
Returns
The number of wait states in cycle (no shift).

Referenced by flash_get_wait_state(), and flash_write().

uint32_t efc_init ( Efc *  p_efc,
uint32_t  ul_access_mode,
uint32_t  ul_fws 
)

Initialize the EFC controller.

Parameters
ul_access_mode0 for 128-bit, EEFC_FMR_FAM for 64-bit.
ul_fwsThe number of wait states in cycle (no shift).
Returns
0 if successful.

References EFC_RC_OK, and efc_write_fmr().

Referenced by flash_init().

uint32_t efc_perform_command ( Efc *  p_efc,
uint32_t  ul_command,
uint32_t  ul_argument 
)

Perform the given command and wait until its completion (or an error).

Note
Unique ID commands are not supported, use efc_perform_read_sequence.
Parameters
p_efcPointer to an EFC instance.
ul_commandCommand to perform.
ul_argumentOptional command argument.
Note
This function will automatically choose to use IAP function.
Returns
0 if successful, otherwise returns an error code.

References cpu_irq_restore(), cpu_irq_save(), EEFC_FCR_FKEY_PASSWD, EFC_FCMD_SPUI, EFC_FCMD_STUI, efc_perform_fcr(), and EFC_RC_NOT_SUPPORT.

Referenced by flash_clear_gpnvm(), flash_erase_all(), flash_get_descriptor(), flash_is_gpnvm_set(), flash_is_locked(), flash_lock(), flash_set_gpnvm(), flash_unlock(), and flash_write().

__no_inline RAMFUNC uint32_t efc_perform_fcr ( Efc *  p_efc,
uint32_t  ul_fcr 
)

Perform command.

Parameters
p_efcPointer to an EFC instance.
ul_fcrFlash command.
Returns
The current status.

References EEFC_ERROR_FLAGS.

Referenced by efc_perform_command().

__no_inline RAMFUNC uint32_t efc_perform_read_sequence ( Efc *  p_efc,
uint32_t  ul_cmd_st,
uint32_t  ul_cmd_sp,
uint32_t *  p_ul_buf,
uint32_t  ul_size 
)

Perform read sequence.

Supported sequences are read Unique ID and read User Signature

Parameters
p_efcPointer to an EFC instance.
ul_cmd_stStart command to perform.
ul_cmd_spStop command to perform.
p_ul_bufPointer to an data buffer.
ul_sizeBuffer size.
Returns
0 if successful, otherwise returns an error code.

References EEFC_FCR_FKEY_PASSWD, EFC_RC_INVALID, EFC_RC_NOT_SUPPORT, EFC_RC_OK, FWP_KEY, and NULL.

Referenced by flash_read_unique_id().

void efc_set_wait_state ( Efc *  p_efc,
uint32_t  ul_fws 
)

Set flash wait state.

Parameters
p_efcPointer to an EFC instance.
ul_fwsThe number of wait states in cycle (no shift).

References efc_write_fmr().

Referenced by flash_set_wait_state(), flash_set_wait_state_adaptively(), and flash_write().

__no_inline RAMFUNC void efc_write_fmr ( Efc *  p_efc,
uint32_t  ul_fmr 
)

Set mode register.

Parameters
p_efcPointer to an EFC instance.
ul_fmrValue of mode register

Referenced by efc_disable_cloe(), efc_disable_frdy_interrupt(), efc_enable_cloe(), efc_enable_frdy_interrupt(), efc_init(), and efc_set_wait_state().