📄 pwm_dc_drv.asm
字号:
;======================================================================
; 文件名: pwm_dc_drv.asm
;
; 模块名: DC_PWM_DRV
;
; 初始化程序名: DC_PWM_DRV_INIT
;
; 公司: 达盛科技
;
; 功能描述: 根据输入的占空比参数产生PWM波,也可以修改PWM周期,用于
; 直流电动机
;
; |~~~~~~~~~~~~~~~~|
; Mfunc o------>| |----->o CMPR1 (EV register)
; | DC_PWM_DRV |----->o CMPR2 (EV register)
; | |
; Mfunc_p o------>| |----->o T1PER (EV register)
; n_period o------>|________________|
;
; 目标板CPU: x2407
;
;=====================================================================================
; 修改纪录:
;-------------------------------------------------------------------------------------
; 最后更新日期:2005.6.22 版本号: Ver 1.0
;======================================================================
;----------------------
; 变量声明
;----------------------
; .ref FC_PWM_DRV,FC_PWM_DRV_INIT ;function calls
; .ref Mfunc,Mfunc_p ;Inputs
; .ref n_period ;Input
;---------------------------------
; 变量定义
;---------------------------------
.include "x24x_app.h"
;-------------------------
; 默认 PWM 周期
;-------------------------
PWM_PERIOD .set 100 ; PWM period in uS (10KHz)
;PWM_PERIOD .set 67 ; PWM period in uS (15KHz)
;-------------------------
; 变量声明
;-------------------------
.def DC_PWM_DRV,DC_PWM_DRV_INIT ;function calls
.def Mfunc,Mfunc_p ;Inputs
.def n_period ;Input
;------------
; 变量定义
;------------
Mfunc .usect "pwm_drv",1 ; input mod function Q15
Mfunc_p .usect "pwm_drv",1 ; Period mod function Q15
tmpy .usect "pwm_drv",1 ;
n_period .usect "pwm_drv",1 ; Nominal period/compare value
m_period .usect "pwm_drv",1 ; Modulated period
;------------------------------
; 参数设置
;------------------------------
T1PER_ .set PWM_PERIOD*20 ; *1000nS/(2*25nS) 对于 40MHz 系统时钟
;T1PER_ .set PWM_PERIOD*15 ; *1000nS/(2*33nS) 对于 30MHz 系统时钟
T1CON_ .set 1000100001000000b ; 对称 PWM
DBTCON_ .set 09E8h ; 死区D/B = 1.8uS 对于 40MHz 系统时钟
ACTR_ .set 111110011001b ; 1/3 高有效, 2/4 低有效,5/6强制0 ab相输出
;ACTR_ .set 100110011111b ; 1/3 高有效, 2/4 低有效,5/6强制0 bc相输出
COMCON_ .set 1000001000000000b ; 使能比较操作,使能比较输出
; 比较寄存器和动作控制寄存器
; 重载条件均为定时器T1下溢
;----------------------------------------------------------------------
; 初始化
;----------------------------------------------------------------------
DC_PWM_DRV_INIT
LDP #T1PER>>7
SPLK #T1PER_,T1PER ;设置pwm周期
SPLK #T1CON_,T1CON ;设置对称pwm输出
SPLK #DBTCON_,DBTCON ;设置死区时间
SPLK #ACTR_,ACTR ;设置比较器输出有效电平
SPLK #COMCON_,COMCON ;设置比较器动作条件
ldp #OCRA>>7 ; 设置pwm引脚功能
LACC OCRA ;
OR #0000111111000000b ;
SACL OCRA ;
ldp #n_period ;输入pwm周期
SPLK #T1PER_,n_period ;
SPLK #7FFFh,Mfunc_p
RET
;----------------------------------------------------------------------
; 控制程序
;----------------------------------------------------------------------
DC_PWM_DRV:
ldp #Mfunc_p ; modulate period
LT Mfunc_p
MPY n_period ; Mfunc_p*n_period/2
PAC ;
add n_period,15 ; offset by n_period/2
SACH m_period ; save for later reference
ldp #T1PER>>7 ;
sach T1PER ; 保存定时周期
ldp #Mfunc ; Modulate channel one
LT Mfunc
MPY m_period ; Mfunc_c1 x m_period/2
PAC ;
add m_period,15 ; offset by m_period/2
ldp #tmpy
sach tmpy
ldp #CMPR1>>7
BLDD #tmpy,CMPR2 ; 采用ab相输出
; BLDD #tmpy,CMPR2 ; 采用bc相输出
LDP #m_period
LACC m_period
SUB tmpy,0
LDP #CMPR2>>7
SACL CMPR1 ;采用ab相输出
; SACL CMPR3 ;采用bc相输出
RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -