?? pwm.asm
字號:
st0_temp .usect ".b20",1 ;
st1_temp .usect ".b20",1 ;
context .usect ".b20",7 ;62-68
.include "F2407REGS.H" ;引用頭部文件
.def _c_int0
;(1)建立中斷向量表
.sect ".vectors" ;定義主向量段
RSVECT B _c_int0 ;PM 0 復(fù)位向量 1
INT1 B PHANTOM ;PM 2 中斷優(yōu)先級1 4
INT2 B GISR2 ;PM 4 中斷優(yōu)先級2 5
INT3 B PHANTOM ;PM 6 中斷優(yōu)先級3 6
INT4 B PHANTOM ;PM 8 中斷優(yōu)先級4 7
INT5 B PHANTOM ;PM A 中斷優(yōu)先級 5 8
INT6 B PHANTOM ;PM C 中斷優(yōu)先級 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 ;保留向量地址偏移量 -00H
B PHANTOM ;保留向量地址偏移量 -01H
B PHANTOM ;保留向量地址偏移量 -2EH
B T3GP_ISR ;保留向量地址偏移量 -2FH T3PINT中斷
B PHANTOM ;保留向量地址偏移量 -30H
B PHANTOM ;保留向量地址偏移量 -41H
;(2)主程序
.text
_c_int0
CALL SYSINIT ;系統(tǒng)初始化程序
CALL PWM_INIT ;EVB模塊PWM初始化程序
WAIT
NOP
B WAIT
;(3)系統(tǒng)初始化程序
SYSINIT:
SETC INTM
CLRC SXM
CLRC OVM
CLRC CNF ;B0區(qū)被配置為數(shù)據(jù)空間
LDP #0E0H ;指向7000h-7080h區(qū)
SPLK #81FEH,SCSR1 ;時(shí)鐘4倍頻,CLKIN=6M,CLKOUT=24M
SPLK #0E8H,WDCR ;不使能WDT
LDP #0
SPLK #0002H,IMR ;使能中斷第2級INT2
SPLK #0FFFFH,IFR ;清全部中斷標(biāo)志
RET
;(4)EVB模塊的PWM初始化程序
PWM_INIT:
LDP #DP_PF2 ;指向7080h-7100h區(qū)
LACL MCRC
OR #007EH ;IOPE[1-6]被配置為基本功能方式:PWM[7-12]
SACL MCRC
LDP #DP_EVB ;指向7500h-7580h區(qū)
SPLK #0FFFFH,EVBIFRA ;清EVB 全部中斷標(biāo)志
SPLK #0666H,ACTRB ;PWM12,10,8 低有效,PWM11,9,7 高有效
SPLK #00H,DBTCONB ;不使能死區(qū)控制
SPLK #10H,CMPR4 ;設(shè)置比較初值 PWM7高電平占50/60, 低電平占10/60
SPLK #20H,CMPR5 ;設(shè)置PWM9,10的比較寄存器
SPLK #30H,CMPR6 ;設(shè)置PWM11,12的比較寄存器
SPLK #60H,T3PR ;設(shè)置定時(shí)器3周期寄存器,
;即PWM周期為60個(gè)CPU時(shí)鐘周期
SPLK #0A600H,COMCONB;使能比較操作
SPLK #0,T3CNT
SPLK #41H,GPTCONB ;TCOMPOE=1,T3PIN=01
SPLK #080H,EVBIMRA ;通用定時(shí)器3使能
SPLK #0174EH,T3CON ;TMODE=10 連續(xù)增計(jì)數(shù)模式,TPS=111 預(yù)分頻為128
;TENABLE=1 定時(shí)器計(jì)數(shù)使能, TCLKS=00 內(nèi)部時(shí)鐘
;TECMPR=1 定時(shí)器3比較使能, SELT3PR=0
CLRC INTM ;開總中斷
RET
;(5)定時(shí)器3中斷程序
GISR2: ;優(yōu)先級INT2中斷人口
;保護(hù)現(xiàn)場
LDP #0 ;保存機(jī)器上下文
SST #0,st0_temp ;使用自動(dòng)尋址,DP-0
SST #1,st1_temp ;保存狀態(tài)寄存器到B2 DARAM.
LDP #0
SACL context ;保存ACC的低16位
SACH context+1 ;保存ACC的高16位
SAR AR1,context+2
SAR AR2,context+3
SAR AR3,context+4
SAR AR4,context+5
SAR AR5,context+6
LDP #0E0H
LACC PIVR,1 ;讀取外設(shè)中斷向量寄存器(PIVR),并左移一位
ADD #PVECTORS ;加上外設(shè)中斷人口地址
BACC ;跳到相應(yīng)的中斷服務(wù)子程序
T3GP_ISR: ;通用定時(shí)器3中斷人口
LDP #DP_EVB
SPLK #0,T3CNT
GISR2_RET: ;中斷返回
;恢復(fù)現(xiàn)場
LDP #DP_EVA
SPLK #0FFFFH,EVAIFRA
LDP #0
LAR AR5,context+6
LAR AR4,context+5
LAR AR3,context+4
LAR AR2,context+3
LAR AR1,context+2
LACC context+1,16
ADDS context
LST #1, st1_temp
LST #0, st0_temp
CLRC INTM ;開總中斷,因?yàn)橐贿M(jìn)中斷就自動(dòng)關(guān)閉總中斷
RET
;(6)假中斷程序
PHANTOM
KICK_DOG ;復(fù)位看門狗
RET
END
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -