?? pwm_drv.asm
字號:
;======================================================================
; 文件名: pwm_drv.asm
;
; 模塊名: FC_PWM_DRV
;
; 初始化程序名: FC_PWM_DRV_INIT
;
; 公司: 達盛科技
;
; 功能描述: 根據輸入的占空比參數產生PWM波,也可以修改PWM周期
;
; |~~~~~~~~~~~~~~~~|
; Mfunc_c1 o------>| |----->o CMPR1 (EV register)
; Mfunc_c2 o------>| FC_PWM_DRV |----->o CMPR2 (EV register)
; Mfunc_c3 o------>| |----->o CMPR3 (EV register)
; Mfunc_p o------>| |----->o T1PER (EV register)
; n_period o------>|________________|
;
; 目標板CPU: x240/243/2407
;
;=====================================================================================
; 修改紀錄:
;-------------------------------------------------------------------------------------
; 最后更新日期:2005.6.22 版本號: Ver 1.0
;======================================================================
;----------------------
; 變量聲明
;----------------------
; .ref FC_PWM_DRV,FC_PWM_DRV_INIT ;函數調用
; .ref Mfunc_c1,Mfunc_c2,Mfunc_c3,Mfunc_p ;輸入參量
; .ref n_period ;輸入
;---------------------------------
; 變量定義
;---------------------------------
.include "x24x_app.h"
;-------------------------
; 默認 PWM 周期
;-------------------------
PWM_PERIOD .set 100 ; PWM 周期 單位uS (10KHz)
;PWM_PERIOD .set 67 ; PWM 周期 單位uS (15KHz)
;-------------------------
; 變量聲明
;-------------------------
.def FC_PWM_DRV,FC_PWM_DRV_INIT ;函數調用
.def Mfunc_c1,Mfunc_c2,Mfunc_c3,Mfunc_p ;輸入參量
.def n_period ;輸入參量
;------------
; 變量定義
;------------
Mfunc_c1 .usect "pwm_drv",1 ; Phase 1 mod function Q15
Mfunc_c2 .usect "pwm_drv",1 ; Phase 2 mod function Q15
Mfunc_c3 .usect "pwm_drv",1 ; Phase 3 mod function Q15
Mfunc_p .usect "pwm_drv",1 ; Period mod function Q15
n_period .usect "pwm_drv",1 ; Nominal period/compare value
m_period .usect "pwm_drv",1 ; Modulated period
;------------------------------
; 參數設置
;------------------------------
T1PER_ .set PWM_PERIOD*20 ; 10KHz pwm 對應計數周期數 對應40MHz系統時鐘
;T1PER_ .set PWM_PERIOD*15 ; 10KHz pwm 對應計數周期數 對應30MHz系統時鐘
T1CON_ .set 1000100001000000b ; 對稱 PWM
DBTCON_ .set 09E8h ; 死區D/B = 1.8uS 對應40MHz系統時鐘
ACTR_ .set 100110011001b ; 011001100110b; 1/3/5 低有效, 2/4/6 高有效
COMCON_ .set 1000001000000000b ; 使能比較,使能pwm
;----------------------------------------------------------------------
; 初始化
;----------------------------------------------------------------------
FC_PWM_DRV_INIT
LDP #T1PER>>7
SPLK #T1PER_,T1PER ;周期寄存器初始化
SPLK #T1CON_,T1CON ;
SPLK #DBTCON_,DBTCON ;信號死區初始化
SPLK #ACTR_,ACTR ;比較動作寄存器初始化
SPLK #COMCON_,COMCON ;
ldp #OCRA>>7 ; 設置管腳
LACC OCRA
OR #0000111111000000b
SACL OCRA
ldp #n_period
SPLK #T1PER_,n_period
SPLK #7FFFh,Mfunc_p
RET
;----------------------------------------------------------------------
; 控制程序
;----------------------------------------------------------------------
FC_PWM_DRV:
ldp #Mfunc_p ; 調制周期
LT Mfunc_p
MPY n_period ; Mfunc_p*n_period/2
PAC ;
add n_period,15 ; 用 n_period/2 偏置
SACH m_period; 保存備用
ldp #T1PER>>7 ;
sach T1PER ; 保存
ldp #Mfunc_c1 ; 調制通道1
LT Mfunc_c1
MPY m_period ; Mfunc_c1*m_period/2
PAC ;
add m_period,15 ; 用 m_period/2 偏置
ldp #CMPR1>>7
SACH CMPR1 ; 保存
ldp #Mfunc_c2 ; 調制通道2
LT Mfunc_c2
MPY m_period ; Mfunc_c2*m_period/2
PAC ;
add m_period,15 ; 用 m_period/2 偏置
ldp #CMPR2>>7
SACH CMPR2 ; 保存
ldp #Mfunc_c3 ; 調制通道3
LT Mfunc_c3
MPY m_period ; Mfunc_c3*m_period/2
PAC ;
add m_period,15 ; 用 m_period/2 偏置
ldp #CMPR3>>7
SACH CMPR3 ; 保存
RET
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -