一直沒有調(diào)試出結(jié)果,希望高手能不吝賜教!!
源碼如下:
FCL .usect ".data0",1 ;保存載波頻率浮點(diǎn)數(shù)的低位
FCH .usect ".data0",1 ;保存載波頻率浮點(diǎn)數(shù)的高位
FRL .usect ".data0",1 ;保存信號頻率浮點(diǎn)數(shù)的低位
FRH .usect ".data0",1 ;保存信號頻率浮點(diǎn)數(shù)的高位
AL .usect ".data0",1 ;保存調(diào)諧度浮點(diǎn)數(shù)低位
AH .usect ".data0",1 ;保存調(diào)諧度浮點(diǎn)數(shù)高位
N .usect ".data0",1 ;保存一個周期要輸出的PWM脈沖個數(shù)
NL .usect ".data0",1 ;保存一個周期要輸出的PWM脈沖個數(shù)浮點(diǎn)數(shù)低位
NH .usect ".data0",1 ;保存一個周期要輸出的PWM脈沖個數(shù)浮點(diǎn)數(shù)低位
I .usect ".data0",1 ;保存當(dāng)前輸出的是第幾個脈沖
T3PR_TEMPL .usect ".data0",1 ;保存定時器3周期寄存器值的浮點(diǎn)數(shù)低位
T3PR_TEMPH .usect ".data0",1 ;保存定時器3周期寄存器值的浮點(diǎn)數(shù)高位
DATIOL .usect ".data0",1 ;保存占空比浮點(diǎn)數(shù)低位
DATIOH .usect ".data0",1 ;保存占空比浮點(diǎn)數(shù)低位
DFLAG .usect ".data0",1 ;送出一個脈沖的標(biāo)志寄存器
.include "F2407REGS.H" ;引用頭部文件
.ref F$$ITOF,F$$DIV,F$$MUL,F$$FTOI,F$$ADD,F$$LTOF,F$$SUB
.ref _sin
.def _c_int0
;(1)建立中斷向量表
.sect ".vectors" ;定義主向量段
RSVECT B _c_int0 ;PM 0 Reset Vector 1
INT1 B PHANTOM ;PM 2 Int level 1 4
INT2 B GISR2 ;PM 4 Int level 2 5
INT3 B PHANTOM ;PM 6 Int level 3 6
INT4 B PHANTOM ;PM 8 Int level 4 7
INT5 B PHANTOM ;PM A Int level 5 8
INT6 B PHANTOM ;PM C Int level 6 9
RESERVED B PHANTOM ;PM E (Analysis Int) 10
SW_INT8 B PHANTOM ;PM 10 User S/W int —
SW_INT9 B PHANTOM
SW_INT10 B PHANTOM
SW_INT11 B PHANTOM
SW_INT12 B PHANTOM
SW_INT13 B PHANTOM
SW_INT14 B PHANTOM
SW_INT15 B PHANTOM
SW_INT16 B PHANTOM
SW_INT17 B PHANTOM
SW_INT18 B PHANTOM
SW_INT19 B PHANTOM
SW_INT20 B PHANTOM
SW_INT21 B PHANTOM
SW_INT22 B PHANTOM
SW_INT23 B PHANTOM
SW_INT24 B PHANTOM
SW_INT25 B PHANTOM
SW_INT26 B PHANTOM
SW_INT27 B PHANTOM
SW_INT28 B PHANTOM
SW_INT29 B PHANTOM
SW_INT30 B PHANTOM
SW_INT31 B PHANTOM ;PM 3E User S/W int —
;中斷子向量入口定義pvecs
.sect ".pvecs" ;定義子向量段
PVECTORS B PHANTOM ;Reserved pvector addr offset-0000h
B PHANTOM ;Reserved pvector addr offset-0001h
B PHANTOM ;Reserved pvector addr offset-002Eh
B T3GP_ISR ;Reserved pvector addr offset-002Fh T3PINT中斷
B PHANTOM ;Reserved pvector addr offset-0030h
B PHANTOM ;Reserved pvector addr offset-0041h
;(2)主程序
.text
_c_int0:
CALL SYSINIT ;調(diào)系統(tǒng)初始化子程序
CALL PWM_INIT ;調(diào)PWM初始化子程序
LDP #5
SPLK #2710H,FCL ;載波頻率
SPLK #0,FCH
SPLK #032H,FRL ;信號頻率
SPLK #0,FRH
SPLK #3E8H,AL ;調(diào)諧度AL=A*1000
SPLK #0,AH
SPLK #0,I ;I=0
SPLK #1,DFLAG
CALL JISUAN
LOOP: LDP #5
BIT DFLAG,BIT0
BCND LOOP,NTC
LACL DFLAG
AND #0FFFEH
SACL DFLAG
CALL DATIO
B LOOP
;(3)系統(tǒng)初始化程序
SYSINIT:
SETC INTM
CLRC CNF
LDP #0
SPLK #02h,IMR ;使能第1級中斷2
SPLK #0FFFFh,IFR ;清第1級所有中斷標(biāo)志位
LDP #DP_PF1
SPLK #0E8h,WDCR ;禁止 WDT
LDP #00E0H
SPLK #81FEH,SCSR1 ;CLKIN=6M,CLKOUT=24 M
RET
;(4)EVB模塊的PWM初始化程序
PWM_INIT:
LDP #DP_PF2
LACL MCRA
OR #07EH ;IOPE1~IOPE6
SACL MCRC ;配置為特殊功能
LACL MCRC
OR #600h
SACL MCRC
LDP #DP_EVB
SPLK #0FFFFh,EVBIFRA ;清EVA的所有中斷標(biāo)志位
SPLK #0555h,ACTRB ;PWM6,4,2 為低,PWM5,3,1 為高
SPLK #00h,DBTCONB ;禁止死區(qū)控制
SPLK #1fh,CMPR4 ;給比較寄存器賦初值
SPLK #2Fh,CMPR5
SPLK #3fh,CMPR6
SPLK #0960h,T3PR ;給周期寄存器賦初值
LDP #5
SPLK #0960h,T3PR_TEMPL
SPLK #0,T3PR_TEMPH
LDP #DP_EVB
SPLK #0A600h,COMCONB ;禁止比較功能
SPLK 0,T3CNT
SPLK #41h,GPTCONB
SPLK #080h,EVBIMRA
SPLK #0000101101001110b,T3CON
CLRC INTM
RET
;(5)將一些整數(shù)轉(zhuǎn)換為浮點(diǎn)數(shù)子程序,得到計(jì)算占空比要用的常數(shù)
JISUAN:
LDP #5 ;調(diào)諧度由整形轉(zhuǎn)換為浮點(diǎn)
LACL AL
LRLK AR1,STACK ;設(shè)置 STACK指針
SETC SXM
CALL F$$ITOF,AR1 ;A=a×1000
CLRC SXM
MAR *-
LACC *-,16
ADDS *
SACL AL
SACH AH
LRLK AR1,STACK ;A/2000=0.5 a
SETC SXM
LACL #0
SACL *+
LACL #44FAH ;44FA 0000h =2000
SACL *+
LACL AL
SACL *+
LACL AH
SACL *+
CALL F$$DIV
MAR *-
LACC *-,16
ADDS *
SACL AL
SACH AH
LACL T3PR_TEMPL
LRLK AR1,STACK
SETC SXM ;定時器周期寄存器
;的值轉(zhuǎn)換為浮點(diǎn)數(shù)
CALL F$$ITOF,AR1
CLRC SXM
MAR *-
LACC *-,16
ADDS *
SACL T3PR_TEMPL
SACH T3PR_TEMPH
LACL FCL ;FC值轉(zhuǎn)換為浮點(diǎn)數(shù)
LRLK AR1,STACK
SETC SXM
CALL F$$LTOF,AR1
CLRC SXM
MAR *-
LACC *-,16
ADDS *
SACL FCL
SACH FCH
LACL FRL
LRLK AR1,STACK
SETC SXM ;FR值轉(zhuǎn)換為浮點(diǎn)數(shù)
CALL F$$ITOF,AR1
CLRC SXM
MAR *-
LACC *-,16
ADDS *
SACL FRL
SACH FRH
LRLK AR1,STACK ;N=FC/FR
LACL FRL
SACL *+
LACL FRH
SACL *+
LACL FCL
SACL *+
LACL FCH
SACL *+
CALL F$$DIV
MAR *-
LACC *-,16
ADDS *
SACL NL
SACH NH ;N的浮點(diǎn)數(shù)
LRLK AR1,STACK
SETC SXM
SACL *+
SACH *+
CALL F$$FTOI
SACL N ;N的整數(shù)
LRLK AR1,STACK
SACL *+
LACL NH
SACL *+
LACL #0F5C3H ;40C8F5C3h=6.282=2×3.141
SACL *+
LACL #40C8H
SACL *+
CALL F$$DIV
MAR *-
LACC *-,16
ADDS *
SACL NL
SACH NH
RET
;(6)計(jì)算占空比子程序
DATIO:
LDP #5
LACL I ;I由整形轉(zhuǎn)換為浮點(diǎn)數(shù)
LRLK AR1,STACK
SETC SXM
CALL F$$ITOF,AR1
CLRC SXM
MAR *-
LACC *-,16
ADDS * ;結(jié)果保存在 ACC
LRLK AR1,STACK ;i*2*3.14/N
SACL *+
SACH *+
LACL NL
SACL *+
LACL NH
SACL *+
CALL F$$MUL
MAR *-
ZALH *-
ADDS *
LRLK AR1,STACK ;sin(i*2*3.14/N)
SACL *+
SACH *+
CALL _sin ;結(jié)果在 ACC
LRLK AR1,STACK ;0.5a*sin(i*2*3.14/N)
SACL *+
SACH *+
LACL AL
SACL *+
LACL AH
SACL *+
CALL F$$MUL
MAR *-
ZALH *-
ADDS * ;結(jié)果在 ACC
LRLK AR1,STACK ;D=0.5+A*sin(i*2*3.14/N)
SACL *+
SACH *+
LACL #0
SACL *+
LACL #3F00H ;3F00 0000h =0.5
SACL *+
CALL F$$ADD
MAR *-
ZALH *-
ADDS * ;結(jié)果在 ACC
LRLK AR1,STACK
SACL *+
SACH *+
LACL T3PR_TEMPL
SACL *+
LACL T3PR_TEMPH
SACL *+
CALL F$$MUL
MAR *-
ZALH *-
ADDS * ;結(jié)果在 ACC
LRLK AR1,STACK ;CMPR的浮點(diǎn)數(shù)轉(zhuǎn)換為整數(shù)
SETC SXM
SACL *+
SACH *+
CALL F$$FTOI,AR1
CLRC SXM ;結(jié)果在 ACC
SACL DATIOL
LDP #5
LACC I
SUB N
BCND NSPWM,GEQ
LACC I
ADD #1
SACL I
B RRET
NSPWM: SPLK #0,I ;斷是否是下一個周期
RRET: RET
PHANTOM: KICK_DOG ;復(fù)位WD計(jì)數(shù)器
RET
;(7)定時器3中斷程序
GISR2:
SST #0,ST0_CON1 ;保存狀態(tài)寄存器
SST #1,ST1_CON1
LDP #0E0h ;DP指針指向 PIVR 所在的數(shù)據(jù)區(qū)
LACC PIVR,1 ;讀 EVIVRB, 結(jié)果左移一位
ADD #PVECTORS ;加上偏移量
BACC
T3GP_ISR:
LDP #5
LACC DFLAG
OR #1 ;設(shè)置DFLAG.15=1
SACL DFLAG
LACL DATIOL
LDP #DP_EVB
SACL CMPR4 ;更新比較寄存器的值
ADD #32H
SACL CMPR5
ADD #32H
SACL CMPR6
LDP #0
LST #1,ST1_CON1
LST #0,ST0_CON1
LDP #DP_EVB
SPLK #0FFFFH,EVBIFRA
CLRC INTM
RET
END
發(fā)“用TMS320LF2407實(shí)現(xiàn)三相SPWM波形發(fā)生器”的源程序,順便求助!!
全部回復(fù)(4)
正序查看
倒序查看