Modul MCAL RNG
Podporované rodiny STM32: U5
Nepodporované: G4, H5, H7, L4
Tento modul poskytuje abstrakci pro ovládání hardwarového generátoru náhodných čísel (RNG) a získávání dat z něj.
Nabízí funkce pro inicializaci, konfiguraci, řízení běhu, zpracování chyb a čtení dat.
Veřejné typy
Typy verzí
rng_MajorVersion_t– číslo hlavní verze (uint8_t).rng_MinorVersion_t– číslo vedlejší verze (uint8_t).rng_PatchVersion_t– číslo patch verze (uint8_t).rng_ModuleVersion_t– struktura obsahující{ Major, Minor, Patch }.
Typy stavů
rng_FunctionState_t– stav funkce aktivní/neaktivní.rng_FlagState_t– obecný stav příznaku.rng_RequestState_t– výsledek zpracování požadavku (RNG_REQUEST_OK/RNG_REQUEST_ERROR).
Typy pro identifikaci a konfiguraci
rng_PeriphId_t– identifikátor periferie (např.RNG_PERIPH_1).rng_ClkSource_t– výběr zdroje hodin RNG.rng_ClkDivider_t– výběr děličky hodin RNG.rng_ConfigSelection_t– konfigurace režimu RNG (např.NIST,AIS_31_SPEED,AIS_31_ENTROPY).rng_Error_t– maska chyb (např.SEED_ERR,CLOCK_ERR).rng_TransferStyle_t– styl přenosu dat (žádný, blokující, přerušení).
Datové typy
rng_RandomData_t– kontejner pro výstup náhodných dat (uint32_t value[RNG_FIFO_LEN]).rng_IrqPrio_t– typ priority přerušení.rng_DataRdyCallback_t– typ callbacku pro připravená data.rng_ErrCallback_t– typ callbacku pro chybu.
Konfigurační struktura
rng_ConfigStruct_t– sdružuje všechna konfigurační pole periferie:PeriphIdClkSourceConfigSelectionTransferStyleIrqPrioDataRdyCallbackErrorCallback
Veřejné API
Informace o modulu
rng_ModuleVersion_t Rng_Get_ModuleVersion(void);
Inicializace
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);
Řízení běhu
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);
Přístup k datům
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);
Konfigurace
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);
Zpracování chyb
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);
Správa callbacků
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);
Obsluha přeruš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);
🛠 Integrace s CMake
- Zahrňte
Rng_Libdo své knihovny CMake. - Zahrňte
Rng_Port.hdo svého projektu. - Prolinkujte implementační soubory modulu Rng.
- Nakonfigurujte modul podle potřeb vašeho hardwaru.
Licence
Tento projekt je licencován pod licencí Creative Commons Uveďte původ–Neužívejte komerčně 4.0 Mezinárodní (CC BY-NC 4.0).
Toto dílo můžete volně používat, upravovat a sdílet pro nekomerční účely za předpokladu, že uvedete odpovídající autorství.
Úplné podmínky najdete v LICENSE.md nebo navštivte creativecommons.org/licenses/by-nc/4.0.
Autoři
- Mr.Nobody — embedbits.com
Příspěvky jsou vítány! Otevřete prosím pull request.