Modul MCAL NVIC
Podporované rodiny STM32: G4 · H5 · U5
Nepodporované: H7, L4
Tento repozitár poskytuje modul MCAL NVIC (Nested Vectored Interrupt Controller) pre mikrokontroléry STM32.
Modul je navrhnutý ako špecifický pre vetvu, pričom každá vetva predstavuje jednu rodinu STM32 (napr. L4, F4, U5).
Prepínanie medzi vetvami umožňuje vývojárom používať rovnaké rozhranie naprieč rodinami.
Prehľad modulu
Modul MCAL NVIC poskytuje abstrakčnú vrstvu na konfiguráciu a spracovanie prerušení na MCU STM32.
Pre všetky podporované rodiny sprístupňuje jednotné API na:
- Inicializáciu / deinicializáciu konfigurácie NVIC
- Registráciu a správu obslužných rutín prerušení
- Konfiguráciu priorít
- Riadenie stavov pending a active
- Podporu prerušení periférií aj systémových prerušení jadra
- Správu predvoleného handlera
Verejné API
Informácie o module
nvic_ModuleVersion_t Nvic_Get_ModuleVersion(void);
Inicializácia
void Nvic_Init(void);
void Nvic_Deinit(void);
void Nvic_Task(void);
Prístup k ukazovateľu zásobníka
uint32_t Nvic_Get_StackPointerAddr(void);
Predvolený handler
nvic_RequestState_t Nvic_Set_DefaultHandler(nvic_IsrCallback_t defaultHandler);
Spracovanie IRQ periférií
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);
Spracovanie IRQ jadra
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);
Stratégia vetvenia
- Každá vetva zodpovedá konkrétnej rodine STM32 (napr.
STM32L4,STM32F4,STM32U5). - Verejné API zostáva konzistentné naprieč vetvami.
- Líši sa iba nízkoúrovňová implementácia, čo zaisťuje prenosnosť vyšších vrstiev.
Príklad použitia
// 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);
🛠 Integrácia s CMake
- Zahrňte
Nvic_Libdo svojej knižnice CMake. - Zahrňte
Nvic_Port.hdo svojho projektu. - Prilinkujte implementačné súbory modulu Nvic.
- 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
- Mr.Nobody — embedbits.com
Príspevky sú vítané! Otvorte prosím pull request.