/**
|
******************************************************************************
|
* @file fm33a0xxev_rng.c
|
* @author FM33A0XXEV Application Team
|
* @version V1.0.0
|
* @date 16-April-2020
|
* @brief This file provides firmware functions to manage the following
|
* functionalities of....:
|
*
|
*/
|
|
/* Includes ------------------------------------------------------------------*/
|
|
#include "fm33a0xxev_rng.h"
|
|
/** @addtogroup fm33a0xxev_StdPeriph_Driver
|
* @{
|
*/
|
|
/** @defgroup RNG
|
* @brief RNG driver modules
|
* @{
|
*/
|
|
/* RNGʹÄܼĴæÆ÷£¬Èí¼þд1Æô¶¯ (RNG enable)
|
1£ºÆô¶¯RNG
|
0£º¹Ø±ÕRNG Ïà¹Øº¯Êý */
|
void RNG_CR_EN_Setable(FunState NewState)
|
{
|
if (NewState == ENABLE)
|
{
|
RNG->CR |= (RNG_CR_EN_Msk);
|
}
|
else
|
{
|
RNG->CR &= ~(RNG_CR_EN_Msk);
|
}
|
}
|
|
FunState RNG_CR_EN_Getable(void)
|
{
|
if (RNG->CR & (RNG_CR_EN_Msk))
|
{
|
return ENABLE;
|
}
|
else
|
{
|
return DISABLE;
|
}
|
}
|
|
/* Ëæ»úÊýÉú³É½á¹û»òCRCÔËËã½á¹û¼Ä´æÆ÷£¬Ö»¶Á
|
(RNG output) Ïà¹Øº¯Êý */
|
uint32_t RNG_DOR_Read(void)
|
{
|
return (RNG->DOR);
|
}
|
|
/* LFSR״̬±êÖ¾£¬Ö»¶Á (LFSR enable)
|
1£ºLFSRÔÚÔËÐÐÖУ¬²»¿É½øÐÐCRCÑéÖ¤
|
0£ºLFSR²»ÔÚÔËÐÐÖУ¬¿É½øÐÐCRCÑéÖ¤
|
×¢£º±¾¼Ä´æÆ÷²»»áÒýÆðÄ£¿éÖжϣ¬½ö¹©²éѯ Ïà¹Øº¯Êý */
|
FlagStatus RNG_SR_LFSREN_Chk(void)
|
{
|
if (RNG->SR & (RNG_SR_LFSREN_Msk))
|
{
|
return SET;
|
}
|
else
|
{
|
return RESET;
|
}
|
}
|
|
/* Ëæ»úÊýÉú³Éʧ°Ü±êÖ¾£¬Èí¼þд1ÇåÁã (Random Number Fail)
|
1£ºËæ»úÊýδÄÜͨ¹ýÖÊÁ¿¼ì²â
|
0£ºËæ»úÊýͨ¹ýÖÊÁ¿¼ì²â Ïà¹Øº¯Êý */
|
void RNG_SR_RNF_Clr(void)
|
{
|
RNG->SR = RNG_SR_RNF_Msk;
|
}
|
|
FlagStatus RNG_SR_RNF_Chk(void)
|
{
|
if (RNG->SR & RNG_SR_RNF_Msk)
|
{
|
return SET;
|
}
|
else
|
{
|
return RESET;
|
}
|
}
|
|
/* CRCʹÄÜ¿ØÖƼĴæÆ÷£¬Èí¼þд1Æô¶¯CRC£¬ÔËËãÍê³ÉºóÓ²¼þ×Ô¶¯ÇåÁã (CRC enable)
|
1£ºCRCʹÄÜ
|
0£ºCRC¹Ø±Õ Ïà¹Øº¯Êý */
|
void RNG_CRC_CR_CRCEN_Setable(FunState NewState)
|
{
|
if (NewState == ENABLE)
|
{
|
RNG->CRC_CR |= (RNG_CRC_CR_CRCEN_Msk);
|
}
|
else
|
{
|
RNG->CRC_CR &= ~(RNG_CRC_CR_CRCEN_Msk);
|
}
|
}
|
|
FunState RNG_CRC_CR_CRCEN_Getable(void)
|
{
|
if (RNG->CRC_CR & (RNG_CRC_CR_CRCEN_Msk))
|
{
|
return ENABLE;
|
}
|
else
|
{
|
return DISABLE;
|
}
|
}
|
|
/* CRCÔËËãÊý¾ÝÊäÈë¼Ä´æÆ÷ (CRC data input) Ïà¹Øº¯Êý */
|
void RNG_CRC_DIR_Write(uint32_t SetValue)
|
{
|
RNG->CRC_DIR = (SetValue);
|
}
|
|
uint32_t RNG_CRC_DIR_Read(void)
|
{
|
return (RNG->CRC_DIR);
|
}
|
|
/* CRC¼ÆËãÍê³É±êÖ¾£¬Èí¼þд0ÇåÁã (CRC calculation done)
|
1£ºCRC¼ÆËãÍê³É
|
0£ºCRC¼ÆËãδÍê³É Ïà¹Øº¯Êý */
|
void RNG_CRC_SR_CRCDONE_Clr(void)
|
{
|
RNG->CRC_SR &= ~(RNG_CRC_SR_CRCDONE_Msk);
|
}
|
|
FlagStatus RNG_CRC_SR_CRCDONE_Chk(void)
|
{
|
if (RNG->CRC_SR & RNG_CRC_SR_CRCDONE_Msk)
|
{
|
return SET;
|
}
|
else
|
{
|
return RESET;
|
}
|
}
|
|
|
void RNG_Deinit(void)
|
{
|
//RNG->CR = 0x00000000;
|
//RNG->DOR = 0x00000000;
|
//RNG->SR = 0x00000000;
|
//RNG->CRC_CR = 0x00000000;
|
//RNG->CRC_DIR = 0xFFFFFFFF;
|
//RNG->CRC_SR = 0x00000000;
|
}
|
|
/******END OF FILE****/
|