flash.h
上传用户:yyyd609
上传日期:2022-07-18
资源大小:183k
文件大小:12k
源码类别:

微处理器开发

开发平台:

C/C++

  1. /******************** (C) COPYRIGHT 2003 STMicroelectronics ********************
  2. * File Name          : flash.h
  3. * Author             : MCD Application Team
  4. * Date First Issued  : 28/07/2003
  5. * Description        : This file contains all the functions prototypes for the
  6. *                      Embedded Flash software library.
  7. ********************************************************************************
  8. * History:
  9. *  01/01/2004 : V1.2
  10. *  14/07/2004 : V1.3
  11. *******************************************************************************/
  12. #ifndef __FLASH_H
  13. #define __FLASH_H
  14. #include "71x_lib.h"
  15. #define FLASH_B0F0 0x00000001
  16. #define FLASH_B0F1 0x00000002
  17. #define FLASH_B0F2 0x00000004
  18. #define FLASH_B0F3 0x00000008
  19. #define FLASH_B0F4 0x00000010
  20. #define FLASH_B0F5 0x00000020
  21. #define FLASH_B0F6 0x00000040
  22. #define FLASH_B0F7 0x00000080
  23. #define FLASH_B1F0 0x00010000
  24. #define FLASH_B1F1 0x00020000
  25. #define FLASH_B0 (FLASH_B0F0 | FLASH_B0F1 | FLASH_B0F2 | FLASH_B0F3 | FLASH_B0F4 | FLASH_B0F5 | FLASH_B0F6 | FLASH_B0F7)
  26. #define FLASH_B1 (FLASH_B1F0 | FLASH_B1F1)
  27. typedef enum
  28. {
  29.   FLASH_FINISHED,
  30.   FLASH_ONGOING
  31. } flashwriteoperation;
  32. typedef enum
  33. {
  34.   FLASH_BANK0 = 0x1000000,
  35.   FLASH_BANK1 = 0x2000000
  36. } flashbanks;
  37. typedef enum
  38. {
  39.   FLASH_LPS   = 0x2F, /* 001-01111 = 0010 1111 = 0x2F */
  40.   FLASH_LOCK  = 0x24, /* 001-00100 = 0010 0100 = 0x24 */
  41.   FLASH_BSY1  = 0x22, /* 001-00010 = 0010 0010 = 0x22 */
  42.   FLASH_BSY0  = 0x21, /* 001-00001 = 0010 0001 = 0x21 */
  43.   FLASH_WPF   = 0x48, /* 010-01000 = 0100 1000 = 0x48 */
  44.   FLASH_RESER = 0x47, /* 010-00111 = 0100 0111 = 0x47 */
  45.   FLASH_SEQER = 0x46, /* 010-00110 = 0100 0110 = 0x46 */
  46.   FLASH_10ER  = 0x43, /* 010-00011 = 0100 0011 = 0x43 */
  47.   FLASH_PGER  = 0x42, /* 010-00010 = 0100 0010 = 0x42 */
  48.   FLASH_ERER  = 0x41, /* 010-00001 = 0100 0001 = 0x41 */
  49.   FLASH_ERR   = 0x40  /* 010-00000 = 0100 0000 = 0x40 */
  50. } flashflags;
  51. #define FLASH_WMS_Mask   0x80000000
  52. #define FLASH_SUSP_Mask  0x40000000
  53. #define FLASH_WPG_Mask   0x20000000
  54. #define FLASH_DWPG_Mask  0x10000000
  55. #define FLASH_SER_Mask   0x08000000
  56. #define FLASH_SPR_Mask   0x01000000
  57. #define FLASH_BER_Mask   0x04000000
  58. #define FLASH_MER_Mask   0x02000000
  59. #define FLASH_BSYA1_Mask 0x00000002
  60. #define FLASH_BSYA2_Mask 0x00000004
  61. #define FLASH_DBGP_Mask  0x00000002
  62. #define FLASH_ACCP_Mask  0x00000001
  63. #define FLASH_Reg_Mask   0xE0
  64. #define FLASH_Flag_Mask  0x1F
  65. #define FLASH_INTM_Mask  0x00200000
  66. #define FLASH_INTP_Mask  0x00100000
  67. /*******************************************************************************
  68. * Function Name  : FLASH_Init
  69. * Description    : Initialise the Flash
  70. * Input          : None
  71. * Return         : None
  72. *******************************************************************************/
  73. void FLASH_Init(void);
  74. /*******************************************************************************
  75. * Function Name  : FLASH_FlagStatus
  76. * Description    : Returns the NewState of Flash flags
  77. * Input 1        : Flash Flag
  78. * Return         : flagstate
  79. *******************************************************************************/
  80. FlagStatus FLASH_FlagStatus(flashflags Xflag);
  81. /*******************************************************************************
  82. * Function Name  : FLASH_WriteOpStatus
  83. * Description    : Checks the write operation status
  84. * Input 1        : flash banck
  85. * Return         : write operation status
  86. *******************************************************************************/
  87. inline FlagStatus FLASH_WriteOpStatus(flashbanks Xbank)
  88. {
  89.   return Xbank == FLASH_BANK0 ? FLASH_FlagStatus(FLASH_BSY0) : FLASH_FlagStatus(FLASH_BSY1);
  90. }
  91. /*******************************************************************************
  92. * Function Name  : FLASH_WordWrite
  93. * Description    : Writes a Word to the Flash
  94. * Input 1        : Address of the Destination
  95. * Input 2        : Word to program
  96. * Return         : None
  97. *******************************************************************************/
  98. void FLASH_WordWrite(u32 TargetAdd, u32 Data);
  99. /*******************************************************************************
  100. * Function Name  : FLASH_DWordWrite
  101. * Description    : Writes Double Word to the Flash
  102. * Input 1        : Address of the Destination
  103. * Input 2        : Word 1 To program
  104. * Input 3        : Word 2 To program
  105. * Return         : None
  106. *******************************************************************************/
  107. void FLASH_DWordWrite(u32 TargetAdd, u32 Data0, u32 Data1);
  108. /*******************************************************************************
  109. * Function Name  : FLASH_BlockWrite
  110. * Description    : Writes Data To the Flash
  111. * Input 1        : Address of the Data source
  112. * Input 2        : Address of the Destination
  113. * Input 3        : Nbr of words to be stored
  114. * Return         : None
  115. *******************************************************************************/
  116. void FLASH_BlockWrite(u32 SourceAdd, u32 TargetAdd, u32 DataLength);
  117. /*******************************************************************************
  118. * Function Name  : FLASH_EraseSector
  119. * Description    : Erases a Flash sector
  120. * Input 1        : Sectors to be Erased
  121. * Return         : None
  122. *******************************************************************************/
  123. void FLASH_SectorErase(u32 Xsectors);
  124. /*******************************************************************************
  125. * Function Name  : FLASH_EraseBank
  126. * Description    : Erases a Bank of the Flash
  127. * Input 1        : Bank to be Erased
  128. * Return         : None
  129. *******************************************************************************/
  130. inline void FLASH_BankErase(flashbanks Xbank)
  131. {
  132.   FLASH_SectorErase(Xbank == FLASH_BANK0 ? FLASH_B0 : FLASH_B1);
  133. }
  134. /*******************************************************************************
  135. * Function Name  : FLASH_EraseModule
  136. * Description    : Erases a flash module
  137. * Input          : None
  138. * Return         : None
  139. *******************************************************************************/
  140. void FLASH_ModuleErase(void);
  141. /*******************************************************************************
  142. * Function Name  : FLASH_Delay
  143. * Description    : Add the delay required for the Flash Write & Erase operation
  144. * Input 1        : None
  145. * Return         : None
  146. *******************************************************************************/
  147. void FLASH_Delay(void);
  148. /*******************************************************************************
  149. * Function Name  : FLASH_Suspend
  150. * Description    : Suspends the current program or erase operation
  151. * Input 1        : None
  152. * Return         : None
  153. *******************************************************************************/
  154. void FLASH_Suspend(void);
  155. /*******************************************************************************
  156. * Function Name  : FLASH_Resume
  157. * Description    : Resume a Suspended program or erase operation
  158. * Input 1        : None
  159. * Return         : None
  160. *******************************************************************************/
  161. void FLASH_Resume(void);
  162. /*******************************************************************************
  163. * Function Name  : FLASH_ReadWord
  164. * Description    : Read a single word of the flash
  165. * Input 1        : Source Address
  166. * Return         : Word
  167. *******************************************************************************/
  168. u32 FLASH_WordRead(u32 SourceAdd);
  169. /*******************************************************************************
  170. * Function Name  : FLASH_ReadBlock -> Block Read
  171. * Description    : Block Read from the flash
  172. * Input 1        : Destination Address where the Data will be Stored
  173. * Input 2        : Data Source Address
  174. * Input 3        : Nbr of word to be Read
  175. * Return         : Word
  176. *******************************************************************************/
  177. void FLASH_BlockRead(u32 DestAdd, u32 SourceAdd, u32 NbrData);
  178. /*******************************************************************************
  179. * Function Name  : FLASH_WritePrConfig
  180. * Description    : Configures The Write Protection Bits
  181. * Input 1        : Flash Bank
  182. * Input 2        : Enable or disable Protection
  183. * Return         : None
  184. *******************************************************************************/
  185. void FLASH_WritePrConfig(u32 Xsectors, FunctionalState NewState);
  186. /*******************************************************************************
  187. * Function Name  : FLASH_DebugPrConfig
  188. * Description    : Configures The Debug Protection Bits
  189. * Input 1        : ENABLE or DISABLE
  190. * Return         : None
  191. *******************************************************************************/
  192. void FLASH_DebugPrConfig(FunctionalState NewState);
  193. /*******************************************************************************
  194. * Function Name  : FLASH_FlagClear
  195. * Description    : Clears a flash flag
  196. * Input 1        : Flash Flag
  197. * Return         : None
  198. *******************************************************************************/
  199. void FLASH_FlagClear(flashflags Xflag);
  200. /*******************************************************************************
  201. * Function Name  : FLASH_ITConfig
  202. * Description    : Enables Or Disables the write-end interrupt
  203. * Input 1        : FunctionalState(Enable, Disable)
  204. * Return         : None
  205. *******************************************************************************/
  206. inline void FLASH_ITConfig(FunctionalState NewState)
  207. {
  208.   if (NewState == ENABLE) FLASHR->CR0 |= FLASH_INTM_Mask;
  209.   else FLASHR->CR0 &= ~FLASH_INTM_Mask;
  210. }
  211. /*******************************************************************************
  212. * Function Name  : FLASH_ITStatus
  213. * Description    : Checks if the write-end interrupt is enabled or not
  214. * Input 1        : None
  215. * Return         : Enable, Disable
  216. *******************************************************************************/
  217. inline FunctionalState FLASH_ITStatus(void)
  218. {
  219.   return (FLASHR->CR0 & FLASH_INTM_Mask)==0 ? DISABLE : ENABLE;
  220. }
  221. /*******************************************************************************
  222. * Function Name  : FLASH_ITClear
  223. * Description    : Clears an interrupt pending flag
  224. * Input 1        : None
  225. * Return         : None
  226. *******************************************************************************/
  227. inline void FLASH_ITClear(void)
  228. {
  229.   FLASHR->CR0 &= ~FLASH_INTM_Mask;
  230. }
  231. /*******************************************************************************
  232. * Function Name  : ResetBit
  233. * Description    : Resets a single bit in a 32 bit register value
  234. * Input 1        : The Value to be modified.
  235. * Input 2        : The Index of the bit to be Reset.
  236. * Return         : The value passed in parameter with the bit (Bitindex) reset
  237. *******************************************************************************/
  238. inline u32 ResetBit(u32 MyValue, u8 BitIndex)
  239. {
  240.   return MyValue & ~(0x1 << BitIndex);
  241. }
  242. /*******************************************************************************
  243. * Function Name  : ProtectionLevel
  244. * Description    : Gives the level of protection in the PDS PEN registers
  245. * Input 1        : The Protection Registers
  246. * Return         : The last bit not yet reset
  247. *******************************************************************************/
  248. u16 ProtectionLevel(u16 ProtectionRegs);
  249. /*******************************************************************************
  250. * Function Name  : Wait For Last Task
  251. * Description    : Waits for the end of last task on a Flash Bank
  252. * Input 1        : Bank number.
  253. * Return         : The value passed in parameter with the bit (Bitindex) reset
  254. *******************************************************************************/
  255. void WaitForLastTask(flashbanks Xbank);
  256. #endif  // __FLASH_H
  257. /*******************(C) COPYRIGHT 2003 STMicroelectronics *****END OF FILE****/