Модуль RNG MCAL
Підтримувані родини STM32: U5
Не підтримуються: G4, H5, H7, L4
Цей модуль надає абстракцію для керування апаратним генератором випадкових чисел (Random Number Generator, RNG) та отримання з нього даних.
Він пропонує функціональність ініціалізації, конфігурації, керування виконанням, обробки помилок і отримання даних.
Публічні типи
Типи версій
rng_MajorVersion_t– номер мажорної версії (uint8_t).rng_MinorVersion_t– номер мінорної версії (uint8_t).rng_PatchVersion_t– номер версії патча (uint8_t).rng_ModuleVersion_t– структура, що містить{ Major, Minor, Patch }.
Типи стану та статусу
rng_FunctionState_t– стан функції: активна/неактивна.rng_FlagState_t– загальний стан прапорця.rng_RequestState_t– результат обробки запиту (RNG_REQUEST_OK/RNG_REQUEST_ERROR).
Типи ідентифікації та конфігурації
rng_PeriphId_t– ідентифікатор периферії (наприклад,RNG_PERIPH_1).rng_ClkSource_t– вибір джерела тактування RNG.rng_ClkDivider_t– вибір дільника тактування RNG.rng_ConfigSelection_t– конфігурація режиму RNG (наприклад,NIST,AIS_31_SPEED,AIS_31_ENTROPY).rng_Error_t– маска помилок (наприклад,SEED_ERR,CLOCK_ERR).rng_TransferStyle_t– стиль передачі даних (немає, блокуюча, через переривання).
Типи даних
rng_RandomData_t– контейнер вихідних випадкових даних (uint32_t value[RNG_FIFO_LEN]).rng_IrqPrio_t– тип пріоритету IRQ.rng_DataRdyCallback_t– тип callback-а готовності даних.rng_ErrCallback_t– тип callback-а помилки.
Структура конфігурації
rng_ConfigStruct_t– об'єднує всі поля конфігурації периферії:PeriphIdClkSourceConfigSelectionTransferStyleIrqPrioDataRdyCallbackErrorCallback
Публічний API
Інформація про модуль
rng_ModuleVersion_t Rng_Get_ModuleVersion(void);
Ініціалізація
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);
Керування виконанням
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);
Доступ до даних
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);
Конфігурація
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);
Обробка помилок
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);
Обробка 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);
Обробка переривань
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);
🛠 Інтеграція з CMake
- Додайте
Rng_Libдо вашої CMake-бібліотеки. - Підключіть
Rng_Port.hу вашому проєкті. - Злінкуйте з файлами реалізації модуля Rng.
- Налаштуйте модуль відповідно до вашого апаратного забезпечення.
Ліцензія
Цей проєкт ліцензовано за Creative Commons Attribution–NonCommercial 4.0 International (CC BY-NC 4.0).
Ви вільні використовувати, змінювати та поширювати цю роботу в некомерційних цілях за умови належного зазначення авторства.
Повні умови дивіться у LICENSE.md або на creativecommons.org/licenses/by-nc/4.0.
Автори
- Mr.Nobody — embedbits.com
Внески вітаються! Будь ласка, відкрийте pull request.