• 回复
  • 收藏
  • 点赞
  • 分享
  • 发新帖
  • 论坛首页
  • TI论坛
  • 发“用TMS320LF2407实现三相SPWM波形发生器”的源程序,顺便求助!!

发“用TMS320LF2407实现三相SPWM波形发生器”的源程序,顺便求助!!

一直没有调试出结果,希望高手能不吝赐教!!

源码如下:


FCL .usect   ".data0",1 ;保存载波频率浮点数的低位
FCH .usect   ".data0",1 ;保存载波频率浮点数的高位
FRL .usect   ".data0",1 ;保存信号频率浮点数的低位
FRH .usect   ".data0",1 ;保存信号频率浮点数的高位
AL .usect   ".data0",1 ;保存调谐度浮点数低位
AH .usect   ".data0",1 ;保存调谐度浮点数高位
N           .usect   ".data0",1    ;保存一个周期要输出的PWM脉冲个数
NL .usect   ".data0",1 ;保存一个周期要输出的PWM脉冲个数浮点数低位
NH .usect   ".data0",1 ;保存一个周期要输出的PWM脉冲个数浮点数低位
I .usect   ".data0",1 ;保存当前输出的是第几个脉冲
T3PR_TEMPL   .usect ".data0",1 ;保存定时器3周期寄存器值的浮点数低位  
T3PR_TEMPH .usect ".data0",1 ;保存定时器3周期寄存器值的浮点数高位  
DATIOL      .usect ".data0",1 ;保存占空比浮点数低位
DATIOH       .usect ".data0",1 ;保存占空比浮点数低位
DFLAG .usect   ".data0",1 ;送出一个脉冲的标志寄存器
.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 ;调系统初始化子程序
CALL PWM_INIT ;调PWM初始化子程序
        LDP #5
SPLK #2710H,FCL ;载波频率
SPLK #0,FCH
SPLK #032H,FRL ;信号频率
SPLK #0,FRH
SPLK #3E8H,AL ;调谐度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)系统初始化程序
SYSINIT:
SETC INTM
CLRC CNF
LDP #0
SPLK #02h,IMR ;使能第1级中断2
SPLK #0FFFFh,IFR ;清第1级所有中断标志位
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的所有中断标志位
SPLK #0555h,ACTRB ;PWM6,4,2 为低,PWM5,3,1 为高
SPLK #00h,DBTCONB ;禁止死区控制
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)将一些整数转换为浮点数子程序,得到计算占空比要用的常数
JISUAN:
LDP #5 ;调谐度由整形转换为浮点
LACL AL
LRLK    AR1,STACK    ;设置 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 ;定时器周期寄存器
;的值转换为浮点数
CALL F$$ITOF,AR1
CLRC SXM
MAR *-
LACC *-,16
ADDS *
SACL T3PR_TEMPL
SACH T3PR_TEMPH
LACL FCL ;FC值转换为浮点数
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值转换为浮点数
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的浮点数
LRLK    AR1,STACK
SETC SXM
SACL *+
SACH *+
CALL F$$FTOI
SACL N ;N的整数
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)计算占空比子程序
DATIO:
LDP #5
LACL I   ;I由整形转换为浮点数
LRLK    AR1,STACK
SETC SXM
CALL F$$ITOF,AR1
CLRC SXM
MAR *-
LACC *-,16
ADDS * ;结果保存在 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 ;结果在 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 * ;结果在 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 * ;结果在 ACC
LRLK AR1,STACK
SACL *+
SACH *+
LACL T3PR_TEMPL
SACL *+
LACL T3PR_TEMPH
SACL *+
CALL F$$MUL
MAR *-
ZALH *-
ADDS * ;结果在 ACC
LRLK    AR1,STACK ;CMPR的浮点数转换为整数
SETC SXM
SACL *+
SACH *+
CALL F$$FTOI,AR1
CLRC SXM ;结果在 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 ;复位WD计数器
RET
;(7)定时器3中断程序
GISR2:
SST #0,ST0_CON1 ;保存状态寄存器
SST #1,ST1_CON1
LDP #0E0h ;DP指针指向 PIVR 所在的数据区
LACC PIVR,1 ;读 EVIVRB, 结果左移一位
ADD #PVECTORS ;加上偏移量
BACC
T3GP_ISR:
LDP #5
LACC DFLAG
OR #1 ;设置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
全部回复(4)
正序查看
倒序查看
2008-11-27 16:36
今天我也调试了一下,
.ref F$$ITOF,F$$DIV,F$$MUL,F$$FTOI,F$$ADD,F$$LTOF,F$$SUB
不知道如何处理!
0
回复
zyt1985
LV.2
3
2009-04-02 14:42
我遇到的也是同样的问题   不知道怎么解决  说是CCS编译器自带函数库里的子程序  但是  怎么会出错呢
0
回复
zlszcw
LV.3
4
2012-04-21 21:38
@zyt1985
我遇到的也是同样的问题  不知道怎么解决  说是CCS编译器自带函数库里的子程序  但是  怎么会出错呢
LZ居然用汇编,真高!用C的话可能好看程序呢!希望能帮到你!
0
回复
zlszcw
LV.3
5
2014-04-05 17:32
@zlszcw
LZ居然用汇编,真高!用C的话可能好看程序呢!希望能帮到你!
是呀!整个c,或许能帮到你!
0
回复