1 /*
2   ******************************************************************************
3   * @file    HAL_EFlash.h
4   * @version V1.0.0
5   * @date    2020
6   * @brief   Header file of EFlash HAL module.
7   ******************************************************************************
8 */
9 #ifndef __HAL_EFlash_H__
10 #define __HAL_EFlash_H__
11 
12 #include "ACM32Fxx_HAL.h"
13 
14 #define EFLASH_PAGE_SIZE    (512UL)
15 
16 #define HAL_EFLASH_READ_WORD(Addr)        (*(volatile uint32_t *)(Addr))    // Read By Word
17 #define HAL_EFLASH_READ_HALFWORD(Addr)    (*(volatile uint16_t *)(Addr))    // Read By Half Word
18 #define HAL_EFLASH_READ_BYTE(Addr)        (*(volatile uint8_t *)(Addr))     // Read By Byte
19 
20 /********************  Bit definition for EFC_CTRL register  ******************/
21 #define EFC_CTRL_CHIP_ERASE_MODE        (1 << 2)
22 #define EFC_CTRL_PAGE_ERASE_MODE        (1 << 1)
23 #define EFC_CTRL_PROGRAM_MODE           (1 << 0)
24 
25 /********************  Bit definition for EFC_STATUS register  ***************/
26 #define EFC_STATUS_NVR4_LOCK            (1 << 4)
27 #define EFC_STATUS_NVR3_LOCK            (1 << 3)
28 #define EFC_STATUS_NVR2_LOCK            (1 << 2)
29 #define EFC_STATUS_NVR1_LOCK            (1 << 1)
30 #define EFC_STATUS_EFLASH_RDY           (1 << 0)
31 
32 #define RD_WAIT_ENSURE_OK   8
33 #define SET_EFC_RD_WAIT(wait)     {EFC->CTRL   = (EFC->CTRL & ~(0x1F << 7)) | (wait << 7);}
34 
35 /* Exported functions --------------------------------------------------------*/
36 
37 /* HAL_EFlash_Init */
38 void HAL_EFlash_Init(uint32_t fu32_freq);
39 /* HAL_EFlash_ErasePage */
40 bool HAL_EFlash_ErasePage(uint32_t fu32_Addr);
41 
42 /* HAL_EFlash_Program_Word */
43 bool HAL_EFlash_Program_Word(uint32_t fu32_Addr, uint32_t fu32_Data);
44 
45 #endif
46