Přeskočit na hlavní obsah

Modul MCAL NVIC

Podporované rodiny STM32: G4 · H5 · U5
Nepodporované: H7, L4

Tento repozitář poskytuje modul MCAL NVIC (Nested Vectored Interrupt Controller) pro mikrokontroléry STM32.
Modul je navržen jako specifický pro větev, kde každá větev představuje jednu rodinu STM32 (např. L4, F4, U5).
Přepínáním mezi větvemi mohou vývojáři používat stejné rozhraní napříč rodinami.


Přehled modulu​

Modul MCAL NVIC poskytuje abstrakční vrstvu pro konfiguraci a obsluhu přerušení na MCU STM32.
Zpřístupňuje jednotné API pro všechny podporované rodiny, které umožňuje:

  • Inicializovat / deinicializovat konfiguraci NVIC
  • Registrovat a spravovat obslužné rutiny přerušení
  • Konfigurovat priority
  • Řídit stavy pending a active
  • Podporovat jak přerušení periferií, tak systémová přerušení jádra
  • Zajistit správu výchozí obslužné rutiny (default handler)

Veřejné API​

Informace o modulu​

nvic_ModuleVersion_t Nvic_Get_ModuleVersion(void);

Inicializace​

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

Přístup k ukazateli zásobníku​

uint32_t Nvic_Get_StackPointerAddr(void);

Výchozí obslužná rutina​

nvic_RequestState_t Nvic_Set_DefaultHandler(nvic_IsrCallback_t defaultHandler);

Obsluha přerušení periferií​

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);

Obsluha přerušení jádra​

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);

Strategie větvení​

  • Každá větev odpovídá konkrétní rodině STM32 (např. STM32L4, STM32F4, STM32U5).
  • Veřejné API zůstává napříč větvemi konzistentní.
  • Liší se pouze nízkoúrovňová implementace, což zajišťuje přenositelnost vyšších vrstev.

Příklad použití​

// 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);

🛠 Integrace s CMake​

  1. Zahrňte Nvic_Lib do své knihovny CMake.
  2. Zahrňte Nvic_Port.h do svého projektu.
  3. Prolinkujte implementační soubory modulu Nvic.
  4. 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​

Příspěvky jsou vítány! Otevřete prosím pull request.