?? zhtest4.asm
字號:
;=========================================================================================
; 系統名: 直流無刷電機控制系統
;
; 文件名: Zhtest4.ASM
;
; 功能描述: 通過霍爾傳感器的換相信號實現直流無刷電動機的控制
;
; 公司: 達盛科技
;
; 目標板: F2407
;=====================================================================================
; 修改記錄:
;-------------------------------------------------------------------------------------
; 2005.08.25 版本 Ver 1.0
;==========================================================================================
;系統選項
;******************************************************************************************
real_time .set 1 ;實時模式運行選擇'1'
.include "x24x_app.h"
;-----------------------------------------------------------------------------
; 外部變量及函數聲明
;-----------------------------------------------------------------------------
.global MON_RT_CNFG
.ref SYS_INIT
.ref RMP2CNTL, RMP2CNTL_INIT ;給定子程序調用
.ref rmp2_dly, rmp2_desired ;輸入
.ref rmp2_out ;輸出
.ref rmp2_max, rmp2_min
.ref MOD6_CNT, MOD6_CNT_INIT ;模6計數器子程序調用
.ref m6_trig_in, m6_cntr ;輸入輸出
.ref HALL3_DRV, HALL3_DRV_INIT ;霍爾換相驅動子程序調用
.ref cmtn_trig_hall, hall_map_ptr ;輸入
.ref BLDC_3PWM_DRV, BLDC_3PWM_DRV_INIT ;三相無刷電機pwm子程序調用
.ref cmtn_ptr_bd, D_func, Mfunc_p ;輸入
.ref DATA_LOG, DATA_LOG_INIT ;顯示數據獲取子程序調用
.ref dlog_iptr1, dlog_iptr2 ;輸出
.ref trig_value ;輸入
;************************************************************
;-----------------------------------------------------------------------------
; 內部變量聲明
;-----------------------------------------------------------------------------
;SYSTEM_INT_PERIOD .set 758 ;25 uS 采樣周期 @33nS CPU clock
SYSTEM_INT_PERIOD .set 1000 ;25 uS 采樣周期 @25nS CPU clock
.def _c_int0, PHANTOM, T2_PERIOD_ISR
.def GPR0 ;通用寄存器.
.def v_timer
BLDC_vars .usect "BLDChall",3,1
GPR0 .set BLDC_vars+0
v_timer .set BLDC_vars+1
D_func_desired .set BLDC_vars+2
.bss isr_ticker,1
;==============================================================================
; 主程序代碼開始
;==============================================================================
.text
_c_int0:
CALL SYS_INIT
CALL BLDC_3PWM_DRV_INIT
CALL RMP2CNTL_INIT
CALL MOD6_CNT_INIT
CALL HALL3_DRV_INIT
CALL DATA_LOG_INIT
;------------------------------------------------------
;系統時基初始化
;------------------------------------------------------
; 時基取決于 T2 下溢中斷 (也就是系統周期)
; in BLDC_PWM_DRV module.
;初始化周期寄存器
POINT_EV
SPLK #SYSTEM_INT_PERIOD, T2PR
;5432109876543210
;||||!!!!||||!!!!
SPLK #1001000001000000b, T2CON ;通用定時器初始化
;----------------------------------------------------------
; 實時監控程序初始化
;---實時監控程序使能---------------
.if (real_time)
CALL MON_RT_CNFG ;實時監控程序調用
.endif
;----------------------------------------------------------
;----------------------------------------------------------
; 系統中斷初始化.
;----------------------------------------------------------
;事件管理器初始化
POINT_EV
; SPLK #0000001000000000b,EVIMRA ;使能 T1 下溢中斷
SPLK #0000000000000100b,EVIMRB ;使能 T2 下溢中斷
SPLK #0000000000000000b,EVIMRC
; SPLK #0000000000000111b,EVIMRC ;使能 CAP1,2,3 中斷
;||||!!!!||||!!!!
;5432109876543210
SPLK #0FFFFh,EVIFRA ; 清所有 A 組中斷標志
SPLK #0FFFFh,EVIFRB ; 清所有 B 組中斷標志
SPLK #0FFFFh,EVIFRC ; 清所有 C 組中斷標志
;C2xx cpu
POINT_PG0
;---實時模式使能---------------
.if (real_time)
; SPLK #0000000001000010b,IMR ;En Int lvl 2 & 7 (T1 ISR)
SPLK #0000000001000100b,IMR ;En Int lvl 3 & 7 (T2 ISR)
; SPLK #0000000001001100b,IMR ;En Int lvl 3,4&7 (T2 & CAP ISR)
;5432109876543210
.else
; SPLK #0000000000000010b,IMR ;En Int lvl 2 (T1 ISR)
SPLK #0000000000000100b,IMR ;En Int lvl 3 (T2 ISR)
; SPLK #0000000000001100b,IMR ;En Int lvl 3&4 (T2 & CAP ISR)
;||||!!!!||||!!!!
;5432109876543210
.endif
SPLK #0FFFFh, IFR ;Clear any pending Ints
EINT ;Enable global Ints
;------------------------------------------------------------------------------------------
;硬件初始化
;------------------------------------------------------------------------------------------
;使能 PWM 信號
POINT_PF2
LACC OCRA
AND #0BFFFh
SACL OCRA ;設置第二功能 IOPB6
LACC PBDATDIR
OR #04000h
SACL PBDATDIR ;設置 IOPB6 為輸出
LACC PBDATDIR
AND #0FFBFh ;設置 IOPB6 為低, 使能 PWM
; OR #00040h ;設置 IOPB6 為高, 禁止 PWM
SACL PBDATDIR
;----------------------------------------------------------
;參數初始化
;----------------------------------------------------------
LDP #D_func
SPLK #1000h, D_func ;在 BLDC_3PWM_DRV 模塊中定義
LDP #BLDC_vars
BLDD #D_func, D_func_desired
SPLK #0,v_timer ;設置計數器初始值為0
;----------------------------------------------------------
;初始化參數傳遞
;----------------------------------------------------------
LDP #rmp2_out
BLDD #D_func, rmp2_out
;DLOG 指針初始化
LDP #dlog_iptr1
SPLK #m6_cntr, dlog_iptr1
;---------------------------------------------------------
;======================================================
MAIN: ;系統主程序循環
;======================================================
M_1: NOP
B M_1
;======================================================
;-------------------------------------------------------------------------------------------
;T2 定時中斷服務程序
;-------------------------------------------------------------------------------------------
T2_PERIOD_ISR:
;斷點保護
MAR *,AR1 ;AR1 作為堆棧指針
MAR *+ ;skip one position
SST #1, *+ ;保存 ST1
SST #0, *+ ;保存 ST0
SACH *+ ;保存 acc 高16位
SACL * ;保存 acc 低16位
POINT_EV
; SPLK #0FFFFh,EVIFRA ; 清所有 A 組中斷標志 (T1 ISR)
SPLK #0FFFFh,EVIFRB ; 清所有 B 組中斷標志 (T2 ISR)
;===========================================================================
POINT_B0
; 校驗中斷服務程序
LACC isr_ticker
ADD #1
SACL isr_ticker
;----------------------------
;開始中斷服務程序代碼
;----------------------------
RUN_MODE
LDP #hall_map_ptr
BLDD #m6_cntr, hall_map_ptr
CALL HALL3_DRV
LDP #m6_trig_in
BLDD #cmtn_trig_hall, m6_trig_in ;利用霍爾信號的切換觸發控制狀態切換
BLDD #hall_map_ptr, m6_cntr ;使輸出與霍爾狀態對應
CALL MOD6_CNT
LDP #cmtn_ptr_bd ;通過更新指針從狀態表中獲取輸出指令
BLDD #m6_cntr, cmtn_ptr_bd
LDP #rmp2_desired ;斜坡過渡至預期 PWM 占空比
BLDD #D_func_desired, rmp2_desired
CALL RMP2CNTL
LDP #D_func
BLDD #rmp2_out, D_func
CALL BLDC_3PWM_DRV ;產生新的 PWM 狀態
;---------------------------------------------------------
;更新計數器
;--------------------------
updat_v_timer
LDP #v_timer
LACC v_timer ;計數器加1
ADD #1
AND #07FFFh ;強制15位循環計數
SACL v_timer ;
CALL DATA_LOG ;更新顯示數據
;--------------------------
;主中斷服務程序代碼結束
;--------------------------
;恢復斷點
END_ISR:
MAR *, AR1 ;激活堆棧指針
LACL *- ;恢復 Acc 低位字
ADDH *- ;恢復 Acc 高位字
LST #0, *- ;加載 ST0
LST #1, *- ;加載 ST1
CLRC INTM
RET
;===========================================================================================
; 啞中斷服務程序
;
; 功能: 處理意外原因產生的中斷
;===========================================================================================
PHANTOM CLRC INTM ;允許實時監控程序中斷.通常此類中斷由不可屏蔽中斷引起
B PHANTOM ;無效地址,錯誤數據頁以及缺失的連接段都是產生中斷的原因
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -