lib_iap.c 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. /***************************************************************
  2. *Copyright (C), 2017, Shanghai Eastsoft Microelectronics Co., Ltd.
  3. *文件名:
  4. *作 者: Liut
  5. *版 本: V1.00
  6. *日 期: 2017/07/14
  7. *描 述:
  8. *备 注: 适用于 ES8P508芯片
  9. 本软件仅供学习和演示使用,对用户直接引用代码所带来的风险或后果不承担任何法律责任。
  10. ***************************************************************/
  11. #include "lib_iap.h"
  12. /*************************************************
  13. * @brief IAP 页擦除编程.回调固化在ROM中的程序
  14. * @param address: 页首地址
  15. * @retval None
  16. ***********************************************/
  17. ErrorStatus IAP_PageErase(uint32_t address)
  18. {
  19. IAP_PE IAPPageErase = (IAP_PE)(*(uint32_t *)IAP_PageErase_addr);
  20. ErrorStatus result;
  21. __ASM("CPSID i");
  22. result = (*IAPPageErase)(address);
  23. __ASM("CPSIE i");
  24. return result;
  25. }
  26. /*************************************************
  27. * @brief IAP 单字自编程.回调固化在ROM中的程序
  28. * @param address: 编程首地址
  29. * @param data: 编程数据
  30. * @retval None
  31. ************************************************/
  32. ErrorStatus IAP_WordProgram(uint32_t address, uint32_t data)
  33. {
  34. IAP_WP IAPWordProgram = (IAP_WP)(*(uint32_t *)IAP_WordProgram_addr);
  35. ErrorStatus result;
  36. __ASM("CPSID i");
  37. result = (*IAPWordProgram)( address, data);
  38. __ASM("CPSIE i");
  39. return result;
  40. }
  41. /************************************************
  42. * @brief IAP 多字自编程.回调固化在ROM中的程序
  43. * @param address: 编程首地址
  44. * @param data[]: 编程数据
  45. * @param length: 编程数据长度(字节)
  46. * @param address: 编程页是否先擦除
  47. * @arg 0: 不擦除
  48. * @arg 1: 擦除
  49. * @retval None
  50. **********************************************/
  51. ErrorStatus IAP_PageProgram(uint32_t address, uint32_t data[], uint32_t length, uint32_t erase) //@0x100001c5
  52. {
  53. IAP_PP IAPPageProgram = (IAP_PP)(*(uint32_t *)IAP_PageProgram_addr);
  54. ErrorStatus result;
  55. __ASM("CPSID i");
  56. result = (*IAPPageProgram)(address,data,length,erase);
  57. __ASM("CPSIE i");
  58. return result;
  59. }
  60. /*************************************
  61. 函数名:IARead
  62. 描 述:Flash读
  63. 输入值:内存地址--读取数据的存放地址
  64. Flash地址
  65. 读取数据的长度,单位为字(4字节)
  66. 返回值:成功/失败
  67. **************************************/
  68. ErrorStatus IAPRead(uint32_t *Ram_Addr, uint32_t Flash_Addr, uint8_t Len)
  69. {
  70. uint8_t i;
  71. uint32_t *ram_addr;
  72. const uint32_t *flash_addr;
  73. ram_addr = Ram_Addr;
  74. flash_addr = (const uint32_t *)Flash_Addr;
  75. if (Len == 0)
  76. return ERROR;
  77. for (i = 0; i < Len; ++i)
  78. {
  79. *ram_addr = *flash_addr;
  80. ++ram_addr;
  81. ++flash_addr;
  82. }
  83. return SUCCESS;
  84. }
  85. /************************END OF FILE**************************/