hc32f460_mpu.h 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293
  1. /*******************************************************************************
  2. * Copyright (C) 2020, Huada Semiconductor Co., Ltd. All rights reserved.
  3. *
  4. * This software component is licensed by HDSC under BSD 3-Clause license
  5. * (the "License"); You may not use this file except in compliance with the
  6. * License. You may obtain a copy of the License at:
  7. * opensource.org/licenses/BSD-3-Clause
  8. */
  9. /******************************************************************************/
  10. /** \file hc32f460_mpu.h
  11. **
  12. ** A detailed description is available at
  13. ** @link MpuGroup MPU description @endlink
  14. **
  15. ** - 2018-10-20 CDT First version for Device Driver Library of MPU.
  16. **
  17. ******************************************************************************/
  18. #ifndef __HC32F460_MPU_H__
  19. #define __HC32F460_MPU_H__
  20. /*******************************************************************************
  21. * Include files
  22. ******************************************************************************/
  23. #include "hc32_common.h"
  24. #include "ddl_config.h"
  25. #if (DDL_MPU_ENABLE == DDL_ON)
  26. /* C binding of definitions if building with C++ compiler */
  27. #ifdef __cplusplus
  28. extern "C"
  29. {
  30. #endif
  31. /**
  32. *******************************************************************************
  33. ** \defgroup MpuGroup Memory Protection Unit(MPU)
  34. **
  35. ******************************************************************************/
  36. //@{
  37. /*******************************************************************************
  38. * Global type definitions ('typedef')
  39. ******************************************************************************/
  40. /**
  41. *******************************************************************************
  42. ** \brief MPU region number enumeration
  43. **
  44. ******************************************************************************/
  45. typedef enum en_mpu_region_num
  46. {
  47. MpuRegionNum0 = 0u, ///< MPU region number 0
  48. MpuRegionNum1 = 1u, ///< MPU region number 1
  49. MpuRegionNum2 = 2u, ///< MPU region number 2
  50. MpuRegionNum3 = 3u, ///< MPU region number 3
  51. MpuRegionNum4 = 4u, ///< MPU region number 4
  52. MpuRegionNum5 = 5u, ///< MPU region number 5
  53. MpuRegionNum6 = 6u, ///< MPU region number 6
  54. MpuRegionNum7 = 7u, ///< MPU region number 7
  55. MpuRegionNum8 = 8u, ///< MPU region number 8
  56. MpuRegionNum9 = 9u, ///< MPU region number 9
  57. MpuRegionNum10 = 10u, ///< MPU region number 10
  58. MpuRegionNum11 = 11u, ///< MPU region number 11
  59. MpuRegionNum12 = 12u, ///< MPU region number 12
  60. MpuRegionNum13 = 13u, ///< MPU region number 13
  61. MpuRegionNum14 = 14u, ///< MPU region number 14
  62. MpuRegionNum15 = 15u, ///< MPU region number 15
  63. } en_mpu_region_num_t;
  64. /**
  65. *******************************************************************************
  66. ** \brief MPU region size enumeration
  67. **
  68. ******************************************************************************/
  69. typedef enum en_mpu_region_size
  70. {
  71. MpuRegionSize32Byte = 4u, ///< 32 Byte
  72. MpuRegionSize64Byte = 5u, ///< 64 Byte
  73. MpuRegionSize128Byte = 6u, ///< 126 Byte
  74. MpuRegionSize256Byte = 7u, ///< 256 Byte
  75. MpuRegionSize512Byte = 8u, ///< 512 Byte
  76. MpuRegionSize1KByte = 9u, ///< 1K Byte
  77. MpuRegionSize2KByte = 10u, ///< 2K Byte
  78. MpuRegionSize4KByte = 11u, ///< 4K Byte
  79. MpuRegionSize8KByte = 12u, ///< 8K Byte
  80. MpuRegionSize16KByte = 13u, ///< 16K Byte
  81. MpuRegionSize32KByte = 14u, ///< 32K Byte
  82. MpuRegionSize64KByte = 15u, ///< 64K Byte
  83. MpuRegionSize128KByte = 16u, ///< 128K Byte
  84. MpuRegionSize256KByte = 17u, ///< 256K Byte
  85. MpuRegionSize512KByte = 18u, ///< 512K Byte
  86. MpuRegionSize1MByte = 19u, ///< 1M Byte
  87. MpuRegionSize2MByte = 20u, ///< 2M Byte
  88. MpuRegionSize4MByte = 21u, ///< 4M Byte
  89. MpuRegionSize8MByte = 22u, ///< 8M Byte
  90. MpuRegionSize16MByte = 23u, ///< 16M Byte
  91. MpuRegionSize32MByte = 24u, ///< 32M Byte
  92. MpuRegionSize64MByte = 25u, ///< 64M Byte
  93. MpuRegionSize128MByte = 26u, ///< 128M Byte
  94. MpuRegionSize256MByte = 27u, ///< 256M Byte
  95. MpuRegionSize512MByte = 28u, ///< 512M Byte
  96. MpuRegionSize1GByte = 29u, ///< 1G Byte
  97. MpuRegionSize2GByte = 30u, ///< 2G Byte
  98. MpuRegionSize4GByte = 31u, ///< 4G Byte
  99. } en_mpu_region_size_t;
  100. /**
  101. *******************************************************************************
  102. ** \brief MPU region enumeration
  103. **
  104. ******************************************************************************/
  105. typedef enum en_mpu_region_type
  106. {
  107. SMPU1Region = 0u, ///< System DMA_1 MPU
  108. SMPU2Region = 1u, ///< System DMA_2 MPU
  109. FMPURegion = 2u, ///< System USBFS_DMA MPU
  110. } en_mpu_region_type_t;
  111. /**
  112. *******************************************************************************
  113. ** \brief MPU action selection enumeration
  114. **
  115. ******************************************************************************/
  116. typedef enum en_mpu_action_sel
  117. {
  118. MpuNoneAction = 0u, ///< MPU don't action.
  119. MpuTrigBusError = 1u, ///< MPU trigger bus error
  120. MpuTrigNmi = 2u, ///< MPU trigger bus NMI interrupt
  121. MpuTrigReset = 3u, ///< MPU trigger reset
  122. } en_mpu_action_sel_t;
  123. /**
  124. *******************************************************************************
  125. ** \brief MPU IP protection mode enumeration
  126. **
  127. ******************************************************************************/
  128. typedef enum en_mpu_ip_prot_mode
  129. {
  130. AesReadProt = (1ul << 0), ///< AES read protection
  131. AesWriteProt = (1ul << 1), ///< AES write protection
  132. HashReadProt = (1ul << 2), ///< HASH read protection
  133. HashWriteProt = (1ul << 3), ///< HASH write protection
  134. TrngReadProt = (1ul << 4), ///< TRNG read protection
  135. TrngWriteProt = (1ul << 5), ///< TRNG write protection
  136. CrcReadProt = (1ul << 6), ///< CRC read protection
  137. CrcWriteProt = (1ul << 7), ///< CRC write protection
  138. FmcReadProt = (1ul << 8), ///< FMC read protection
  139. FmcWriteProt = (1ul << 9), ///< FMC write protection
  140. WdtReadProt = (1ul << 12), ///< WDT read protection
  141. WdtWriteProt = (1ul << 13), ///< WDT write protection
  142. SwdtReadProt = (1ul << 14), ///< WDT read protection
  143. SwdtWriteProt = (1ul << 15), ///< WDT write protection
  144. BksramReadProt = (1ul << 16), ///< BKSRAM read protection
  145. BksramWriteProt = (1ul << 17), ///< BKSRAM write protection
  146. RtcReadProt = (1ul << 18), ///< RTC read protection
  147. RtcWriteProt = (1ul << 19), ///< RTC write protection
  148. DmpuReadProt = (1ul << 20), ///< DMPU read protection
  149. DmpuWriteProt = (1ul << 21), ///< DMPU write protection
  150. SramcReadProt = (1ul << 22), ///< SRAMC read protection
  151. SramcWriteProt = (1ul << 23), ///< SRAMC write protection
  152. IntcReadProt = (1ul << 24), ///< INTC read protection
  153. IntcWriteProt = (1ul << 25), ///< INTC write protection
  154. SyscReadProt = (1ul << 26), ///< SYSC read protection
  155. SyscWriteProt = (1ul << 27), ///< SYSC write protection
  156. MstpReadProt = (1ul << 28), ///< MSTP read protection
  157. MstpWriteProt = (1ul << 29), ///< MSTP write protection
  158. BusErrProt = (1ul << 31), ///< BUSERR write protection
  159. } en_mpu_ip_prot_mode_t;
  160. /**
  161. *******************************************************************************
  162. ** \brief MPU protection region permission
  163. **
  164. ******************************************************************************/
  165. typedef struct stc_mpu_prot_region_permission
  166. {
  167. en_mpu_action_sel_t enAction; ///< Specifies MPU action
  168. en_functional_state_t enRegionEnable; ///< Disable: Disable region protection; Enable:Enable region protection
  169. en_functional_state_t enWriteEnable; ///< Disable: Prohibited to write; Enable:permitted to write
  170. en_functional_state_t enReadEnable; ///< Disable: Prohibited to read; Enable:permitted to read
  171. } stc_mpu_prot_region_permission_t;
  172. /**
  173. *******************************************************************************
  174. ** \brief MPU background region permission
  175. **
  176. ******************************************************************************/
  177. typedef struct stc_mpu_bkgd_region_permission
  178. {
  179. en_functional_state_t enWriteEnable; ///< Disable: Prohibited to write; Enable:permitted to write
  180. en_functional_state_t enReadEnable; ///< Disable: Prohibited to read; Enable:permitted to read
  181. } stc_mpu_bkgd_region_permission_t_t;
  182. /**
  183. *******************************************************************************
  184. ** \brief MPU background region initialization configuration
  185. **
  186. ******************************************************************************/
  187. typedef struct stc_mpu_bkgd_region_init
  188. {
  189. stc_mpu_bkgd_region_permission_t_t stcSMPU1BkgdPermission; ///< Specifies SMPU1 background permission and this stuctrue detail refer of @ref stc_mpu_bkgd_region_permission_t_t
  190. stc_mpu_bkgd_region_permission_t_t stcSMPU2BkgdPermission; ///< Specifies SMPU2 background permission and this stuctrue detail refer @ref stc_mpu_bkgd_region_permission_t_t
  191. stc_mpu_bkgd_region_permission_t_t stcFMPUBkgdPermission; ///< Specifies FMPU background permission and this stuctrue detail refer @ref stc_mpu_bkgd_region_permission_t_t
  192. } stc_mpu_bkgd_region_init_t;
  193. /**
  194. *******************************************************************************
  195. ** \brief MPU protect region initialization configuration
  196. **
  197. ******************************************************************************/
  198. typedef struct stc_mpu_prot_region_init
  199. {
  200. uint32_t u32RegionBaseAddress; ///< Specifies region base address
  201. en_mpu_region_size_t enRegionSize; ///< Specifies region size and This parameter can be a value of @ref en_mpu_region_size_t
  202. stc_mpu_prot_region_permission_t stcSMPU1Permission; ///< Specifies DMA1 MPU region permission and this structure detail refer @ref stc_mpu_prot_region_permission_t
  203. stc_mpu_prot_region_permission_t stcSMPU2Permission; ///< Specifies DMA2 MPU region permission and this structure detail refer @ref stc_mpu_prot_region_permission_t
  204. stc_mpu_prot_region_permission_t stcFMPUPermission; ///< Specifies USBFS-DMA MPU region permission and this structure detail refer @ref stc_mpu_prot_region_permission_t
  205. } stc_mpu_prot_region_init_t;
  206. /*******************************************************************************
  207. * Global pre-processor symbols/macros ('#define')
  208. ******************************************************************************/
  209. /*******************************************************************************
  210. * Global variable definitions ('extern')
  211. ******************************************************************************/
  212. /*******************************************************************************
  213. * Global function prototypes (definition in C source)
  214. ******************************************************************************/
  215. en_result_t MPU_ProtRegionInit(en_mpu_region_num_t enRegionNum,
  216. const stc_mpu_prot_region_init_t *pstcInitCfg);
  217. en_result_t MPU_BkgdRegionInit(const stc_mpu_bkgd_region_init_t *pstcInitCfg);
  218. en_result_t MPU_SetRegionSize(en_mpu_region_num_t enRegionNum,
  219. en_mpu_region_size_t enRegionSize);
  220. en_mpu_region_size_t MPU_GetRegionSize(en_mpu_region_num_t enRegionNum);
  221. en_result_t MPU_SetRegionBaseAddress(en_mpu_region_num_t enRegionNum,
  222. uint32_t u32RegionBaseAddr);
  223. uint32_t MPU_GetRegionBaseAddress(en_mpu_region_num_t enRegionNum);
  224. en_result_t MPU_SetNoPermissionAcessAction(en_mpu_region_type_t enMpuRegionType,
  225. en_mpu_action_sel_t enActionSel);
  226. en_mpu_action_sel_t MPU_GetNoPermissionAcessAction(en_mpu_region_type_t enMpuRegionType);
  227. en_result_t MPU_ProtRegionCmd(en_mpu_region_num_t enRegionNum,
  228. en_mpu_region_type_t enMpuRegionType,
  229. en_functional_state_t enState);
  230. en_result_t MPU_RegionTypeCmd(en_mpu_region_type_t enMpuRegionType,
  231. en_functional_state_t enState);
  232. en_flag_status_t MPU_GetStatus(en_mpu_region_type_t enMpuRegionType);
  233. en_result_t MPU_ClearStatus(en_mpu_region_type_t enMpuRegionType);
  234. en_result_t MPU_SetProtRegionReadPermission(en_mpu_region_num_t enRegionNum,
  235. en_mpu_region_type_t enMpuRegionType,
  236. en_functional_state_t enState);
  237. en_functional_state_t MPU_GetProtRegionReadPermission(en_mpu_region_num_t enRegionNum,
  238. en_mpu_region_type_t enMpuRegionType);
  239. en_result_t MPU_SetProtRegionWritePermission(en_mpu_region_num_t enRegionNum,
  240. en_mpu_region_type_t enMpuRegionType,
  241. en_functional_state_t enState);
  242. en_functional_state_t MPU_GetProtRegionWritePermission(en_mpu_region_num_t enRegionNum,
  243. en_mpu_region_type_t enMpuRegionType);
  244. en_result_t MPU_SetBkgdRegionReadPermission(en_mpu_region_type_t enMpuRegionType,
  245. en_functional_state_t enState);
  246. en_functional_state_t MPU_GetBkgdRegionReadPermission(en_mpu_region_type_t enMpuRegionType);
  247. en_result_t MPU_SetBkgdRegionWritePermission(en_mpu_region_type_t enMpuRegionType,
  248. en_functional_state_t enState);
  249. en_functional_state_t MPU_GetBkgdRegionWritePermission(en_mpu_region_type_t enMpuRegionType);
  250. en_result_t MPU_WriteProtCmd(en_functional_state_t enState);
  251. en_result_t MPU_IpProtCmd(uint32_t u32ProtMode,
  252. en_functional_state_t enState);
  253. //@} // MpuGroup
  254. #ifdef __cplusplus
  255. }
  256. #endif
  257. #endif /* DDL_MPU_ENABLE */
  258. #endif /* __HC32F460_MPU_H__ */
  259. /*******************************************************************************
  260. * EOF (not truncated)
  261. ******************************************************************************/