网站公告列表

  没有公告

加入收藏
设为首页
联系站长
您现在的位置: 61IC中国电子在线 >> DSP >> C2000文章 >> C24X系列 >> 文章正文
  TMS320LF2407控制步进电机的程序         ★★★ 【字体:
TMS320LF2407控制步进电机的程序
作者:61IC客服    文章来源:本站原创    点击数:    更新时间:2006-4-30    
;*******************************************************
; File Name:PWM.asm
;*******************************************************

        .title    "PWM"
    
        .include LF2407.inc
        .include CPU.inc
        .include GPIO.inc
;*******************************************************

TxdPtr:    .usect    "data", 8
RxdPtr:    .usect    "data", 8

        .data
counterValue    .byte    1
;*******************************************************
        .def    _c_int0
        .def    GIsr2
        
        .ref    Pvect
;*******************************************************
; 主程序开始
        .text
_c_int0:

        call    fSysInit
    
        ldp        #DP_PF2
        splk    #MCRAV, MCRA
        splk    #MCRBV, MCRB
        
        splk    #7f01h, PADATDIR
        splk    #0808h, PBDATDIR

;        splk    #80h, EVAIMRA
;        splk    #0ffffh, EVAIFRA
;        splk    #0, GPTCONA
;        splk    #177h, T1PR
;        splk    #0, T1CNT
;        splk    #0164ch, T1CON
        
;        clrc    INTM
;wait:
;        nop
;        b         wait
        
    ;    call     fSciInit
    ;    call    evaPwmInit
        
Main:
        ldp        #0000h
LoopMain:
    
        ldp        #00e1h
        
        call    StepMotor
        
        b        LoopMain
;*******************************************************
evaPwmInit:
    ;
        ldp        #DP_PF2        ; 指向 7080h~7100h
        lacl    MCRA
        or        #PWMMCR        ; PA.1~PA.4配置为PWM输出
        sacl    MCRA
        ldp        #DP_EVA        ;
        splk    #0ffffh, EVAIFRA    ; 清除EVA全部中断标志
        splk    #0666h, ACTRA        ; PWM2、4低有效,PWM1、3高有效
        splk    #00h, DBTCONA        ; 不使能死区控制
        splk    #10h, CMPR1            ; 设置比较初值PWM1高电平占50/60,低电平上10/60
        splk    #20h, CMPR2            ; 设置PWM3、4的比较寄存器
        splk    #60h, T1PR            ; 设置定时器1周期寄存器,即PWM周期为60个CPU时钟周期
        splk    #0a600h, COMCONA    ; 使能比较操作
        splk    #0, T1CNT
        splk    #41h, GPTCONA        ; TCOMPOE=1, T1PIN=01
        splk    #080h, EVAIMRA        ; 通用定时器1使能
        splk    #174eh, T1CON        ; TMODE=10连续增计数模式,TPS=111预分频为128
                                    ; TENABLE=1定时器计数使能,TCLKS=00内部时钟
                                    ; TECMPR=1定时器1比较使能,SELT1PR=0
        clrc    INTM                ; 开总中断
        
        ret
;*******************************************************
StepMotor:

        call    fDelay
        lacc    PADATDIR
        and        #STEPMASK
        or        #step1
        sacl    PADATDIR
        
        call    fDelay
        lacc    PADATDIR
        and        #STEPMASK
        or        #step2
        sacl    PADATDIR

        call    fDelay
        lacc    PADATDIR
        and        #STEPMASK
        or        #step3
        sacl    PADATDIR

        call    fDelay
        lacc    PADATDIR
        and        #STEPMASK
        or        #step4
        sacl    PADATDIR

        b        StepMotor
        
        ret
;*******************************************************
fSendChar:
    ; 发送一个字符
        mar        AR2
        lacc    #'b'
        sacl    *            ; 发送数据到SCITXBUF寄存器
LoopSendChar:
        ldp        #DP_PF1
        bit        SCICTL2, BIT7
        bcnd    LoopSendChar, NTC
        
        ret
;*******************************************************
; 系统初始化程序
fSysInit:

        setc    INTM            ; 初始化期间禁止中断
        clrc    SXM                ; 清符号扩展模式
        clrc    OVM                ; 溢出模式复位
        clrc    CNF                ; 配置B0块到数据存储区
        ldp        #DP_PF1            ; 设置DP=E0H,则数据存储器地址为7000H~707FH
        splk    #81feh, SCSR1    ; CLKOUT=CLKIN*4
    ;    splk    #0041h, SCSR1    ; CLKOUT=CLKIN*4
        splk    #00e8h, WDCR    ; 不使能WDT
        ldp        #0
        splk    #0002h, IMR        ; 不使能中断
        splk    #0ffffh, IFR    ; 清除全部中断标志

        ret
;*******************************************************
; SCI接口初始化程序
fSciInit:

        ldp        #0e1h
        lacl    MCRB
        or        #18h
        sacl    MCRB            ; 配置串行口引脚为特殊功能:TXD、RXD
        ldp        #DP_PF1
        splk    #00fh, SCICCR    ; 地址位唤醒模式,N,8,1
        splk    #007h, SCICTL1    ; 接收、发送、内部时钟使能,SLEEP=1
        splk    #002h, SCICTL2    ; 接收中断使能
        splk    #(BRR/256), SCIHBAUD
        splk    #(BRR & 0ffh), SCILBAUD    ; 设置波特率寄存器
        splk    #023h, SCICTL1    ; 串口初始化完成
        lar        ar1, #SCIRXBUF    ; 接收缓冲寄存器地址
        lar     ar2, #SCITXBUF    ; 发送缓冲寄存器地址
        lar     ar3, #RxdPtr    ; 接收的数据指针
        lar     ar4, #TxdPtr    ; 发送的数据指针
        ldp        #0
        splk    #0001h, IMR        ; 允许INT1中断
        splk    #0ffffh, IFR    ; 清所有中断标志
        clrc    INTM            ; 开总中断
        
        ret
;*******************************************************
GIsr1:
    ; 优先级INT1中断入口
    
        ldp        #0e0h
        lacc    PIVR, 1            ; 读取外设中断向量寄存器,并左移一位
        add        #Pvect            ; 加上外设中断入口地址
        bacc                    ; 跳到相应的中断服务子程序
        
ExitGIsr1:
        ; 恢复现场
        clrc    INTM        ; 开中总断,因为一进中断就自动关闭总中断
        
        ret
;*******************************************************
RxInt:
    ; SCI接收中断服务程序
        ldp        #DP_PF1
        mar        *, AR1
        bit        SCICTL1, BIT2

        b         ExitGIsr1
;*******************************************************
GIsr2:
    ; 优先级INT2中断入口
    
        ldp        #DP_PF1
        lacc    PIVR, 1
        add        #Pvect
        bacc
        
ExitGIsr2:
        ; 恢复现场
        clrc    INTM        ; 开中总断,因为一进中断就自动关闭总中断
        
        ret
;*******************************************************
T1PInt:
    ; 通用定时器1中断入口
        ldp        #DP_EVA
        splk    #0, T1CNT
        
        b         ExitGIsr2
;*******************************************************
; 延时程序
fDelay:

        mar        *, ar4
        lar        ar4, #02ffeh
        lar        ar0, #00h
LoopDelay:
        sbrk    #1
        nop
        cmpr    00
        bcnd    LoopDelay, ntc
        
        ret
;*******************************************************
        .end
               欢迎点击进入:TI德州中文网   (国内唯一针对TI应用的中文技术网站)    文章录入:admin    责任编辑:admin 
  • 上一篇文章:

  • 下一篇文章:
  • 发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
    最新热点 最新推荐 相关文章
    TMS320LF2407上实现快速傅里…
    基于TMS320LF2407的馈线终端…
    步进电机的速度控制及运动规…
    TMS320LF2407控制GTG-128324…
    基于DSP的电动汽车CAN总线通…
    TMS320LF2407的将BCD码转换成…
    SVPWM,死区补偿,有电压电流A…
    基于TMS320LF2407的LCD的驱动…
    TMS320LF2407与D/A转换器的接…
    TMS320LF2407与MCG12864A8-3…
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)
    站长:61IC 湘ICP备05002478号