mFrame
載入中...
搜尋中...
無符合項目
mcxa153::core::CoreInterrupt 類別 參考文件

MCXA153 中斷控制器管理員 更多...

#include <CoreInterrupt.h>

類別mcxa153::core::CoreInterrupt的繼承圖:
ufm::lang::Object hal::InterruptEvent ufm::lang::Interface

公開型態

enum  Service {
  IRQ_GPIO0 = 0 , IRQ_GPIO1 = 1 , IRQ_GPIO2 = 2 , IRQ_GPIO3 = 3 ,
  IRQ_LPUART0 = 4 , IRQ_LPUART1 = 5 , IRQ_LPUART2 = 6 , IRQ_LPI2C0 = 7 ,
  IRQ_LPADC0 = 8 , IRQ_LPSPI0 = 9 , IRQ_LPSPI1 = 10 , IRQ_OS_EVENT = 11 ,
  IRQ_MAX_QUANTITY
}
 中斷服務類型枚舉 更多...
 

公開方法(Public Methods)

void interruptEvent (void) override
 統一中斷事件處理入口
 
void setHandler (Service service, hal::InterruptEvent *runnable)
 設定中斷服務事件處理器
 
hal::InterruptEventgetHandler (Service service)
 取得中斷服務事件處理器
 
void serviceEnable (Service service, bool enable)
 啟用或停用中斷服務
 
- 公開方法(Public Methods) 繼承自 ufm::lang::Object
void * operator new (size_t n)
 使用運算子 new 分配記憶體
 
void * operator new (size_t n, void *p)
 在指定記憶體上調用運算子 new
 
virtual ufm::lang::ObjectgetObject (void) override
 取得對應的 Object 物件
 
void delay (int milliseconds) const
 延遲指定的毫秒數進行執行緒等待
 
bool equals (Object *object) const
 判斷與另一物件是否為相同參照(指標型態比較)
 
bool equals (Object &object) const
 判斷與另一物件是否為相同參照(參照型態比較)
 
void wait (void) const
 使當前線程等待直到被通知
 
bool wait (int timeout) const
 等待通知或超時
 
bool yield (void) const
 讓執行緒讓渡控制權給同優先權的下一個執行緒
 
int lock (void) const
 核心鎖定,鎖定期間禁止線程切換
 
int unlock (void) const
 核心解鎖
 
ufm::sys::ThreadcurrentThread (void) const
 取得當前執行緒指標
 
virtual int hashcode (void) const
 返回對象的哈希碼值。支持這種方法是為了散列表,如HashMap提供的那樣。
 
- 公開方法(Public Methods) 繼承自 ufm::lang::Interface
virtual ~Interface (void)=default
 虛擬析構函式
 

靜態公開方法(Static Public Methods)

static CoreInterruptgetInstance (void)
 取得中斷控制器單例實例
 
static void instantiation (void)
 實例化中斷控制器單例
 

公開屬性

hal::InterruptEventvHandle [IRQ_MAX_QUANTITY]
 中斷事件處理器陣列
 

詳細描述

MCXA153 中斷控制器管理員

CoreInterrupt 提供MCXA153微控制器的統一中斷管理功能。 此類別採用單例模式設計,作為系統中斷的統一分派中心:

主要功能:

  • 統一中斷服務管理
  • 中斷事件分派機制
  • 中斷優先順序控制
  • 中斷啟用/停用管理
  • 事件處理器註冊

設計特色:

  • 單例模式確保唯一性
  • 事件驅動架構
  • 類型安全的中斷分派
  • 靈活的處理器綁定
  • 高效率中斷路由

支援的中斷服務:

  • GPIO埠中斷(GPIO0-GPIO3)
  • 串列通訊中斷(UART0-UART2)
  • I2C通訊中斷(LPI2C0)
  • ADC轉換中斷(LPADC0)
  • SPI通訊中斷(LPSPI0-LPSPI1)
  • 作業系統事件中斷

中斷處理流程:

  1. 硬體中斷觸發
  2. 中斷向量表分派
  3. CoreInterrupt統一入口
  4. 識別中斷來源
  5. 調用註冊的事件處理器
  6. 完成中斷服務

優勢特性:

  • 減少中斷延遲
  • 簡化中斷管理
  • 提高系統穩定性
  • 便於偵錯和維護

應用場景:

  • 系統級中斷管理
  • 週邊設備整合
  • 即時系統開發
  • 多任務協調
採用單例模式,全系統僅有一個實例
警告
中斷處理器必須保持簡潔高效
參閱
hal::InterruptEvent

列舉型態成員說明文件

◆ Service

中斷服務類型枚舉

定義MCXA153微控制器支援的所有中斷服務類型。 每個枚舉值對應一個特定的硬體中斷源。

GPIO中斷服務:

  • IRQ_GPIO0: GPIO埠0中斷(32個腳位的邊緣觸發)
  • IRQ_GPIO1: GPIO埠1中斷(32個腳位的邊緣觸發)
  • IRQ_GPIO2: GPIO埠2中斷(32個腳位的邊緣觸發)
  • IRQ_GPIO3: GPIO埠3中斷(32個腳位的邊緣觸發)

