⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 2407程序.txt

📁 TMS320LF2407驱动步进电机程序
💻 TXT
字号:
;*******************************************************
; 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

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -