學習s12的朋友可以和我一起**!
mc9sdg128b的中斷程式設計主要有兩種方式:
第一種是使用符號「trap_proc」,trap_proc 提示編譯器下面的函式是中斷服務例程。編譯器會用乙個特殊的中斷返回指令來結束這個函式(對大多數處理器來說,一般是rti指令).
第二種是使用「interrupt」關鍵字,「interrupt」關鍵字是乙個非標準ansi-c的關鍵字,因此,它不能被所有ansi-c編譯器廠商所支援。同樣,對不同的編譯器,「interrupt」關鍵字的用法可能會改變。「interrupt」關鍵字同樣會提示編譯器下面的函式是乙個中斷服務例程。
一旦中斷服務函式寫好了,你必須把中斷服務例程和中斷向量表聯絡起來,這通過初始化中斷向量表來實現,你可以通過下面兩種方法來初始化中斷向量表:
第一種是在prm檔案中,使用「vector address」或「vector」命令。聯結器提供兩個命令來初始化中斷向量表:vector address 或 vector,你使用vector address 命令中斷服務例程的位址寫到中斷向量表裡。
第二種是使用「interrupt」關鍵字,在你寫中斷服務例程的時候,你可以在ansi-c原始檔裡直接把中斷服務例程和特殊的中斷號聯絡起來.
下面是我寫的mc9sdg128b的16位自由定時器溢位中斷處理程式,已除錯通過:
#include /* common defines and macros */
#include /* derivative information */
#pragma link_info derivative "mc9s12dg128b"
int intcount = 0;
void timer_init(void)
tscr2_pr0 = 1; //prescale factor is 128
tscr2_pr1 = 1;
tscr2_pr2 = 1;
tscr2_toi = 1; //overflow enable
t***2_tof = 1;
tscr1_ten = 1; //timer enable
}#pragma code_seg non_banked
interrupt 16 void timer_interrupt_handle(void)
;#pragma code_seg default
void main(void)
}以下是採用trap_proc符號編寫的中斷服務程式:
#include /* common defines and macros */
#include /* derivative information */
#pragma link_info derivative "mc9s12dg128b"
int intcount = 0;
void timer_init(void)
#pragma code_seg non_banked
#pragma trap_proc
void timer_interrupt_handle(void)
;#pragma code_seg default
void main(void)
}中斷服務程式編寫完後你需要在.prm檔案裡新增如下一句:
vector 16 timer_interrupt_handle
這樣中斷服務程式才和相應的中斷號聯絡起來。這個程式也已經除錯通過。
中斷服務例程必須被定位於non-banked 區域,通過使用「#pragma code_seg non_banked」可以把中斷例程定位於non-banked 區域。同時你必須確保「sectionnon_banked」不能出現在.prm檔案中。在中斷服務例程的末尾你需要新增「#pragma code_seg default」,否則的話,後面的函式也會被定位在「non-banked」區域。
所以說我們的中斷服務例程必須被「#pragma code_seg non_banked」和「#pragma code_seg default」包圍起來。
mc9s12xdp512的中斷程式設計
中斷在c語言裡面有兩種方式表達 1 interrupt void rti isr void same as pragma trap proc,set the entry number in the prm file這種方式定義了中斷的結構,實際的向量位址在prm檔案中定義 2 void interr...
關於AT91SAM7S64的PIOA中斷觸發問題!
這是實驗 void irq key isr handler void else if 1 16 at91c pioa pdsr else if 1 20 at91c pioa pdsr else if 1 23 at91c pioa pdsr at91c aic eoicr 1 void keyir...
MC9S12G定時器中斷設定
一 關閉定時器模組 時tscr1的ten位為0 二 設定iosx為輸出比較引腳 以7為例 tios ios7 1 三 繫結輸出比較引腳 tctl1 om7 0 tctl1 ol7 1 四 設定計數器的比較值 在24mhz的系統時間下,0xbb為1ms 中斷週期 0x4926 128 24mhz 10...