//************************************************************ // Copyright (c) 深圳市赛元微电子有限公司 // 文件名称 : sc92f8003_iap.c // 作者 : // 模块功能 : IAP固件库函数C文件 // 局部函数列表: // 最后更正日期: 2018/9/4 // 版本 : V1.0 // 说明 : //************************************************************* #include "sc92f8003_iap.h" #include /************************************************** *函数名称:void IAP_DeInit(void) *函数功能:IAP相关寄存器复位至缺省值 *入口参数:void *出口参数:void **************************************************/ void IAP_DeInit(void) { IAPKEY = 0X00; IAPADL = 0X00; IAPADH = 0X00; IAPADE = 0X00; IAPDAT = 0X00; IAPCTL = 0X00; } /************************************************** *函数名称:void IAP_SetHoldTime(IAP_HoldTime_TypeDef IAP_HoldTime) *函数功能:IAP操作CPU Hold Time配置函数 *入口参数:IAP_HoldTime CPU Hold Time选择 *出口参数:void **************************************************/ void IAP_SetHoldTime(IAP_HoldTime_TypeDef IAP_HoldTime) { IAPCTL = (IAPCTL & 0xF3) | IAP_HoldTime; } /************************************************** *函数名称:void IAP_ProgramByte(uint16_t Address, uint8_t Data, IAP_MemType_TypeDef IAP_MemType, uint8_t WriteTimeLimit) *函数功能:IAP写入一个字节 *入口参数:Address IAP操作地址 Data 写入的数据 IAP_MemType IAP操作对象(ROM、IFB、EEPROM) WriteTimeLimit IAP操作时限 (非零值) *出口参数:void **************************************************/ void IAP_ProgramByte(uint16_t Address, uint8_t Data, IAP_MemType_TypeDef IAP_MemType, uint8_t WriteTimeLimit) { BitStatus tmpbit; tmpbit = (BitStatus)EA; if(tmpbit) { disableInterrupts(); } IAPADE = IAP_MemType; IAPDAT = Data; IAPADH = (uint8_t)(Address >> 8); IAPADL = (uint8_t)Address; IAPKEY = WriteTimeLimit; //必须为非零值 IAPCTL |= 0x02; _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); IAPADE = IAP_MEMTYPE_ROM; if(tmpbit) { enableInterrupts(); } } /************************************************** *函数名称:uint8_t IAP_ReadByte(uint16_t Address, IAP_MemType_TypeDef IAP_MemType) *函数功能:IAP读一个字节 *入口参数:Address IAP操作地址 FLASH_MemType IAP操作对象(ROM、IFB、EEPROM) *出口参数:uint8_t 读到的字节数据 **************************************************/ uint8_t IAP_ReadByte(uint16_t Address, IAP_MemType_TypeDef IAP_MemType) { uint8_t tmpbyte; BitStatus tmpbit; tmpbit = (BitStatus)EA; if(tmpbit) { disableInterrupts(); } IAPADE = IAP_MemType; tmpbyte = *((uint8_t code*)Address); IAPADE = IAP_MEMTYPE_ROM; if(tmpbit) { enableInterrupts(); } return tmpbyte; } /******************* (C) COPYRIGHT 2018 SinOne Microelectronics *****END OF FILE****/