?? timer.c
字號:
.include "F2407REGS.H" ;引用頭部文件
.def _c_int0
(1)建立中斷向量表
.sect ".vectors" ;定義主向量段
RSVECT B _c_int0 ;PM 0 復位向量 1
INT1 B PHANTOM ;PM 2 中斷優先級1 4
INT2 B GISR2 ;PM 4 中斷優先級2 5
INT3 B PHANTOM ;PM 6 中斷優先級3 6
INT4 B PHANTOM ;PM 8 中斷優先級4 7
INT5 B PHANTOM ;PM A 中斷優先級5 8
INT6 B PHANTOM ;PM C 中斷優先級6 9
RESERVED B PHANTOM ;PM E 模擬量輸入中斷(保留) 10
SW_INT8 B PHANTOM ;PM 10 用戶定義軟件中斷 -
…
SW_INT31 B PHANTOM ;PM 3E 用戶定義軟件中斷 -
;中斷子向量入口定義pvecs
.sect ".pvecs" ;定義子向量段
PVECTORS B PHANTOM ;保留向量地址偏移量-0000h
B PHANTOM ;保留向量地址偏移量-0001h
…
B PHANTOM ;保留向量地址偏移量-0026h
B T1PINT_ISR ;保留向量地址偏移量-0027h T1PINT中斷
B PHANTOM ;保留向量地址偏移量-0028h
…
B PHANTOM ;保留向量地址偏移量-0041h
(2)主程序
.text
_c_int0
SETC INTM
CLRC SXM
CLRC OVM
CLRC CNF ;B0區被配置為數據空間
LDP #0E0H ;指向7000h~7080h區
SPLK #81FEH,SCSR1 ;時鐘4倍頻,CLKIN=6 M,CLKOUT=24 M
SPLK #0E8H,WDCR ;不使能WDT
LDP #0
SPLK #02H,IMR ;使能中斷優先級INT2
SPLK #0FFFFh,IFR ;清中斷標志
LDP #DP_EVA ;指向7400h~7480h區
SPLK #80H,EVAIMRA ;使能T1PINT 中斷
SPLK #0FFFFh,EVAIFRA ;清EVA中斷標志
SPLK #0,GPTCONA
SPLK #177H,T1PR ;使定時器每1ms產生一次中斷
SPLK #0,T1CNT
SPLK #0164CH,T1CON ;TMODE=10 連續增計數模式,TPS=110 預分頻為64
;TENABLE=1 定時器計數使能, TCLKS=00
;內部時鐘
;TECMPR=1 定時器1比較使能, SELT1PR=0
CLRC INTM ;開總中斷
WAIT: NOP
B WAIT
(3)中斷程序
GISR2: ;優先級INT2中斷入口
保護現場
LDP #0E0H
LACC PIVR,1 ;讀取外設中斷向量寄存器(PIVR),并左移一位
ADD #PVECTORS ;加上外設中斷入口地址
BACC ;跳到相應的中斷服務子程序
T1PINT_ISR: ;通用定時器1中斷入口
LDP #DP_EVA
SPLK #0,T1CNT
GISR2_RET: ;中斷返回
恢復現場
CLRC INTM ;開總中斷,因為一進中斷就自動關閉總中斷
RET
(3)假中斷程序
PHANTOM
KICK_DOG ;復位看門狗
RET
END
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -