78 lines
2.3 KiB
C
78 lines
2.3 KiB
C
/*
|
|
******************************************************************************
|
|
* @file HAL_EFlash.c
|
|
* @version V1.0.0
|
|
* @date 2020
|
|
* @brief EFlash HAL module driver.
|
|
* This file provides firmware functions to manage the following
|
|
* functionalities of the internal FLASH memory:
|
|
* @ Program operations functions
|
|
* @ Erase operations functions
|
|
******************************************************************************
|
|
*/
|
|
#include "ACM32Fxx_HAL.h"
|
|
|
|
/*********************************************************************************
|
|
* Function : HAL_EFlash_Init
|
|
* Description : Configure eflash parameter as system clock
|
|
* Input : system clock frequency
|
|
* Output : None
|
|
* Author : Chris_Kyle
|
|
**********************************************************************************/
|
|
void HAL_EFlash_Init(uint32_t fu32_freq)
|
|
{
|
|
HAL_EFlash_Init_Para(fu32_freq);
|
|
}
|
|
|
|
/*
|
|
* Function : HAL_EFlash_Erase_Page
|
|
* Description : Erase a Page, TERASE has been configured in System_Clock_Init()
|
|
* Input :
|
|
* Outpu : false: FAIL
|
|
true: SUCCESS
|
|
* Author : Chris_Kyle Data : 2020年
|
|
**********************************************************************************/
|
|
bool HAL_EFlash_ErasePage(uint32_t fu32_Addr)
|
|
{
|
|
EFC->CTRL |= EFC_CTRL_PAGE_ERASE_MODE;
|
|
|
|
EFC->SEC = 0x55AAAA55;
|
|
|
|
*((volatile uint32_t *)fu32_Addr) = 0;
|
|
|
|
while (!(EFC->STATUS & EFC_STATUS_EFLASH_RDY));
|
|
|
|
EFC->CTRL &= ~EFC_CTRL_PAGE_ERASE_MODE;
|
|
|
|
return true;
|
|
}
|
|
|
|
/*********************************************************************************
|
|
* Function : HAL_EFlash_Programe
|
|
* Description : Program a word, TPROG has been configured in System_Clock_Init()
|
|
* Input :
|
|
* Outpu : false: FAIL
|
|
true: SUCCESS
|
|
* Author : Chris_Kyle Data : 2020年
|
|
**********************************************************************************/
|
|
bool HAL_EFlash_Program_Word(uint32_t fu32_Addr, uint32_t fu32_Data)
|
|
{
|
|
if (fu32_Addr % 4)
|
|
{
|
|
return false;
|
|
}
|
|
|
|
EFC->CTRL |= EFC_CTRL_PROGRAM_MODE;
|
|
|
|
EFC->SEC = 0x55AAAA55;
|
|
|
|
*((volatile uint32_t *)fu32_Addr) = fu32_Data;
|
|
|
|
while (!(EFC->STATUS & EFC_STATUS_EFLASH_RDY));
|
|
|
|
EFC->CTRL &= ~EFC_CTRL_PROGRAM_MODE;
|
|
|
|
return true;
|
|
}
|
|
|