/** ****************************************************************************** * @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****/