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
- Zahrňte
Nvic_Libdo své knihovny CMake. - Zahrňte
Nvic_Port.hdo svého projektu. - Prolinkujte implementační soubory modulu Nvic.
- 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.