You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

217 lines
5.3 KiB

4 years ago
  1. /**
  2. ******************************************************************************
  3. * @author
  4. * @version V1.0.0
  5. * @date 22-JAN-2021
  6. * @brief This file provides all the IAP_TABLE firmware functions.
  7. ******************************************************************************
  8. * @attention
  9. *
  10. * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
  11. * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
  12. * TIME. AS A RESULT, ICHAIER SHALL NOT BE HELD LIABLE FOR ANY
  13. * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
  14. * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
  15. * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
  16. *
  17. * <h2><center>&copy; COPYRIGHT 2014 ICHaier</center></h2>
  18. ******************************************************************************
  19. */
  20. /* Includes ------------------------------------------------------------------*/
  21. #include "es8p5066_iap_table.h"
  22. /** @defgroup IAP_TABLE
  23. * @brief IAP_TABLE driver modules
  24. * @{
  25. */
  26. /** @defgroup IAP_TABLE_Private_TypesDefinitions
  27. * @{
  28. */
  29. /**
  30. * @}
  31. */
  32. /** @defgroup IAP_TABLE_Private_Defines
  33. * @{
  34. */
  35. /**
  36. * @}
  37. */
  38. /** @defgroup IAP_TABLE_Private_Macros
  39. * @{
  40. */
  41. /**
  42. * @}
  43. */
  44. /** @defgroup IAP_TABLE_Private_Variables
  45. * @{
  46. */
  47. /**
  48. * @}
  49. */
  50. /** @defgroup IAP_TABLE_Private_FunctionPrototypes
  51. * @{
  52. */
  53. /**
  54. * @}
  55. */
  56. /** @defgroup IAP_TABLE_Private_Functions
  57. * @{
  58. */
  59. /**
  60. * @brief CODE区 IAP .ROM中的程序
  61. * @param address:
  62. * @retval None
  63. */
  64. ErrorStatus IAP_Code_PageErase(uint32_t address, uint32_t addressInv, uint32_t sector)
  65. {
  66. IAP_PE IAPPageErase = (IAP_PE)(*(uint32_t *)IAP_Code_PageErase_addr);
  67. ErrorStatus result;
  68. __ASM("CPSID i");
  69. result = (*IAPPageErase)(address, addressInv, sector);
  70. __ASM("CPSIE i");
  71. return result;
  72. }
  73. /**
  74. * @brief DATA区 IAP .ROM中的程序
  75. * @param address:
  76. * @retval None
  77. */
  78. ErrorStatus IAP_Data_PageErase(uint32_t address, uint32_t addressInv, uint32_t sector)
  79. {
  80. IAP_PE IAPPageErase = (IAP_PE)(*(uint32_t *)IAP_Data_PageErase_addr);
  81. ErrorStatus result;
  82. __ASM("CPSID i");
  83. result = (*IAPPageErase)(address, addressInv, sector);
  84. __ASM("CPSIE i");
  85. return result;
  86. }
  87. /**
  88. * @brief CODE区 IAP .ROM中的程序
  89. * @param address:
  90. * @retval None
  91. */
  92. ErrorStatus IAP_Code_WordProgram(uint32_t address, uint32_t addressInv, uint32_t data)
  93. {
  94. IAP_WP IAPWordProgram = (IAP_WP)(*(uint32_t *)IAP_Code_WordProgram_addr);
  95. ErrorStatus result;
  96. __ASM("CPSID i");
  97. result = (*IAPWordProgram)(address, addressInv, data);
  98. __ASM("CPSIE i");
  99. return result;
  100. }
  101. /**
  102. * @brief DATA区 IAP .ROM中的程序
  103. * @param address:
  104. * @retval None
  105. */
  106. ErrorStatus IAP_Data_WordProgram(uint32_t address, uint32_t addressInv, uint32_t data)
  107. {
  108. IAP_WP IAPWordProgram = (IAP_WP)(*(uint32_t *)IAP_Data_WordProgram_addr);
  109. ErrorStatus result;
  110. __ASM("CPSID i");
  111. result = (*IAPWordProgram)(address, addressInv, data);
  112. __ASM("CPSIE i");
  113. return result;
  114. }
  115. /**
  116. * @brief CODE区 IAP .ROM中的程序
  117. * @param address:
  118. * @retval None
  119. */
  120. ErrorStatus IAP_Code_PageProgram(uint32_t address, uint32_t addressInv, uint8_t data[], uint32_t length, uint32_t erase)
  121. {
  122. IAP_PP IAPPageProgram = (IAP_PP)(*(uint32_t *)IAP_Code_PageProgram_addr);
  123. ErrorStatus result;
  124. __ASM("CPSID i");
  125. result = (*IAPPageProgram)(address, addressInv, data, length, erase);
  126. __ASM("CPSIE i");
  127. return result;
  128. }
  129. /**
  130. * @brief DATA区 IAP .ROM中的程序
  131. * @param address:
  132. * @retval None
  133. */
  134. ErrorStatus IAP_Data_PageProgram(uint32_t address, uint32_t addressInv, uint8_t data[], uint32_t length, uint32_t erase)
  135. {
  136. IAP_PP IAPPageProgram = (IAP_PP)(*(uint32_t *)IAP_Data_PageProgram_addr);
  137. ErrorStatus result;
  138. __ASM("CPSID i");
  139. result = (*IAPPageProgram)(address, addressInv, data, length, erase);
  140. __ASM("CPSIE i");
  141. return result;
  142. }
  143. /**
  144. * @brief
  145. * @param Ram_Addr:
  146. * Flash_Addr: FLASH上的地址()
  147. * Len: ((4))
  148. * @retval None
  149. */
  150. ErrorStatus IAPRead(uint32_t *Ram_Addr, uint32_t Flash_Addr, uint8_t Len)
  151. {
  152. uint8_t i;
  153. uint32_t *ram_addr;
  154. const uint32_t *flash_addr;
  155. if (Flash_Addr % 4 != 0)
  156. return ERROR;
  157. ram_addr = Ram_Addr;
  158. flash_addr = (const uint32_t *)Flash_Addr;
  159. for (i = 0; i < Len; ++i)
  160. {
  161. *ram_addr = *flash_addr;
  162. ++ram_addr;
  163. ++flash_addr;
  164. }
  165. return SUCCESS;
  166. }
  167. /**
  168. * @brief FLASH
  169. * @param None
  170. * @retval None
  171. */
  172. void IAP_FLASH_Unlock(void)
  173. {
  174. IAP->FLASHKEY.Word = 0x8ACE0246;
  175. IAP->FLASHKEY.Word = 0x9BDF1357;
  176. }
  177. /**
  178. * @brief FLASH
  179. * @param None
  180. * @retval None
  181. */
  182. void IAP_FLASH_Lock(void)
  183. {
  184. IAP->FLASHKEY.Word = 0x0;
  185. }
  186. /******************* (C) COPYRIGHT 2014 ICHaier *****END OF FILE****/