Preskočiť na hlavný obsah

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:
    • PeriphId
    • ClkSource
    • ConfigSelection
    • TransferStyle
    • IrqPrio
    • DataRdyCallback
    • ErrorCallback

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​

  1. Zahrňte Rng_Lib do svojej knižnice CMake.
  2. Zahrňte Rng_Port.h do svojho projektu.
  3. Prilinkujte implementačné súbory modulu Rng.
  4. 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​

Príspevky sú vítané! Otvorte prosím pull request.