通訊介面中斷:

  • IRQ_LPUART0: 低功耗UART0中斷(接收、傳送、錯誤)
  • IRQ_LPUART1: 低功耗UART1中斷(接收、傳送、錯誤)
  • IRQ_LPUART2: 低功耗UART2中斷(接收、傳送、錯誤)
  • IRQ_LPI2C0: 低功耗I2C0中斷(主從模式、錯誤)
  • IRQ_LPSPI0: 低功耗SPI0中斷(主從模式、DMA)
  • IRQ_LPSPI1: 低功耗SPI1中斷(主從模式、DMA)

類比數位轉換:

  • IRQ_LPADC0: 低功耗ADC0中斷(轉換完成、序列完成)

系統服務:

  • IRQ_OS_EVENT: 作業系統事件中斷(任務切換、系統呼叫)

配置參數:

  • IRQ_MAX_QUANTITY: 最大中斷服務數量(用於陣列大小)
中斷優先順序由硬體和NVIC配置決定
警告
枚舉值與硬體中斷向量對應,不可隨意修改
列舉值
IRQ_GPIO0 

GPIO埠0中斷服務

IRQ_GPIO1 

GPIO埠1中斷服務

IRQ_GPIO2 

GPIO埠2中斷服務

IRQ_GPIO3 

GPIO埠3中斷服務

IRQ_LPUART0 

低功耗UART0中斷服務

IRQ_LPUART1 

低功耗UART1中斷服務

IRQ_LPUART2 

低功耗UART2中斷服務

IRQ_LPI2C0 

低功耗I2C0中斷服務

IRQ_LPADC0 

低功耗ADC0中斷服務

IRQ_LPSPI0 

低功耗SPI0中斷服務

IRQ_LPSPI1 

低功耗SPI1中斷服務

IRQ_OS_EVENT 

作業系統事件中斷服務

IRQ_MAX_QUANTITY 

最大中斷服務數量(12個)

函式成員說明文件

◆ getHandler()

hal::InterruptEvent * mcxa153::core::CoreInterrupt::getHandler ( Service service)

取得中斷服務事件處理器

查詢指定中斷服務目前註冊的事件處理器。 用於驗證處理器設定或執行偵錯。

參數
service中斷服務類型
傳回值
hal::InterruptEvent* 事件處理器指標
  • 有效指標:該服務已註冊處理器
  • nullptr:該服務未註冊處理器

應用場景:

  • 驗證處理器是否正確註冊
  • 偵錯中斷處理流程
  • 動態處理器管理
  • 系統狀態查詢

使用範例:

if (handler != nullptr) {
// GPIO0中斷處理器已註冊
}
hal::InterruptEvent * getHandler(Service service)
取得中斷服務事件處理器
@ IRQ_GPIO0
GPIO埠0中斷服務
Definition CoreInterrupt.h:120
static CoreInterrupt & getInstance(void)
取得中斷控制器單例實例
Definition CoreInterrupt.h:446
返回的指標僅供查詢,不應直接調用
參閱
setHandler(), Service

◆ getInstance()

static CoreInterrupt & mcxa153::core::CoreInterrupt::getInstance ( void )
inlinestatic

取得中斷控制器單例實例

返回系統唯一的CoreInterrupt實例參考。 實作單例模式的存取介面。

傳回值
CoreInterrupt& 中斷控制器實例參考

使用方式:

// 取得實例並設定處理器
// 啟用中斷服務
void setHandler(Service service, hal::InterruptEvent *runnable)
設定中斷服務事件處理器
void serviceEnable(Service service, bool enable)
啟用或停用中斷服務
@ IRQ_LPUART0
低功耗UART0中斷服務
Definition CoreInterrupt.h:124

前置條件:

  • 必須先調用instantiation()方法創建實例
  • 實例指標不可為nullptr

優勢特性:

  • 全域統一存取點
  • 避免多重實例化
  • 簡化系統整合
  • 保證唯一性
使用前必須確保已呼叫instantiation()
警告
未初始化時調用會導致未定義行為
參閱
instantiation(), vInstance

◆ instantiation()

static void mcxa153::core::CoreInterrupt::instantiation ( void )
static

實例化中斷控制器單例

創建並初始化系統唯一的CoreInterrupt實例。 單例模式的初始化方法。

初始化步驟:

  1. 檢查是否已經實例化
  2. 創建新的CoreInterrupt物件
  3. 設定vInstance靜態指標
  4. 執行基本初始化配置

調用時機:

  • 系統啟動初期
  • main()函數開始時
  • 在任何getInstance()調用之前

執行緒安全:

  • 不具備多執行緒安全性
  • 建議在單執行緒環境下初始化
  • 避免重複調用

使用範例:

