Перейти до основного вмісту

Модуль NVIC MCAL

Підтримувані родини STM32: G4 · H5 · U5
Не підтримуються: H7, L4

Цей репозиторій містить модуль NVIC (Nested Vectored Interrupt Controller) MCAL для мікроконтролерів STM32.
Модуль спроєктований як специфічний для гілки: кожна гілка відповідає одній родині STM32 (наприклад, L4, F4, U5).
Перемикання між гілками дає розробникам змогу використовувати один і той самий інтерфейс для різних родин.


Огляд модуля​

Модуль NVIC MCAL надає рівень абстракції для налаштування та обробки переривань у MCU STM32.
Він відкриває уніфікований API для всіх підтримуваних родин, що дозволяє:

  • Ініціалізувати / деініціалізувати конфігурацію NVIC
  • Реєструвати обробники переривань та керувати ними
  • Налаштовувати пріоритети
  • Керувати станами pending і active
  • Підтримувати як переривання периферії, так і системні переривання ядра
  • Забезпечувати керування обробником за замовчуванням

Публічний API​

Інформація про модуль​

nvic_ModuleVersion_t Nvic_Get_ModuleVersion(void);

Ініціалізація​

void Nvic_Init(void);
void Nvic_Deinit(void);
void Nvic_Task(void);

Доступ до вказівника стека​

uint32_t Nvic_Get_StackPointerAddr(void);

Обробник за замовчуванням​

nvic_RequestState_t Nvic_Set_DefaultHandler(nvic_IsrCallback_t defaultHandler);

Обробка IRQ периферії​

nvic_RequestState_t Nvic_Set_PeriphIrq_Handler (nvic_PeriphIrqList_t irqId, const nvic_IsrCallback_t irqHandler);
nvic_RequestState_t Nvic_Get_PeriphIrq_Handler (nvic_PeriphIrqList_t irqId, nvic_IsrCallback_t *irqHandler);

nvic_RequestState_t Nvic_Set_PeriphIrq_Prio (nvic_PeriphIrqList_t irqId, nvic_IrqPrio_t irqPrio);
nvic_RequestState_t Nvic_Get_PeriphIrq_Prio (nvic_PeriphIrqList_t irqId, nvic_IrqPrio_t *irqPrio);

nvic_RequestState_t Nvic_Set_PeriphIrq_Active (nvic_PeriphIrqList_t irqId);
nvic_RequestState_t Nvic_Set_PeriphIrq_Inactive(nvic_PeriphIrqList_t irqId);

nvic_RequestState_t Nvic_Set_PeriphIrq_Pending (nvic_PeriphIrqList_t irqId, nvic_IrqFlag_t irqFlag);
nvic_RequestState_t Nvic_Get_PeriphIrq_Pending (nvic_PeriphIrqList_t irqId, nvic_IrqFlag_t *irqFlag);

Обробка IRQ ядра​

nvic_RequestState_t Nvic_Set_CoreIrq_Handler(nvic_CoreIrqList_t irqId, const nvic_IsrCallback_t irqHandler);
nvic_RequestState_t Nvic_Get_CoreIrq_Handler(nvic_CoreIrqList_t irqId, nvic_IsrCallback_t *irqHandler);

nvic_RequestState_t Nvic_Set_CoreIrq_Prio (nvic_CoreIrqList_t irqId, nvic_IrqPrio_t irqPrio);
nvic_RequestState_t Nvic_Get_CoreIrq_Prio (nvic_CoreIrqList_t irqId, nvic_IrqPrio_t *irqPrio);

Стратегія гілок​

  • Кожна гілка відповідає конкретній родині STM32 (наприклад, STM32L4, STM32F4, STM32U5).
  • Публічний API залишається узгодженим між гілками.
  • Відрізняється лише низькорівнева реалізація, що забезпечує переносимість вищих рівнів.

Приклад використання​

// Example: Setting up IRQ handler for a peripheral
Nvic_Set_PeriphIrq_Handler(UART1_IRQn, MyUartHandler);
Nvic_Set_PeriphIrq_Prio(UART1_IRQn, NVIC_PRIORITY_HIGH);
Nvic_Set_PeriphIrq_Active(UART1_IRQn);

🛠 Інтеграція з CMake​

  1. Додайте Nvic_Lib до вашої CMake-бібліотеки.
  2. Підключіть Nvic_Port.h у вашому проєкті.
  3. Злінкуйте з файлами реалізації модуля Nvic.
  4. Налаштуйте модуль відповідно до вашого апаратного забезпечення.

Ліцензія​

Цей проєкт ліцензовано за Creative Commons Attribution–NonCommercial 4.0 International (CC BY-NC 4.0).

Ви вільні використовувати, змінювати та поширювати цю роботу в некомерційних цілях за умови належного зазначення авторства.

Повні умови дивіться у LICENSE.md або на creativecommons.org/licenses/by-nc/4.0.


Автори​

Внески вітаються! Будь ласка, відкрийте pull request.