fm33lc0xx_fl_aes.h 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701
  1. /**
  2. *******************************************************************************************************
  3. * @file fm33lc0xx_fl_aes.h
  4. * @author FMSH Application Team
  5. * @brief Head file of AES FL Module
  6. *******************************************************************************************************
  7. * @attention
  8. *
  9. * Copyright (c) [2021] [Fudan Microelectronics]
  10. * THIS SOFTWARE is licensed under Mulan PSL v2.
  11. * You can use this software according to the terms and conditions of the Mulan PSL v2.
  12. * You may obtain a copy of Mulan PSL v2 at:
  13. * http://license.coscl.org.cn/MulanPSL2
  14. * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
  15. * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
  16. * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
  17. * See the Mulan PSL v2 for more details.
  18. *
  19. *******************************************************************************************************
  20. */
  21. /* Define to prevent recursive inclusion---------------------------------------------------------------*/
  22. #ifndef __FM33LC0XX_FL_AES_H
  23. #define __FM33LC0XX_FL_AES_H
  24. #ifdef __cplusplus
  25. extern "C" {
  26. #endif
  27. /* Includes -------------------------------------------------------------------------------------------*/
  28. #include "fm33lc0xx_fl_def.h"
  29. /** @addtogroup FM33LC0XX_FL_Driver
  30. * @{
  31. */
  32. /** @defgroup AES AES
  33. * @brief AES FL driver
  34. * @{
  35. */
  36. /* Exported types -------------------------------------------------------------------------------------*/
  37. /** @defgroup AES_FL_ES_INIT AES Exported Init structures
  38. * @{
  39. */
  40. /**
  41. * @brief FL AES Init Sturcture definition
  42. */
  43. typedef struct
  44. {
  45. /** 秘钥长度 */
  46. uint32_t keyLength;
  47. /** 数据流处理模式 */
  48. uint32_t cipherMode;
  49. /** AES工作模式 */
  50. uint32_t operationMode;
  51. /** 输入数据类型 */
  52. uint32_t dataType;
  53. } FL_AES_InitTypeDef;
  54. /**
  55. * @}
  56. */
  57. /* Exported constants ---------------------------------------------------------------------------------*/
  58. /** @defgroup AES_FL_Exported_Constants AES Exported Constants
  59. * @{
  60. */
  61. #define AES_CR_KEYLEN_Pos (13U)
  62. #define AES_CR_KEYLEN_Msk (0x3U << AES_CR_KEYLEN_Pos)
  63. #define AES_CR_KEYLEN AES_CR_KEYLEN_Msk
  64. #define AES_CR_DMAOEN_Pos (12U)
  65. #define AES_CR_DMAOEN_Msk (0x1U << AES_CR_DMAOEN_Pos)
  66. #define AES_CR_DMAOEN AES_CR_DMAOEN_Msk
  67. #define AES_CR_DMAIEN_Pos (11U)
  68. #define AES_CR_DMAIEN_Msk (0x1U << AES_CR_DMAIEN_Pos)
  69. #define AES_CR_DMAIEN AES_CR_DMAIEN_Msk
  70. #define AES_CR_CHMOD_Pos (5U)
  71. #define AES_CR_CHMOD_Msk (0x3U << AES_CR_CHMOD_Pos)
  72. #define AES_CR_CHMOD AES_CR_CHMOD_Msk
  73. #define AES_CR_MODE_Pos (3U)
  74. #define AES_CR_MODE_Msk (0x3U << AES_CR_MODE_Pos)
  75. #define AES_CR_MODE AES_CR_MODE_Msk
  76. #define AES_CR_DATATYP_Pos (1U)
  77. #define AES_CR_DATATYP_Msk (0x3U << AES_CR_DATATYP_Pos)
  78. #define AES_CR_DATATYP AES_CR_DATATYP_Msk
  79. #define AES_CR_EN_Pos (0U)
  80. #define AES_CR_EN_Msk (0x1U << AES_CR_EN_Pos)
  81. #define AES_CR_EN AES_CR_EN_Msk
  82. #define AES_IER_WRERR_IE_Pos (2U)
  83. #define AES_IER_WRERR_IE_Msk (0x1U << AES_IER_WRERR_IE_Pos)
  84. #define AES_IER_WRERR_IE AES_IER_WRERR_IE_Msk
  85. #define AES_IER_RDERR_IE_Pos (1U)
  86. #define AES_IER_RDERR_IE_Msk (0x1U << AES_IER_RDERR_IE_Pos)
  87. #define AES_IER_RDERR_IE AES_IER_RDERR_IE_Msk
  88. #define AES_IER_CCF_IE_Pos (0U)
  89. #define AES_IER_CCF_IE_Msk (0x1U << AES_IER_CCF_IE_Pos)
  90. #define AES_IER_CCF_IE AES_IER_CCF_IE_Msk
  91. #define AES_ISR_WRERR_Pos (2U)
  92. #define AES_ISR_WRERR_Msk (0x1U << AES_ISR_WRERR_Pos)
  93. #define AES_ISR_WRERR AES_ISR_WRERR_Msk
  94. #define AES_ISR_RDERR_Pos (1U)
  95. #define AES_ISR_RDERR_Msk (0x1U << AES_ISR_RDERR_Pos)
  96. #define AES_ISR_RDERR AES_ISR_RDERR_Msk
  97. #define AES_ISR_CCF_Pos (0U)
  98. #define AES_ISR_CCF_Msk (0x1U << AES_ISR_CCF_Pos)
  99. #define AES_ISR_CCF AES_ISR_CCF_Msk
  100. #define FL_AES_KEY0_OFFSET (0x0U << 0U)
  101. #define FL_AES_KEY1_OFFSET (0x1U << 0U)
  102. #define FL_AES_KEY2_OFFSET (0x2U << 0U)
  103. #define FL_AES_KEY3_OFFSET (0x3U << 0U)
  104. #define FL_AES_KEY4_OFFSET (0x4U << 0U)
  105. #define FL_AES_KEY5_OFFSET (0x5U << 0U)
  106. #define FL_AES_KEY6_OFFSET (0x6U << 0U)
  107. #define FL_AES_KEY7_OFFSET (0x7U << 0U)
  108. #define FL_AES_IVR0_OFFSET (0x0U << 0U)
  109. #define FL_AES_IVR1_OFFSET (0x1U << 0U)
  110. #define FL_AES_IVR2_OFFSET (0x2U << 0U)
  111. #define FL_AES_IVR3_OFFSET (0x3U << 0U)
  112. #define FL_AES_H0_OFFSET (0x0U << 0U)
  113. #define FL_AES_H1_OFFSET (0x1U << 0U)
  114. #define FL_AES_H2_OFFSET (0x2U << 0U)
  115. #define FL_AES_H3_OFFSET (0x3U << 0U)
  116. #define FL_AES_KEY_LENGTH_128B (0x0U << AES_CR_KEYLEN_Pos)
  117. #define FL_AES_KEY_LENGTH_192B (0x1U << AES_CR_KEYLEN_Pos)
  118. #define FL_AES_KEY_LENGTH_256B (0x2U << AES_CR_KEYLEN_Pos)
  119. #define FL_AES_CIPHER_ECB (0x0U << AES_CR_CHMOD_Pos)
  120. #define FL_AES_CIPHER_CBC (0x1U << AES_CR_CHMOD_Pos)
  121. #define FL_AES_CIPHER_CTR (0x2U << AES_CR_CHMOD_Pos)
  122. #define FL_AES_CIPHER_MULTH (0x3U << AES_CR_CHMOD_Pos)
  123. #define FL_AES_OPERATION_MODE_ENCRYPTION (0x0U << AES_CR_MODE_Pos)
  124. #define FL_AES_OPERATION_MODE_KEYDERIVATION (0x1U << AES_CR_MODE_Pos)
  125. #define FL_AES_OPERATION_MODE_DECRYPTION (0x2U << AES_CR_MODE_Pos)
  126. #define FL_AES_OPERATION_MODE_KEYDERIVATION_DECRYPTION (0x3U << AES_CR_MODE_Pos)
  127. #define FL_AES_DATA_TYPE_32B (0x0U << AES_CR_DATATYP_Pos)
  128. #define FL_AES_DATA_TYPE_16B (0x1U << AES_CR_DATATYP_Pos)
  129. #define FL_AES_DATA_TYPE_8B (0x2U << AES_CR_DATATYP_Pos)
  130. #define FL_AES_DATA_TYPE_1B (0x3U << AES_CR_DATATYP_Pos)
  131. /**
  132. * @}
  133. */
  134. /* Exported functions ---------------------------------------------------------------------------------*/
  135. /** @defgroup AES_FL_Exported_Functions AES Exported Functions
  136. * @{
  137. */
  138. /**
  139. * @brief Set key size selection
  140. * @rmtoll CR KEYLEN FL_AES_SetKeySize
  141. * @param AESx AES instance
  142. * @param keySize This parameter can be one of the following values:
  143. * @arg @ref FL_AES_KEY_LENGTH_128B
  144. * @arg @ref FL_AES_KEY_LENGTH_192B
  145. * @arg @ref FL_AES_KEY_LENGTH_256B
  146. * @retval None
  147. */
  148. __STATIC_INLINE void FL_AES_SetKeySize(AES_Type *AESx, uint32_t keySize)
  149. {
  150. MODIFY_REG(AESx->CR, AES_CR_KEYLEN_Msk, keySize);
  151. }
  152. /**
  153. * @brief Get key size selection
  154. * @rmtoll CR KEYLEN FL_AES_GetKeySize
  155. * @param AESx AES instance
  156. * @retval Returned value can be one of the following values:
  157. * @arg @ref FL_AES_KEY_LENGTH_128B
  158. * @arg @ref FL_AES_KEY_LENGTH_192B
  159. * @arg @ref FL_AES_KEY_LENGTH_256B
  160. */
  161. __STATIC_INLINE uint32_t FL_AES_GetKeySize(AES_Type *AESx)
  162. {
  163. return (uint32_t)(READ_BIT(AESx->CR, AES_CR_KEYLEN_Msk));
  164. }
  165. /**
  166. * @brief DMA output enable
  167. * @rmtoll CR DMAOEN FL_AES_EnableDMAReq_Output
  168. * @param AESx AES instance
  169. * @retval None
  170. */
  171. __STATIC_INLINE void FL_AES_EnableDMAReq_Output(AES_Type *AESx)
  172. {
  173. SET_BIT(AESx->CR, AES_CR_DMAOEN_Msk);
  174. }
  175. /**
  176. * @brief DMA output disable
  177. * @rmtoll CR DMAOEN FL_AES_DisableDMAReq_Output
  178. * @param AESx AES instance
  179. * @retval None
  180. */
  181. __STATIC_INLINE void FL_AES_DisableDMAReq_Output(AES_Type *AESx)
  182. {
  183. CLEAR_BIT(AESx->CR, AES_CR_DMAOEN_Msk);
  184. }
  185. /**
  186. * @brief DMA input enable
  187. * @rmtoll CR DMAIEN FL_AES_EnableDMAReq_Input
  188. * @param AESx AES instance
  189. * @retval None
  190. */
  191. __STATIC_INLINE void FL_AES_EnableDMAReq_Input(AES_Type *AESx)
  192. {
  193. SET_BIT(AESx->CR, AES_CR_DMAIEN_Msk);
  194. }
  195. /**
  196. * @brief DMA input disable
  197. * @rmtoll CR DMAIEN FL_AES_DisableDMAReq_Input
  198. * @param AESx AES instance
  199. * @retval None
  200. */
  201. __STATIC_INLINE void FL_AES_DisableDMAReq_Input(AES_Type *AESx)
  202. {
  203. CLEAR_BIT(AESx->CR, AES_CR_DMAIEN_Msk);
  204. }
  205. /**
  206. * @brief Set cipher mode
  207. * @rmtoll CR CHMOD FL_AES_SetCipherMode
  208. * @param AESx AES instance
  209. * @param mode This parameter can be one of the following values:
  210. * @arg @ref FL_AES_CIPHER_ECB
  211. * @arg @ref FL_AES_CIPHER_CBC
  212. * @arg @ref FL_AES_CIPHER_CTR
  213. * @arg @ref FL_AES_CIPHER_MULTH
  214. * @retval None
  215. */
  216. __STATIC_INLINE void FL_AES_SetCipherMode(AES_Type *AESx, uint32_t mode)
  217. {
  218. MODIFY_REG(AESx->CR, AES_CR_CHMOD_Msk, mode);
  219. }
  220. /**
  221. * @brief Get cipher mode
  222. * @rmtoll CR CHMOD FL_AES_GetCipherMode
  223. * @param AESx AES instance
  224. * @retval Returned value can be one of the following values:
  225. * @arg @ref FL_AES_CIPHER_ECB
  226. * @arg @ref FL_AES_CIPHER_CBC
  227. * @arg @ref FL_AES_CIPHER_CTR
  228. * @arg @ref FL_AES_CIPHER_MULTH
  229. */
  230. __STATIC_INLINE uint32_t FL_AES_GetCipherMode(AES_Type *AESx)
  231. {
  232. return (uint32_t)(READ_BIT(AESx->CR, AES_CR_CHMOD_Msk));
  233. }
  234. /**
  235. * @brief Set operation mode
  236. * @rmtoll CR MODE FL_AES_SetOperationMode
  237. * @param AESx AES instance
  238. * @param mode This parameter can be one of the following values:
  239. * @arg @ref FL_AES_OPERATION_MODE_ENCRYPTION
  240. * @arg @ref FL_AES_OPERATION_MODE_KEYDERIVATION
  241. * @arg @ref FL_AES_OPERATION_MODE_DECRYPTION
  242. * @arg @ref FL_AES_OPERATION_MODE_KEYDERIVATION_DECRYPTION
  243. * @retval None
  244. */
  245. __STATIC_INLINE void FL_AES_SetOperationMode(AES_Type *AESx, uint32_t mode)
  246. {
  247. MODIFY_REG(AESx->CR, AES_CR_MODE_Msk, mode);
  248. }
  249. /**
  250. * @brief Get operation mode
  251. * @rmtoll CR MODE FL_AES_GetOperationMode
  252. * @param AESx AES instance
  253. * @retval Returned value can be one of the following values:
  254. * @arg @ref FL_AES_OPERATION_MODE_ENCRYPTION
  255. * @arg @ref FL_AES_OPERATION_MODE_KEYDERIVATION
  256. * @arg @ref FL_AES_OPERATION_MODE_DECRYPTION
  257. * @arg @ref FL_AES_OPERATION_MODE_KEYDERIVATION_DECRYPTION
  258. */
  259. __STATIC_INLINE uint32_t FL_AES_GetOperationMode(AES_Type *AESx)
  260. {
  261. return (uint32_t)(READ_BIT(AESx->CR, AES_CR_MODE_Msk));
  262. }
  263. /**
  264. * @brief Set data type selection
  265. * @rmtoll CR DATATYP FL_AES_SetDataType
  266. * @param AESx AES instance
  267. * @param rule This parameter can be one of the following values:
  268. * @arg @ref FL_AES_DATA_TYPE_32B
  269. * @arg @ref FL_AES_DATA_TYPE_16B
  270. * @arg @ref FL_AES_DATA_TYPE_8B
  271. * @arg @ref FL_AES_DATA_TYPE_1B
  272. * @retval None
  273. */
  274. __STATIC_INLINE void FL_AES_SetDataType(AES_Type *AESx, uint32_t rule)
  275. {
  276. MODIFY_REG(AESx->CR, AES_CR_DATATYP_Msk, rule);
  277. }
  278. /**
  279. * @brief Get data type selection
  280. * @rmtoll CR DATATYP FL_AES_GetDataType
  281. * @param AESx AES instance
  282. * @retval Returned value can be one of the following values:
  283. * @arg @ref FL_AES_DATA_TYPE_32B
  284. * @arg @ref FL_AES_DATA_TYPE_16B
  285. * @arg @ref FL_AES_DATA_TYPE_8B
  286. * @arg @ref FL_AES_DATA_TYPE_1B
  287. */
  288. __STATIC_INLINE uint32_t FL_AES_GetDataType(AES_Type *AESx)
  289. {
  290. return (uint32_t)(READ_BIT(AESx->CR, AES_CR_DATATYP_Msk));
  291. }
  292. /**
  293. * @brief AES enable
  294. * @rmtoll CR EN FL_AES_Enable
  295. * @param AESx AES instance
  296. * @retval None
  297. */
  298. __STATIC_INLINE void FL_AES_Enable(AES_Type *AESx)
  299. {
  300. SET_BIT(AESx->CR, AES_CR_EN_Msk);
  301. }
  302. /**
  303. * @brief Get AES enable status
  304. * @rmtoll CR EN FL_AES_IsEnabled
  305. * @param AESx AES instance
  306. * @retval State of bit (1 or 0).
  307. */
  308. __STATIC_INLINE uint32_t FL_AES_IsEnabled(AES_Type *AESx)
  309. {
  310. return (uint32_t)(READ_BIT(AESx->CR, AES_CR_EN_Msk) == AES_CR_EN_Msk);
  311. }
  312. /**
  313. * @brief AES disable
  314. * @rmtoll CR EN FL_AES_Disable
  315. * @param AESx AES instance
  316. * @retval None
  317. */
  318. __STATIC_INLINE void FL_AES_Disable(AES_Type *AESx)
  319. {
  320. CLEAR_BIT(AESx->CR, AES_CR_EN_Msk);
  321. }
  322. /**
  323. * @brief Write error interrupt enable
  324. * @rmtoll IER WRERR_IE FL_AES_EnableIT_WriteError
  325. * @param AESx AES instance
  326. * @retval None
  327. */
  328. __STATIC_INLINE void FL_AES_EnableIT_WriteError(AES_Type *AESx)
  329. {
  330. SET_BIT(AESx->IER, AES_IER_WRERR_IE_Msk);
  331. }
  332. /**
  333. * @brief Get write error interrupt enable status
  334. * @rmtoll IER WRERR_IE FL_AES_IsEnabledIT_WriteError
  335. * @param AESx AES instance
  336. * @retval State of bit (1 or 0).
  337. */
  338. __STATIC_INLINE uint32_t FL_AES_IsEnabledIT_WriteError(AES_Type *AESx)
  339. {
  340. return (uint32_t)(READ_BIT(AESx->IER, AES_IER_WRERR_IE_Msk) == AES_IER_WRERR_IE_Msk);
  341. }
  342. /**
  343. * @brief Write error interrupt disable
  344. * @rmtoll IER WRERR_IE FL_AES_DisableIT_WriteError
  345. * @param AESx AES instance
  346. * @retval None
  347. */
  348. __STATIC_INLINE void FL_AES_DisableIT_WriteError(AES_Type *AESx)
  349. {
  350. CLEAR_BIT(AESx->IER, AES_IER_WRERR_IE_Msk);
  351. }
  352. /**
  353. * @brief Read error interrupt enable
  354. * @rmtoll IER RDERR_IE FL_AES_EnableIT_ReadError
  355. * @param AESx AES instance
  356. * @retval None
  357. */
  358. __STATIC_INLINE void FL_AES_EnableIT_ReadError(AES_Type *AESx)
  359. {
  360. SET_BIT(AESx->IER, AES_IER_RDERR_IE_Msk);
  361. }
  362. /**
  363. * @brief Get read Error interrupt enable status
  364. * @rmtoll IER RDERR_IE FL_AES_IsEnabledIT_ReadError
  365. * @param AESx AES instance
  366. * @retval State of bit (1 or 0).
  367. */
  368. __STATIC_INLINE uint32_t FL_AES_IsEnabledIT_ReadError(AES_Type *AESx)
  369. {
  370. return (uint32_t)(READ_BIT(AESx->IER, AES_IER_RDERR_IE_Msk) == AES_IER_RDERR_IE_Msk);
  371. }
  372. /**
  373. * @brief Read error interrupt disable
  374. * @rmtoll IER RDERR_IE FL_AES_DisableIT_ReadError
  375. * @param AESx AES instance
  376. * @retval None
  377. */
  378. __STATIC_INLINE void FL_AES_DisableIT_ReadError(AES_Type *AESx)
  379. {
  380. CLEAR_BIT(AESx->IER, AES_IER_RDERR_IE_Msk);
  381. }
  382. /**
  383. * @brief Cipher complete interrupt enable
  384. * @rmtoll IER CCF_IE FL_AES_EnableIT_Complete
  385. * @param AESx AES instance
  386. * @retval None
  387. */
  388. __STATIC_INLINE void FL_AES_EnableIT_Complete(AES_Type *AESx)
  389. {
  390. SET_BIT(AESx->IER, AES_IER_CCF_IE_Msk);
  391. }
  392. /**
  393. * @brief Get cipher complete interrupt enable status
  394. * @rmtoll IER CCF_IE FL_AES_IsEnabledIT_Complete
  395. * @param AESx AES instance
  396. * @retval State of bit (1 or 0).
  397. */
  398. __STATIC_INLINE uint32_t FL_AES_IsEnabledIT_Complete(AES_Type *AESx)
  399. {
  400. return (uint32_t)(READ_BIT(AESx->IER, AES_IER_CCF_IE_Msk) == AES_IER_CCF_IE_Msk);
  401. }
  402. /**
  403. * @brief Cipher complete interrupt disable
  404. * @rmtoll IER CCF_IE FL_AES_DisableIT_Complete
  405. * @param AESx AES instance
  406. * @retval None
  407. */
  408. __STATIC_INLINE void FL_AES_DisableIT_Complete(AES_Type *AESx)
  409. {
  410. CLEAR_BIT(AESx->IER, AES_IER_CCF_IE_Msk);
  411. }
  412. /**
  413. * @brief Get write error flag
  414. * @rmtoll ISR WRERR FL_AES_IsActiveFlag_WriteError
  415. * @param AESx AES instance
  416. * @retval State of bit (1 or 0).
  417. */
  418. __STATIC_INLINE uint32_t FL_AES_IsActiveFlag_WriteError(AES_Type *AESx)
  419. {
  420. return (uint32_t)(READ_BIT(AESx->ISR, AES_ISR_WRERR_Msk) == (AES_ISR_WRERR_Msk));
  421. }
  422. /**
  423. * @brief Clear write error flag
  424. * @rmtoll ISR WRERR FL_AES_ClearFlag_WriteError
  425. * @param AESx AES instance
  426. * @retval None
  427. */
  428. __STATIC_INLINE void FL_AES_ClearFlag_WriteError(AES_Type *AESx)
  429. {
  430. WRITE_REG(AESx->ISR, AES_ISR_WRERR_Msk);
  431. }
  432. /**
  433. * @brief Get read error flag
  434. * @rmtoll ISR RDERR FL_AES_IsActiveFlag_ReadError
  435. * @param AESx AES instance
  436. * @retval State of bit (1 or 0).
  437. */
  438. __STATIC_INLINE uint32_t FL_AES_IsActiveFlag_ReadError(AES_Type *AESx)
  439. {
  440. return (uint32_t)(READ_BIT(AESx->ISR, AES_ISR_RDERR_Msk) == (AES_ISR_RDERR_Msk));
  441. }
  442. /**
  443. * @brief Clear read error flag
  444. * @rmtoll ISR RDERR FL_AES_ClearFlag_ReadError
  445. * @param AESx AES instance
  446. * @retval None
  447. */
  448. __STATIC_INLINE void FL_AES_ClearFlag_ReadError(AES_Type *AESx)
  449. {
  450. WRITE_REG(AESx->ISR, AES_ISR_RDERR_Msk);
  451. }
  452. /**
  453. * @brief Get cipher complete flag
  454. * @rmtoll ISR CCF FL_AES_IsActiveFlag_Complete
  455. * @param AESx AES instance
  456. * @retval State of bit (1 or 0).
  457. */
  458. __STATIC_INLINE uint32_t FL_AES_IsActiveFlag_Complete(AES_Type *AESx)
  459. {
  460. return (uint32_t)(READ_BIT(AESx->ISR, AES_ISR_CCF_Msk) == (AES_ISR_CCF_Msk));
  461. }
  462. /**
  463. * @brief Clear cipher complete flag
  464. * @rmtoll ISR CCF FL_AES_ClearFlag_Complete
  465. * @param AESx AES instance
  466. * @retval None
  467. */
  468. __STATIC_INLINE void FL_AES_ClearFlag_Complete(AES_Type *AESx)
  469. {
  470. WRITE_REG(AESx->ISR, AES_ISR_CCF_Msk);
  471. }
  472. /**
  473. * @brief Write AES data input register
  474. * @rmtoll DIR FL_AES_WriteInputData
  475. * @param AESx AES instance
  476. * @param data
  477. * @retval None
  478. */
  479. __STATIC_INLINE void FL_AES_WriteInputData(AES_Type *AESx, uint32_t data)
  480. {
  481. MODIFY_REG(AESx->DIR, (0xffffffffU << 0U), (data << 0U));
  482. }
  483. /**
  484. * @brief Read AES data output register
  485. * @rmtoll DOR FL_AES_ReadOutputData
  486. * @param AESx AES instance
  487. * @retval
  488. */
  489. __STATIC_INLINE uint32_t FL_AES_ReadOutputData(AES_Type *AESx)
  490. {
  491. return (uint32_t)(READ_BIT(AESx->DOR, (0xffffffffU << 0U)) >> 0U);
  492. }
  493. /**
  494. * @brief Set key registers
  495. * @rmtoll KEY0 FL_AES_WriteKeys
  496. * @param AESx AES instance
  497. * @param offset This parameter can be one of the following values:
  498. * @arg @ref FL_AES_KEY0_OFFSET
  499. * @arg @ref FL_AES_KEY1_OFFSET
  500. * @arg @ref FL_AES_KEY2_OFFSET
  501. * @arg @ref FL_AES_KEY3_OFFSET
  502. * @arg @ref FL_AES_KEY4_OFFSET
  503. * @arg @ref FL_AES_KEY5_OFFSET
  504. * @arg @ref FL_AES_KEY6_OFFSET
  505. * @arg @ref FL_AES_KEY7_OFFSET
  506. * @param data
  507. * @retval None
  508. */
  509. __STATIC_INLINE void FL_AES_WriteKeys(AES_Type *AESx, uint32_t offset, uint32_t data)
  510. {
  511. WRITE_REG(*(((uint32_t *)&AESx->KEY0) + offset), data);
  512. }
  513. /**
  514. * @brief Get key registers
  515. * @rmtoll KEY0 FL_AES_ReadKeys
  516. * @param AESx AES instance
  517. * @param offset This parameter can be one of the following values:
  518. * @arg @ref FL_AES_KEY0_OFFSET
  519. * @arg @ref FL_AES_KEY1_OFFSET
  520. * @arg @ref FL_AES_KEY2_OFFSET
  521. * @arg @ref FL_AES_KEY3_OFFSET
  522. * @arg @ref FL_AES_KEY4_OFFSET
  523. * @arg @ref FL_AES_KEY5_OFFSET
  524. * @arg @ref FL_AES_KEY6_OFFSET
  525. * @arg @ref FL_AES_KEY7_OFFSET
  526. * @retval
  527. */
  528. __STATIC_INLINE uint32_t FL_AES_ReadKeys(AES_Type *AESx, uint32_t offset)
  529. {
  530. return (uint32_t)READ_REG(*(((uint32_t *)&AESx->KEY0) + offset));
  531. }
  532. /**
  533. * @brief Write initialization vector registers
  534. * @rmtoll DIR FL_AES_WriteIVR
  535. * @param AESx AES instance
  536. * @param offset This parameter can be one of the following values:
  537. * @arg @ref FL_AES_IVR0_OFFSET
  538. * @arg @ref FL_AES_IVR1_OFFSET
  539. * @arg @ref FL_AES_IVR2_OFFSET
  540. * @arg @ref FL_AES_IVR3_OFFSET
  541. * @param data
  542. * @retval None
  543. */
  544. __STATIC_INLINE void FL_AES_WriteIVR(AES_Type *AESx, uint32_t offset, uint32_t data)
  545. {
  546. WRITE_REG(*(((uint32_t *)&AESx->IVR0) + offset), data);
  547. }
  548. /**
  549. * @brief Read initialization vector registers
  550. * @rmtoll DOR FL_AES_ReadIVR
  551. * @param AESx AES instance
  552. * @param offset This parameter can be one of the following values:
  553. * @arg @ref FL_AES_IVR0_OFFSET
  554. * @arg @ref FL_AES_IVR1_OFFSET
  555. * @arg @ref FL_AES_IVR2_OFFSET
  556. * @arg @ref FL_AES_IVR3_OFFSET
  557. * @retval
  558. */
  559. __STATIC_INLINE uint32_t FL_AES_ReadIVR(AES_Type *AESx, uint32_t offset)
  560. {
  561. return (uint32_t)READ_REG(*(((uint32_t *)&AESx->IVR0) + offset));
  562. }
  563. /**
  564. * @brief Set AES MultH parameter Register
  565. * @rmtoll KEY0 FL_AES_WriteHParams
  566. * @param AESx AES instance
  567. * @param offset This parameter can be one of the following values:
  568. * @arg @ref FL_AES_H0_OFFSET
  569. * @arg @ref FL_AES_H1_OFFSET
  570. * @arg @ref FL_AES_H2_OFFSET
  571. * @arg @ref FL_AES_H3_OFFSET
  572. * @param data
  573. * @retval None
  574. */
  575. __STATIC_INLINE void FL_AES_WriteHParams(AES_Type *AESx, uint32_t offset, uint32_t data)
  576. {
  577. WRITE_REG(*(((uint32_t *)&AESx->KEY0) + offset), data);
  578. }
  579. /**
  580. * @brief Get AES MultH parameter Register
  581. * @rmtoll KEY0 FL_AES_ReadHParams
  582. * @param AESx AES instance
  583. * @param offset This parameter can be one of the following values:
  584. * @arg @ref FL_AES_H0_OFFSET
  585. * @arg @ref FL_AES_H1_OFFSET
  586. * @arg @ref FL_AES_H2_OFFSET
  587. * @arg @ref FL_AES_H3_OFFSET
  588. * @retval
  589. */
  590. __STATIC_INLINE uint32_t FL_AES_ReadHParams(AES_Type *AESx, uint32_t offset)
  591. {
  592. return (uint32_t)READ_REG(*(((uint32_t *)&AESx->KEY0) + offset));
  593. }
  594. /**
  595. * @}
  596. */
  597. /** @defgroup AES_FL_EF_Init Initialization and de-initialization functions
  598. * @{
  599. */
  600. FL_ErrorStatus FL_AES_DeInit(void);
  601. void FL_AES_StructInit(FL_AES_InitTypeDef *AES_InitStructer);
  602. FL_ErrorStatus FL_AES_Init(AES_Type *AESx, FL_AES_InitTypeDef *AES_InitStructer);
  603. /**
  604. * @}
  605. */
  606. /**
  607. * @}
  608. */
  609. /**
  610. * @}
  611. */
  612. #ifdef __cplusplus
  613. }
  614. #endif
  615. #endif /* __FM33LC0XX_FL_AES_H*/
  616. /*************************Py_Code_Generator Version: 0.1-0.11-0.2 @ 2020-09-23*************************/
  617. /********************** (C) COPYRIGHT Fudan Microelectronics **** END OF FILE ***********************/