int main() {
// 初始化中斷控制器
// 之後可以使用getInstance()
return 0;
}
static void instantiation(void)
實例化中斷控制器單例
通常在系統啟動時調用一次即可
警告
重複調用可能導致記憶體洩漏
參閱
getInstance(), vInstance

◆ interruptEvent()

void mcxa153::core::CoreInterrupt::interruptEvent ( void )
overridevirtual

統一中斷事件處理入口

所有MCXA153硬體中斷的統一處理入口點。 此方法負責識別中斷來源並分派到對應的事件處理器。

處理流程:

  1. 讀取中斷控制器狀態
  2. 識別啟動的中斷服務
  3. 查找對應的事件處理器
  4. 調用處理器的interruptEvent()方法
  5. 清除中斷標誌(如需要)

中斷分派邏輯:

  • 按優先順序檢查各中斷源
  • 支援多個中斷同時觸發
  • 未註冊處理器的中斷會被忽略
  • 記錄未處理的中斷事件

錯誤處理:

  • 處理器異常不會影響其他中斷
  • 記錄處理失敗的事件
  • 提供基本的錯誤恢復機制

性能考量:

  • 最小化中斷延遲
  • 快速的中斷源識別
  • 高效的處理器調用
此方法在中斷內容中執行,必須保持高效
警告
處理器異常可能導致系統不穩定
參閱
setHandler(), Service

實作 hal::InterruptEvent.

◆ serviceEnable()

void mcxa153::core::CoreInterrupt::serviceEnable ( Service service,
bool enable )

啟用或停用中斷服務

控制指定中斷服務的啟用狀態。 影響硬體中斷控制器的中斷遮罩設定。

參數
service中斷服務類型
enable啟用狀態
  • true: 啟用中斷服務
  • false: 停用中斷服務

啟用效果:

  • true: 該中斷源可觸發中斷事件
  • false: 該中斷源被遮罩,不會觸發事件

應用時機:

  • 系統初始化後啟用需要的中斷
  • 暫時停用某些中斷服務
  • 功耗管理中的中斷控制
  • 除錯過程中的中斷隔離

使用範例:

// 啟用GPIO0中斷
// 停用UART0中斷

注意事項:

  • 停用中斷不會清除已註冊的處理器
  • 重新啟用時會使用原有的處理器
  • 全域中斷開關仍然有效
停用中斷可能影響系統功能,請謹慎使用
警告
某些系統關鍵中斷不應被停用
參閱
setHandler(), Service

◆ setHandler()

void mcxa153::core::CoreInterrupt::setHandler ( Service service,
hal::InterruptEvent * runnable )

設定中斷服務事件處理器

為指定的中斷服務註冊或取消事件處理器。 當該中斷服務觸發時會自動調用處理器方法。

參數
service中斷服務類型
  • IRQ_GPIO0~IRQ_GPIO3: GPIO埠中斷
  • IRQ_LPUART0~IRQ_LPUART2: UART通訊中斷
  • IRQ_LPI2C0: I2C通訊中斷
  • IRQ_LPADC0: ADC轉換中斷
  • IRQ_LPSPI0~IRQ_LPSPI1: SPI通訊中斷
  • IRQ_OS_EVENT: 作業系統事件中斷
runnable中斷事件處理器指標,nullptr為預設值(取消註冊)

註冊要求:

  • 處理器必須實作hal::InterruptEvent介面
  • interruptEvent()方法必須簡潔高效
  • 處理器物件必須在系統運行期間保持有效

使用範例:

// 註冊GPIO0中斷處理器
// 取消GPIO0中斷處理器
建議在系統初始化階段設定,避免運行時頻繁變更
警告
處理器物件的生命週期必須覆蓋整個使用期間
參閱
getHandler(), Service, hal::InterruptEvent

資料成員說明文件

◆ vHandle

hal::InterruptEvent* mcxa153::core::CoreInterrupt::vHandle[IRQ_MAX_QUANTITY]

中斷事件處理器陣列

儲存各中斷服務對應的事件處理器指標。 陣列索引與Service枚舉值直接對應。

陣列特性:

  • 大小:IRQ_MAX_QUANTITY(12個元素)
  • 索引:直接使用Service枚舉值
  • 初值:所有元素初始化為nullptr
  • 存取:公開允許直接存取(謹慎使用)

處理器要求:

  • 必須實作hal::InterruptEvent介面
  • interruptEvent()方法必須簡潔高效
  • 不可執行阻塞操作
  • 避免長時間計算

使用方式:

  • 透過setHandler()方法設定
  • 透過getHandler()方法查詢
  • nullptr表示該服務未註冊處理器

記憶體管理:

  • 僅儲存指標,不負責物件生命週期
  • 呼叫者負責確保物件有效性
  • 解除註冊時應設定為nullptr

執行緒安全:

  • 讀取操作通常是安全的
  • 寫入操作需在適當時機進行
  • 建議在系統初始化時設定
中斷內容中訪問,需注意原子性
警告
處理器物件必須在整個系統運行期間保持有效
參閱
setHandler(), getHandler(), Service

此類別(class) 文件是由下列檔案中產生: