Modul MCAL RNG
Podporované rodiny STM32: U5
Nepodporované: G4, H5, H7, L4
Tento modul poskytuje abstrakciu na riadenie hardvérového generátora náhodných čísel (RNG) a získavanie dát z neho.
Ponúka funkcionalitu inicializácie, konfigurácie, riadenia behu, spracovania chýb a získavania dát.
Verejné typy
Typy verzií
rng_MajorVersion_t– Číslo hlavnej verzie (uint8_t).rng_MinorVersion_t– Číslo vedľajšej verzie (uint8_t).rng_PatchVersion_t– Číslo verzie opravy (uint8_t).rng_ModuleVersion_t– Štruktúra obsahujúca{ Major, Minor, Patch }.
Typy stavov
rng_FunctionState_t– Stav funkcie aktívna/neaktívna.rng_FlagState_t– Všeobecný stav príznaku.rng_RequestState_t– Výsledok spracovania požiadavky (RNG_REQUEST_OK/RNG_REQUEST_ERROR).
Typy identifikácie a konfigurácie
rng_PeriphId_t– Identifikátor periférie (napr.RNG_PERIPH_1).rng_ClkSource_t– Výber zdroja hodín RNG.rng_ClkDivider_t– Výber deličky hodín RNG.rng_ConfigSelection_t– Konfigurácia režimu RNG (napr.NIST,AIS_31_SPEED,AIS_31_ENTROPY).rng_Error_t– Maska chýb (napr.SEED_ERR,CLOCK_ERR).rng_TransferStyle_t– Štýl prenosu dát (žiadny, blokujúci, prerušenie).
Dátové typy
rng_RandomData_t– Výstupný kontajner náhodných dát (uint32_t value[RNG_FIFO_LEN]).rng_IrqPrio_t– Typ priority IRQ.rng_DataRdyCallback_t– Typ callbacku pripravenosti dát.rng_ErrCallback_t– Typ callbacku chyby.
Konfiguračná štruktúra
rng_ConfigStruct_t– Združuje všetky konfiguračné polia periférie:PeriphIdClkSourceConfigSelectionTransferStyleIrqPrioDataRdyCallbackErrorCallback
Verejné API
Informácie o module
rng_ModuleVersion_t Rng_Get_ModuleVersion(void);
Inicializácia
rng_RequestState_t Rng_Init(rng_ConfigStruct_t * const rngConfig);
rng_RequestState_t Rng_Deinit(rng_ConfigStruct_t * const rngConfig);
void Rng_Task(void);
rng_RequestState_t Rng_Get_DefaultConfig(rng_ConfigStruct_t *rngConfig);
Riadenie behu
rng_RequestState_t Rng_Set_ExecActive(rng_PeriphId_t rngId);
rng_RequestState_t Rng_Set_ExecInactive(rng_PeriphId_t rngId);
rng_RequestState_t Rng_Get_ExecState(rng_PeriphId_t rngId, rng_FunctionState_t * const state);
rng_RequestState_t Rng_Set_ExecPauseActive(rng_PeriphId_t rngId);
rng_RequestState_t Rng_Set_ExecPauseInactive(rng_PeriphId_t rngId);
rng_RequestState_t Rng_Get_ExecPauseState(rng_PeriphId_t rngId, rng_FunctionState_t * const state);
Prístup k dátam
rng_RequestState_t Rng_Get_Data(rng_PeriphId_t rngId, rng_RandomData_t * const data);
rng_RequestState_t Rng_Get_DataReadyState(rng_PeriphId_t rngId, rng_FunctionState_t * const state);
Konfigurácia
rng_RequestState_t Rng_Set_Configuration(rng_PeriphId_t rngId, rng_ConfigSelection_t configSelection);
rng_RequestState_t Rng_Get_Configuration(rng_PeriphId_t rngId, rng_ConfigSelection_t * const configSelection);
rng_RequestState_t Rng_Set_ClkSource(rng_PeriphId_t rngId, rng_ClkSource_t clkSource);
rng_RequestState_t Rng_Set_ClkDivider(rng_PeriphId_t rngId, rng_ClkDivider_t clkDivider);
rng_RequestState_t Rng_Get_ClkDivider(rng_PeriphId_t rngId, rng_ClkDivider_t * const clkDivider);
Spracovanie chýb
rng_RequestState_t Rng_Get_Error(rng_PeriphId_t rngId, rng_Error_t * const errMask);
rng_RequestState_t Rng_Clear_Error(rng_PeriphId_t rngId, rng_Error_t errMask);
rng_RequestState_t Rng_Set_ClockErrorDetectActive(rng_PeriphId_t rngId);
rng_RequestState_t Rng_Set_ClockErrorDetectInactive(rng_PeriphId_t rngId);
rng_RequestState_t Rng_Get_ClockErrorDetectState(rng_PeriphId_t rngId, rng_FunctionState_t * const state);
rng_RequestState_t Rng_Set_AutoResetActive(rng_PeriphId_t rngId);
rng_RequestState_t Rng_Set_AutoResetInactive(rng_PeriphId_t rngId);
rng_RequestState_t Rng_Get_AutoResetState(rng_PeriphId_t rngId, rng_FunctionState_t * const reqState);
Spracovanie callbackov
rng_RequestState_t Rng_Set_DataRdyCallback(rng_PeriphId_t rngId, rng_DataRdyCallback_t * const callback);
rng_RequestState_t Rng_Get_DataRdyCallback(rng_PeriphId_t rngId, rng_DataRdyCallback_t ** const callback);
rng_RequestState_t Rng_Set_ErrorCallback(rng_PeriphId_t rngId, rng_ErrCallback_t * const callback);
rng_RequestState_t Rng_Get_ErrorCallback(rng_PeriphId_t rngId, rng_ErrCallback_t ** const callback);
Spracovanie prerušení
rng_RequestState_t Rng_Set_IrqActive(rng_PeriphId_t rngId);
rng_RequestState_t Rng_Set_IrqInactive(rng_PeriphId_t rngId);
rng_RequestState_t Rng_Get_IrqState(rng_PeriphId_t rngId, rng_FunctionState_t * const reqState);
rng_RequestState_t Rng_Set_IrqPriority(rng_PeriphId_t rngId, rng_IrqPrio_t irqPrio);
rng_RequestState_t Rng_Get_IrqPriority(rng_PeriphId_t rngId, rng_IrqPrio_t * const irqPrio);
🛠 Integrácia s CMake
- Zahrňte
Rng_Libdo svojej knižnice CMake. - Zahrňte
Rng_Port.hdo svojho projektu. - Prilinkujte implementačné súbory modulu Rng.
- Nakonfigurujte modul podľa potrieb vášho hardvéru.
Licencia
Tento projekt je licencovaný pod licenciou Creative Commons Attribution–NonCommercial 4.0 International (CC BY-NC 4.0).
Toto dielo môžete slobodne používať, upravovať a zdieľať na nekomerčné účely, pokiaľ uvediete primeraný zdroj.
Úplné znenie podmienok nájdete v LICENSE.md alebo na creativecommons.org/licenses/by-nc/4.0.
Autori
- Mr.Nobody — embedbits.com
Príspevky sú vítané! Otvorte prosím pull request.