學習KEA之中斷系統

這篇 學習KEA之週期中斷定時器PIT 已經使用了定時中斷,本篇將歸納一下中斷系統的操作。

中斷向量表

KEA系列是Arm® Cortex®-M0+,最多有48箇中斷。

比如在SKEAZN642.h中,定義了中斷向量表,數字越小的中斷,表明默認的中斷優先級是越高的:

typedef enum IRQn {
  /* Core interrupts */
  NonMaskableInt_IRQn          = -14,              /**< Non Maskable Interrupt */
  HardFault_IRQn               = -13,              /**< Cortex-M0 SV Hard Fault Interrupt */
  SVCall_IRQn                  = -5,               /**< Cortex-M0 SV Call Interrupt */
  PendSV_IRQn                  = -2,               /**< Cortex-M0 Pend SV Interrupt */
  SysTick_IRQn                 = -1,               /**< Cortex-M0 System Tick Interrupt */

  /* Device specific interrupts */
  Reserved16_IRQn              = 0,                /**< Reserved interrupt 16 */
  Reserved17_IRQn              = 1,                /**< Reserved interrupt 17 */
  Reserved18_IRQn              = 2,                /**< Reserved interrupt 18 */
  Reserved19_IRQn              = 3,                /**< Reserved interrupt 19 */
  Reserved20_IRQn              = 4,                /**< Reserved interrupt 20 */
  FTMRH_IRQn                   = 5,                /**< FTMRH command complete and error interrupt */
  LVD_LVW_IRQn                 = 6,                /**< Low-voltage warning */
  IRQ_IRQn                     = 7,                /**< External interrupt */
  I2C0_IRQn                    = 8,                /**< I2C0 single interrupt vector for all sources */
  Reserved25_IRQn              = 9,                /**< Reserved interrupt 25 */
  SPI0_IRQn                    = 10,               /**< SPI0 single interrupt vector for all sources */
  SPI1_IRQn                    = 11,               /**< SPI1 single interrupt vector for all sources */
  UART0_IRQn                   = 12,               /**< UART0 status and error */
  UART1_IRQn                   = 13,               /**< UART1 status and error */
  UART2_IRQn                   = 14,               /**< UART2 status and error */
  ADC0_IRQn                    = 15,               /**< ADC conversion complete interrupt */
  ACMP0_IRQn                   = 16,               /**< ACMP0 interrupt */
  FTM0_IRQn                    = 17,               /**< FTM0 single interrupt vector for all sources */
  FTM1_IRQn                    = 18,               /**< FTM1 single interrupt vector for all sources */
  FTM2_IRQn                    = 19,               /**< FTM2 single interrupt vector for all sources */
  RTC_IRQn                     = 20,               /**< RTC overflow */
  ACMP1_IRQn                   = 21,               /**< ACMP1 interrupt */
  PIT_CH0_IRQn                 = 22,               /**< PIT CH0 overflow */
  PIT_CH1_IRQn                 = 23,               /**< PIT CH1 overflow */
  KBI0_IRQn                    = 24,               /**< KBI0 interrupt */
  KBI1_IRQn                    = 25,               /**< KBI1 interrupt */
  Reserved42_IRQn              = 26,               /**< Reserved interrupt 42 */
  ICS_IRQn                     = 27,               /**< Clock loss of lock */
  WDOG_EWM_IRQn                = 28,               /**< Watchdog timeout */
  Reserved45_IRQn              = 29,               /**< Reserved interrupt 45 */
  Reserved46_IRQn              = 30,               /**< Reserved interrupt 46 */
  Reserved47_IRQn              = 31                /**< Reserved interrupt 47 */
} IRQn_Type;

中斷的使用步驟

  • init_IRQs
// 這三個是在core_cm0plus.h中定義:
NVIC_ClearPendingIRQ(PIT_CH1_IRQn);  /* Clear any Pending IRQ for all PIT ch1 (#23) */
NVIC_EnableIRQ(PIT_CH1_IRQn);        /* Set Enable IRQ for PIT_CH1 */
NVIC_SetPriority(PIT_CH1_IRQn, 0);    /* Set Priority for PIT_CH1 */
  • 到相應的控制寄存器中開啓中斷
    在這裏插入圖片描述
  • 中斷服務程序
    • 清除相應的中斷標誌位 (可選)
void PIT_CH1_IRQHandler (void)
{
	PIT_TFLG1 |= PIT_TFLG_TIF_MASK; /* Clear PIT1 flag */

	/* 應用程序 */
}

從上面可以看到,中斷服務程序的名稱的規則是一般是這樣:

  • 先在中斷向量表中找到相應的中斷向量PIT_CH1_IRQn
  • 然後提取前綴PIT_CH1
  • 最後和IRQHandler結合,就是中斷服務程序的名稱 PIT_CH1_IRQHandler。

一些中斷服務程序的名稱的彙總:

  • FTM2_IRQHandler
  • PIT_CH1_IRQHandler
  • KBI1_IRQHandler
  • UART2_IRQHandle
  • ADC_IRQHandler

OVER~~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章