IAR環境編寫STM8中斷處理函數的技巧

IAR環境下編寫STM8的中斷函數,對於中斷向量的概念、以及編程處理方法不太好理解,這篇文章總結了幾個關鍵的中斷編程技巧,知此文可以不用看搜索其他相關文章了。

1. STM8 中斷向量表

首先清楚stm8的中斷向量表,下圖來自stm8的datasheet。

  1. 中斷向量的起始地址是 0x00 8000。
  2. 意前兩個中斷RESET和TRAP是沒有中斷編號的。
  3. 有中斷編號的始自TLI中斷,編號爲0;其他中斷依次遞進
  4. 每個中斷地址有4個字節。
    在這裏插入圖片描述

2. IAR中斷編譯的關鍵字

IAR編譯器裏用關鍵字來 __interrupt 來定義一箇中斷函數。
#pragma vector 來提供中斷函數的入口地址。如IAR的幫助信息:
在這裏插入圖片描述

Example: 編寫一個TM2更新中斷的入口函數

#pragma vector = 13+2    //定時器2中斷編號爲13
__interrupt void time2_ISR(void)
{
 ;
}

上述代碼中,入口地址寫成#pragma vector=13+2。中斷向量編號根據手冊查到的編號是13,爲什麼還要加2呢?這是因爲:中斷的入口地址在IAR設置爲第一個RESET中斷地址,原來datasheet中編號爲0的中斷TLI,實際上爲第三個中斷地址。因此中斷編號需要偏移,即+2。中斷函數名稱time2_ISR()可以爲任意名稱。
如果編譯出錯,如以下信息:重複定義 _interrupt_xx
是因爲你的工程文件可能已經有相關中斷處理的.h和.c文件了。
在這裏插入圖片描述
建議工程文件中包含stm提供的頭文件和庫: stm8s_it.h stm8s_it.c。編寫相應的中斷時,只需要查看 stm8s_it.h,找到相應的中斷入口函數聲明。並在stm8s_it.c文件中,找到中斷服務函數並添加用戶代碼。

INTERRUPT void TIM2_UPD_OVF_BRK_IRQHandler(void) /* TIM2 UPD/OVF/BRK */
{
	;//put your codes here
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章