/*************************************************************** *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**************************/