98 lines
2.7 KiB
C
98 lines
2.7 KiB
C
/***************************************************************
|
||
*Copyright (C), 2017, Shanghai Eastsoft Microelectronics Co., Ltd.
|
||
*文件名:
|
||
*作 者: Liut
|
||
*版 本: V1.00
|
||
*日 期: 2017/07/14
|
||
*描 述:
|
||
*备 注: 适用于 ES8P508芯片
|
||
本软件仅供学习和演示使用,对用户直接引用代码所带来的风险或后果不承担任何法律责任。
|
||
***************************************************************/
|
||
#include "lib_iap.h"
|
||
|
||
/*************************************************
|
||
* @brief IAP 页擦除编程.回调固化在ROM中的程序
|
||
* @param address: 页首地址
|
||
* @retval None
|
||
***********************************************/
|
||
ErrorStatus IAP_PageErase(uint32_t address)
|
||
{
|
||
IAP_PE IAPPageErase = (IAP_PE)(*(uint32_t *)IAP_PageErase_addr);
|
||
|
||
ErrorStatus result;
|
||
__ASM("CPSID i");
|
||
result = (*IAPPageErase)(address);
|
||
__ASM("CPSIE i");
|
||
return result;
|
||
}
|
||
|
||
/*************************************************
|
||
* @brief IAP 单字自编程.回调固化在ROM中的程序
|
||
* @param address: 编程首地址
|
||
* @param data: 编程数据
|
||
* @retval None
|
||
************************************************/
|
||
ErrorStatus IAP_WordProgram(uint32_t address, uint32_t data)
|
||
{
|
||
IAP_WP IAPWordProgram = (IAP_WP)(*(uint32_t *)IAP_WordProgram_addr);
|
||
|
||
ErrorStatus result;
|
||
__ASM("CPSID i");
|
||
result = (*IAPWordProgram)( address, data);
|
||
__ASM("CPSIE i");
|
||
return result;
|
||
}
|
||
|
||
/************************************************
|
||
* @brief IAP 多字自编程.回调固化在ROM中的程序
|
||
* @param address: 编程首地址
|
||
* @param data[]: 编程数据
|
||
* @param length: 编程数据长度(字节)
|
||
* @param address: 编程页是否先擦除
|
||
* @arg 0: 不擦除
|
||
* @arg 1: 擦除
|
||
* @retval None
|
||
**********************************************/
|
||
ErrorStatus IAP_PageProgram(uint32_t address, uint32_t data[], uint32_t length, uint32_t erase) //@0x100001c5
|
||
{
|
||
IAP_PP IAPPageProgram = (IAP_PP)(*(uint32_t *)IAP_PageProgram_addr);
|
||
|
||
ErrorStatus result;
|
||
__ASM("CPSID i");
|
||
result = (*IAPPageProgram)(address,data,length,erase);
|
||
__ASM("CPSIE i");
|
||
return result;
|
||
}
|
||
/*************************************
|
||
函数名:IARead
|
||
描 述:Flash读
|
||
输入值:内存地址--读取数据的存放地址
|
||
Flash地址
|
||
读取数据的长度,单位为字(4字节)
|
||
返回值:成功/失败
|
||
**************************************/
|
||
ErrorStatus IAPRead(uint32_t *Ram_Addr, uint32_t Flash_Addr, uint8_t Len)
|
||
{
|
||
uint8_t i;
|
||
uint32_t *ram_addr;
|
||
const uint32_t *flash_addr;
|
||
|
||
ram_addr = Ram_Addr;
|
||
flash_addr = (const uint32_t *)Flash_Addr;
|
||
|
||
if (Len == 0)
|
||
return ERROR;
|
||
|
||
for (i = 0; i < Len; ++i)
|
||
{
|
||
*ram_addr = *flash_addr;
|
||
++ram_addr;
|
||
++flash_addr;
|
||
}
|
||
|
||
return SUCCESS;
|
||
}
|
||
|
||
/************************END OF FILE**************************/
|
||
|