CIU32_L051_M307R/Peripheral/CIU32L051_Lib/Include/ciu32l051_std_aes.h

318 lines
8.6 KiB
C
Raw Normal View History

/************************************************************************************************/
/**
* @file ciu32l051_std_aes.h
* @author MCU Ecosystem Development Team
* @brief AES STD<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD>
* <EFBFBD>AES<EFBFBD><EFBFBD><EFBFBD>ص<EFBFBD>STD<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Լ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ķ<EFBFBD><EFBFBD>
*
*
**************************************************************************************************
* @attention
* Copyright (c) CEC Huada Electronic Design Co.,Ltd. All rights reserved.
*
**************************************************************************************************
*/
/* <20><><EFBFBD><EFBFBD>ͷ<EFBFBD>ļ<EFBFBD><C4BC>ظ<EFBFBD><D8B8><EFBFBD><EFBFBD><EFBFBD> */
#ifndef CIU32L051_STD_AES_H
#define CIU32L051_STD_AES_H
/************************************************************************************************/
/**
* @addtogroup CIU32L051_STD_Driver
* @{
*/
/**
* @defgroup AES AES
* @brief <EFBFBD>߼<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܱ<EFBFBD>׼Э<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>STD<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @{
*/
/************************************************************************************************/
#ifdef __cplusplus
extern "C" {
#endif
/*------------------------------------------includes--------------------------------------------*/
#include "ciu32l051_std_common.h"
/*-----------------------------------------type define------------------------------------------*/
/************************************************************************************************/
/**
* @defgroup AES_Types AES Types
* @brief AES<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ͷ<EFBFBD><EFBFBD><EFBFBD>
* @{
*/
/************************************************************************************************/
/**
* @brief AES<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ý<EFBFBD><EFBFBD><EFBFBD>
*/
typedef struct
{
uint32_t mode; /**< <20>ӽ<EFBFBD><D3BD><EFBFBD>ģʽѡ<CABD><D1A1>
@arg AES_MODE_DEC... */
uint32_t swapped_data_type; /**< <20><><EFBFBD>ݽ<EFBFBD><DDBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͣ<EFBFBD><CDA3>ֱ<EFBFBD>Ϊ<EFBFBD>޽<EFBFBD><DEBD><EFBFBD>/16λ/8λ/1λ<31><CEBB><EFBFBD><EFBFBD>
@arg AES_SWAPPED_DATA_NONE... */
} std_aes_init_t;
/**
* @}
*/
/*--------------------------------------------define--------------------------------------------*/
/************************************************************************************************/
/**
* @defgroup AES_Constants AES Constants
* @brief AES<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @{
*
*/
/************************************************************************************************/
/* <20>ӽ<EFBFBD><D3BD><EFBFBD>ģʽ<C4A3><CABD><EFBFBD><EFBFBD> */
#define AES_MODE_ENC AES_CR_MOD_SEL_ENC /**< <20><><EFBFBD><EFBFBD>ģʽ */
#define AES_MODE_DEC AES_CR_MOD_SEL_DEC /**< <20><><EFBFBD><EFBFBD>ģʽ */
/* <20><><EFBFBD>ݽ<EFBFBD><DDBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
#define AES_SWAPPED_DATA_NONE AES_CR_DATA_TYPE_NONE /**< <20>޽<EFBFBD><DEBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͣ<EFBFBD><CDA3><EFBFBD><EFBFBD>ݲ<EFBFBD><DDB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
#define AES_SWAPPED_DATA_16BIT AES_CR_DATA_TYPE_16BIT /**< 16λ<36><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͣ<EFBFBD><CDA3><EFBFBD><EFBFBD>ݰ<EFBFBD><DDB0><EFBFBD><EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD> */
#define AES_SWAPPED_DATA_8BIT AES_CR_DATA_TYPE_8BIT /**< 8λ<38><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͣ<EFBFBD><CDA3><EFBFBD><EFBFBD>ݰ<EFBFBD><DDB0>ֽڽ<D6BD><DABD><EFBFBD> */
#define AES_SWAPPED_DATA_1BIT AES_CR_DATA_TYPE_BIT /**< 1λ<31><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͣ<EFBFBD><CDA3><EFBFBD><EFBFBD>ݰ<EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD> */
/* <20>ж<EFBFBD>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD> */
#define AES_INTERRUPT_COMPLETE AES_CSR_CCIE /**< <20>ӽ<EFBFBD><D3BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>ʹ<EFBFBD><CAB9> */
/* ״̬<D7B4><CCAC>־ */
#define AES_FLAG_COMPLETE AES_CSR_DONE /**< <20>ӽ<EFBFBD><D3BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɱ<EFBFBD>־ */
#define AES_FLAG_BUSY AES_CSR_BUSY /**< <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̱<EFBFBD>־ */
/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־ */
#define AES_CLEAR_FLAG_COMPLETE AES_CSR_CCFC /**< <20>ӽ<EFBFBD><D3BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־ */
/**
* @}
*/
/*-------------------------------------------functions------------------------------------------*/
/************************************************************************************************/
/**
* @defgroup AES_External_Functions AES External Functions
* @brief AES<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @{
*
*/
/************************************************************************************************/
/**
* @brief <EFBFBD><EFBFBD><EFBFBD>üӽ<EFBFBD><EFBFBD><EFBFBD>ģʽ
* @param mode <EFBFBD>ӽ<EFBFBD><EFBFBD><EFBFBD>ģʽ
* @arg AES_MODE_ENC<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ
* @arg AES_MODE_DEC<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ
* @retval <EFBFBD><EFBFBD>
*/
__STATIC_INLINE void std_aes_set_cryption_mode(uint32_t mode)
{
MODIFY_REG(AES->CR, AES_CR_MOD_SEL, mode);
}
/**
* @brief <EFBFBD><EFBFBD>ȡ<EFBFBD>ӽ<EFBFBD><EFBFBD><EFBFBD>ģʽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @retval uint32_t <EFBFBD><EFBFBD><EFBFBD>ؼӽ<EFBFBD><EFBFBD><EFBFBD>ģʽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @arg AES_MODE_ENC<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ
* @arg AES_MODE_DEC<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ
*/
__STATIC_INLINE uint32_t std_aes_get_cryption_mode(void)
{
return (AES->CR & AES_CR_MOD_SEL);
}
/**
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param data_type <EFBFBD><EFBFBD><EFBFBD>ݽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @arg AES_SWAPPED_DATA_NONE<EFBFBD><EFBFBD><EFBFBD>޽<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݲ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @arg AES_SWAPPED_DATA_16BIT<EFBFBD><EFBFBD>16λ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݰ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֽ<EFBFBD><EFBFBD><EFBFBD>
* @arg AES_SWAPPED_DATA_8BIT<EFBFBD><EFBFBD> 8λ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݰ<EFBFBD><EFBFBD>ֽڽ<EFBFBD><EFBFBD><EFBFBD>
* @arg AES_SWAPPED_DATA_1BIT<EFBFBD><EFBFBD> 1λ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݰ<EFBFBD>λ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @retval <EFBFBD><EFBFBD>
*/
__STATIC_INLINE void std_aes_set_data_type(uint32_t data_type)
{
MODIFY_REG(AES->CR, AES_CR_DATA_TYPE, data_type);
}
/**
* @brief <EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD>ݽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @retval uint32_t <EFBFBD><EFBFBD><EFBFBD>ݽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @arg AES_SWAPPED_DATA_NONE<EFBFBD><EFBFBD><EFBFBD>޽<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݲ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @arg AES_SWAPPED_DATA_16BIT<EFBFBD><EFBFBD> 16λ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݰ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֽ<EFBFBD><EFBFBD><EFBFBD>
* @arg AES_SWAPPED_DATA_8BIT<EFBFBD><EFBFBD> 8λ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݰ<EFBFBD><EFBFBD>ֽڽ<EFBFBD><EFBFBD><EFBFBD>
* @arg AES_SWAPPED_DATA_1BIT<EFBFBD><EFBFBD> 1λ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݰ<EFBFBD>λ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*/
__STATIC_INLINE uint32_t std_aes_get_data_type(void)
{
return (AES->CR & AES_CR_DATA_TYPE);
}
/**
* @brief <EFBFBD><EFBFBD>ȡAES<EFBFBD><EFBFBD>־<EFBFBD><EFBFBD>״̬
* @param flag <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ״̬<EFBFBD>ı<EFBFBD>־
* @arg AES_FLAG_COMPLETE<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɱ<EFBFBD>־
* @arg AES_FLAG_BUSY<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬<EFBFBD><EFBFBD>־
* @retval bool <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߼<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ<EFBFBD><EFBFBD><EFBFBD>жϽ<EFBFBD><EFBFBD><EFBFBD>
* @arg true<EFBFBD><EFBFBD> <EFBFBD><EFBFBD>ѯ<EFBFBD><EFBFBD>־<EFBFBD><EFBFBD>λ
* @arg false<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѯ<EFBFBD><EFBFBD>־δ<EFBFBD><EFBFBD>λ
*/
__STATIC_INLINE bool std_aes_get_flag(uint32_t flag)
{
return ((AES->CSR & (flag)) == (flag));
}
/**
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD>AES״̬<EFBFBD><EFBFBD>־λ
* @param flag <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ı<EFBFBD>־
* @arg AES_CLEAR_FLAG_COMPLETE<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɱ<EFBFBD>־
* @retval <EFBFBD><EFBFBD>
*/
__STATIC_INLINE void std_aes_clear_flag(uint32_t flag)
{
MODIFY_REG(AES->CSR, AES_CSR_CCFC, flag);
}
/**
* @brief ʹ<EFBFBD><EFBFBD>DMA<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @retval <EFBFBD><EFBFBD>
*/
__STATIC_INLINE void std_aes_dmain_enable(void)
{
AES->CSR |= AES_CSR_DMAIN_EN;
}
/**
* @brief <EFBFBD><EFBFBD>ֹDMA<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @retval <EFBFBD><EFBFBD>
*/
__STATIC_INLINE void std_aes_dmain_disable(void)
{
AES->CSR &= (~AES_CSR_DMAIN_EN);
}
/**
* @brief ʹ<EFBFBD><EFBFBD>DMA<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @retval <EFBFBD><EFBFBD>
*/
__STATIC_INLINE void std_aes_dmaout_enable(void)
{
AES->CSR |= AES_CSR_DMAOUT_EN;
}
/**
* @brief <EFBFBD><EFBFBD>ֹDMA<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @retval <EFBFBD><EFBFBD>
*/
__STATIC_INLINE void std_aes_dmaout_disable(void)
{
AES->CSR &= (~AES_CSR_DMAOUT_EN);
}
/**
* @brief ʹ<EFBFBD><EFBFBD>AES<EFBFBD>ж<EFBFBD>
* @param interrupt AES<EFBFBD>ж<EFBFBD>Դ
* @arg AES_INTERRUPT_COMPLETE<EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>ʹ<EFBFBD><EFBFBD>
* @retval <EFBFBD><EFBFBD>
*/
__STATIC_INLINE void std_aes_enable_interrupt(uint32_t interrupt)
{
AES->CSR |= (interrupt);
}
/**
* @brief <EFBFBD><EFBFBD>ֹAES<EFBFBD>ж<EFBFBD>
* @param interrupt AES<EFBFBD>ж<EFBFBD>Դ
* @arg AES_INTERRUPT_COMPLETE<EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
* @retval <EFBFBD><EFBFBD>
*/
__STATIC_INLINE void std_aes_disable_interrupt(uint32_t interrupt)
{
AES->CSR &= (~(interrupt));
}
/**
* @brief <EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD>ж<EFBFBD>ʹ<EFBFBD>ܵ<EFBFBD>״̬
* @param interrupt AES<EFBFBD>ж<EFBFBD>Դ
* @arg AES_INTERRUPT_COMPLETE<EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
* @retval bool <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߼<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ<EFBFBD><EFBFBD><EFBFBD>жϽ<EFBFBD><EFBFBD><EFBFBD>
* @arg true<EFBFBD><EFBFBD>ʹ<EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
* @arg false<EFBFBD><EFBFBD>δʹ<EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
*/
__STATIC_INLINE bool std_aes_get_interrupt_enable(uint32_t interrupt)
{
return ((AES->CSR & (interrupt)) == (interrupt));
}
/**
* @brief д<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Կ
* @param p_key ָ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Կ<EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD>
* @note <EFBFBD><EFBFBD>Կ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ4<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @retval <EFBFBD><EFBFBD>
*/
__STATIC_INLINE void std_aes_write_key(uint32_t *p_key)
{
AES->KEYR[3] = p_key[0];
AES->KEYR[2] = p_key[1];
AES->KEYR[1] = p_key[2];
AES->KEYR[0] = p_key[3];
}
/**
* @brief д<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param p_data ָ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD>ָ<EFBFBD><EFBFBD>
* @note <EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><EFBFBD><EFBFBD>Ϊ4<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @retval <EFBFBD><EFBFBD>
*/
__STATIC_INLINE void std_aes_write_data(uint32_t *p_data)
{
AES->DR = p_data[0];
AES->DR = p_data[1];
AES->DR = p_data[2];
AES->DR = p_data[3];
}
/**
* @brief <EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param p_data ָ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD>ָ<EFBFBD><EFBFBD>
* @note <EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><EFBFBD><EFBFBD>Ϊ4<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @retval <EFBFBD><EFBFBD>
*/
__STATIC_INLINE void std_aes_read_data(uint32_t *p_data)
{
p_data[0] = AES->DR;
p_data[1] = AES->DR;
p_data[2] = AES->DR;
p_data[3] = AES->DR;
}
void std_aes_init(std_aes_init_t *aes_init_param);
void std_aes_deinit(void);
void std_aes_struct_init(std_aes_init_t *aes_init_struct);
/**
* @}
*/
#ifdef __cplusplus
}
#endif
/**
* @}
*/
/**
* @}
*/
#endif /* CIU32L051_STD_AES_H */