📄 mos&step.asm
字号:
;==================================================================================
; The information contained herein is the exclusive property of
; Sunplus Technology Co. and shall not be distributed, reproduced,
; or disclosed in whole in part without prior written permission.
; (C) COPYRIGHT 2004 SUNPLUS TECHNOLOGY CO.
; ALL RIGHTS RESERVED
; The entire notice above must be reproduced on all authorized copies.
;==================================================================================
;==================================================================================
; Project Name : SPMC65P2404A for BLDC motor demo board
; Applied Body : SPMC65P2404A
; Firmware version: V1.0
; Programer :
; Date : 2006/09/15
; Description : interrupt service routine
; Hardware Connect: SPMC65 BLDC demo board
; IDE Version : v1.6.8
; BODY Version : v1.0.2A
;==================================================================================
;****************************************
;* *
;* System Register Define *
;* *
;****************************************
.SYNTAX 6502 ; Process standard 6502 addressing syntax
.LINKLIST ; Generate linklist information
.SYMBOLS ; Generate symbolic debug information
;==================================================================================
;****************************************
;* *
;* System Register Define *
;* *
;****************************************
.INCLUDE SPMC65P2404A.inc ; Define all hardware,Registers and ports.
.INCLUDE SPMC65_CON.inc
.INCLUDE SPMC65_SFR.inc
.INCLUDE SPMC65_PWM.inc
.PUBLIC F_InitMos_Check
.PUBLIC F_Delay5ms
.PUBLIC F_Delay1sec
.PUBLIC F_SixStepWave
;****************************************
; Applied Body : SPMC65P2404A
; Firmware version: V1.0
; Programer :
; Date : 2006/09/15
; Description : F_InitMos_Check
; Hardware Connect: SPMC65 BLDC demo board
; IDE Version : v1.6.8
; BODY Version : v1.0.2A
;****************************************
.CODE
F_InitMos_Check:
LDA #C_IOD_Buf0 ;1
STA G_Under_Test
F_InitMos_Check_Up:
LDA #C_IOD_Buf2 ;4
STA G_Test_Num
LDA #CB_CAP0_ES ;0
STA G_Mos_Num
LDA #P_INT_Ctrl1 ;#0f
STA G_Delay_Count
CLR P_IOA_Buf,2 ;UN
L_InitMos_Check1_up:
DEC G_Delay_Count
LDA G_Delay_Count
BNE L_InitMos_Check1_up
SET P_IOA_Buf,2
L_InitMos_Check2_up:
LDA G_Mos_Num
BEQ L_InitMos_Check3_up
JMP L_InitMos_Check3_WN
L_InitMos_Check3_up:
JSR F_Delay5ms
F_InitMos_Check_VP:
LDA #CB_2S_Flag ;06
STA G_Test_Num
LDA #P_INT_Ctrl1 ;$0F
STA G_Delay_Count
CLR P_IOA_Buf,1
L_InitMos_Check1_vp:
DEC G_Delay_Count
LDA G_Delay_Count
BNE L_InitMos_Check1_vp
SET P_IOA_Buf,1
L_InitMos_Check2_vp:
LDA G_Mos_Num
BEQ L_InitMos_Check3_vp
JMP L_InitMos_Check3_WN
L_InitMos_Check3_vp:
JSR F_Delay5ms
F_InitMos_Check_WP:
LDA #C_IOD_Buf1 ;02
STA G_Test_Num
LDA #P_INT_Ctrl1 ;0FH
STA G_Delay_Count
CLR P_IOA_Buf,0
L_InitMos_Check1_wp:
DEC G_Delay_Count
LDA G_Delay_Count
BNE L_InitMos_Check1_wp
SET P_IOA_Buf,0
L_InitMos_Check2_wp:
LDA G_Mos_Num
BEQ L_InitMos_Check3_wp
JMP L_InitMos_Check3_WN
L_InitMos_Check3_wp:
JSR F_Delay5ms
F_InitMos_Check_UN:
LDA #C_PwmUp_Step ;03
STA G_Test_Num
SET P_IOB_Dir,3
SET P_IOB_Data,3
LDA #P_INT_Ctrl1 ;0FH
STA G_Delay_Count
SET P_IOD_Buf,2
L_InitMos_Check1_un:
DEC G_Delay_Count
LDA G_Delay_Count
BNE L_InitMos_Check1_un
CLR C_SPICS_Div_128,3 ;P_IOB_Dir
CLR P_IOD_Buf,2
L_InitMos_Check2_un:
LDA G_Mos_Num
BEQ L_InitMos_Check3_un
JMP L_InitMos_Check3_WN
L_InitMos_Check3_un:
JSR F_Delay5ms
F_InitMos_Check_VN:
LDA #C_SPICS_Div_128 ;05
STA G_Test_Num
SET C_SPICS_Div_128,3 ;P_IOB_Dir
SET P_IOB_Data,3
LDA #P_INT_Ctrl1 ;0FH
STA G_Delay_Count
SET P_IOD_Buf,1
L_InitMos_Check1_vn:
DEC G_Delay_Count
LDA G_Delay_Count
BNE L_InitMos_Check1_vn
CLR C_SPICS_Div_128,3 ;P_IOB_Dir
CLR P_IOD_Buf,1
L_InitMos_Check2_vn:
LDA G_Mos_Num
BEQ L_InitMos_Check3_vn
JMP L_InitMos_Check3_WN
L_InitMos_Check3_vn:
JSR F_Delay5ms
F_InitMos_Check_WN:
LDA #C_IOD_Buf0 ;01
STA G_Test_Num
SET C_SPICS_Div_128,3 ;P_IOB_Dir
SET P_IOB_Data,3
LDA #P_INT_Ctrl1 ;0FH
STA G_Delay_Count
SET P_IOD_Buf,0
L_InitMos_Check1_wn:
DEC G_Delay_Count
LDA G_Delay_Count
BNE L_InitMos_Check1_wn
CLR C_SPICS_Div_128,3 ;P_IOB_Dir
CLR P_IOD_Buf,0
L_InitMos_Check2_wn:
LDA G_Mos_Num
BEQ L_InitMos_Check3_wn
JMP L_InitMos_Check3_WN
L_InitMos_Check3_wn:
L_InitMos_Check3_WN:
LDA #CB_CAP0_ES ;0
STA G_Under_Test
?LOOP0:
LDA G_Mos_Num
STA C_PWM_COMPRESS_MAX ;G_Mos_Num_Temp
BEQ ?EXIT
?LOOP:
SET C_IOD_Buf0,6 ;P_IOB_Data
JSR F_Delay1sec
JSR F_Delay1sec
JSR F_Delay1sec
CLR C_IOD_Buf0,6 ;P_IOB_Data
JSR F_Delay1sec
JSR F_Delay1sec
JSR F_Delay1sec
DEC C_PWM_COMPRESS_MAX ;G_Mos_Num_Temp
LDA C_PWM_COMPRESS_MAX ;G_Mos_Num_Temp
BEQ ?SKIP
JMP ?LOOP
?SKIP:
JSR F_Delay1sec
JSR F_Delay1sec
JSR F_Delay1sec
JSR F_Delay1sec
JSR F_Delay1sec
JSR F_Delay1sec
JSR F_Delay1sec
JSR F_Delay1sec
JSR F_Delay1sec
JSR F_Delay1sec
JSR F_Delay1sec
JSR F_Delay1sec
JSR F_Delay1sec
JSR F_Delay1sec
JSR F_Delay1sec
JSR F_Delay1sec
JSR F_Delay1sec
JMP ?LOOP0
?EXIT:
RTS
;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
F_Delay5ms:
LDA #C_WDT_Clr
STA C_TBASE_Div_128 ;P_WDT_Clr
F_Delay5ms1:
LDA #C_STACK_BOTTOM ;$FF
STA G_Temp
JMP L_Delay1s_L3
;-----------------------------------------------------
F_Delay1sec:
LDA #55
STA C_TBASE_Div_128 ;P_WDT_Clr
LDA #C_STACK_BOTTOM ;$FF
STA G_Temp
L_Delay1s_L3:
ldx #CB_CAP0_ES ;0
L_Delay1s_L2:
clc
lda #CB_CAP0_ES ;0
L_Delay1s_L1:
nop
nop
adc #1
bne L_Delay1s_L1
inx
bne L_Delay1s_L2
inc G_Temp
bne L_Delay1s_L3
rts
;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
;****************************************
; Applied Body : SPMC65P2404A
; Firmware version: V1.0
; Programer :
; Date : 2006/09/15
; Description : F_SixStepWave
; Hardware Connect: SPMC65 BLDC demo board
; IDE Version : v1.6.8
; BODY Version : v1.0.2A
;****************************************
F_SixStepWave:
TurnOnIPM
TST G_Hall_Flag,0
BNE L_Phase_Change0
LDA G_ADC6_Buf ;AD
CMP G_PwmCompressMaxBuf ;64h
BCC L_Phase_Change0
JSR F_PwmCompresense
JMP L_Phase_Change1
L_Phase_Change0:
TurnOnPWM
L_Phase_Change1:
LDA G_Hall_Pos
CMP #CB_2S_Flag ;HALL_110_CW ;6
BNE L_Phase5
CLR P_IOD_Buf,2 ;UP= 0 U相 上面的MOS管 截止
SET P_IOA_Buf,2 ;UN= 1 U相 下面的MOS管 截止
SET P_IOA_Buf,1 ;VN= 1 V相 下面的MOS管 截止
SET P_IOD_Buf,1 ;VP= 1 V相 上面的MOS管 导通
CLR P_IOD_Buf,0 ;WP= 0 W相 上面的MOS管 截止
CLR P_IOA_Buf,0 ;WN= 0 W相 下面的MOS管 导通 V--->W
JMP L_Endsixstep
L_Phase5:
LDA G_Hall_Pos
CMP #C_SPICS_Div_128 ;HALL_101_CW ;5
BNE L_Phase4
SET P_IOA_Buf,2 ;UN= 1 U相 下面的MOS管 截止
SET P_IOD_Buf,2 ;UP= 1 U相 上面的MOS管 导通
CLR P_IOD_Buf,1 ;VP= 0 V相 上面的MOS管 截止
CLR P_IOA_Buf,1 ;VN= 0 V相 下面的MOS管 导通
CLR P_IOD_Buf,0 ;WP= 0 W相 上面的MOS管 截止
SET P_IOA_Buf,0 ;WN= 1 W相 下面的MOS管 截止 U--->V
JMP L_Endsixstep
L_Phase4:
LDA G_Hall_Pos
CMP #C_IOD_Buf2 ;HALL_100_CW ;4
BNE L_Phase3
SET P_IOA_Buf,2 ;UN= 1 U相 下面的MOS管 截止
SET P_IOD_Buf,2 ;UP= 1 U相 上面的MOS管 导通
CLR P_IOD_Buf,0 ;WP= 0 W相 上面的MOS管 截止 U--->W
CLR P_IOA_Buf,0 ;WN= 0 W相 下面的MOS管 导通
CLR P_IOD_Buf,1 ;VP= 0 V相 上面的MOS管 截止
SET P_IOA_Buf,1 ;VN= 1 V相 下面的MOS管 截止
JMP L_Endsixstep
L_Phase3:
LDA G_Hall_Pos
CMP #C_PwmUp_Step ;HALL_011_CW ;3
BNE L_Phase2
CLR P_IOD_Buf,2 ;UP= 0 U相 上面的MOS管 截止
CLR P_IOA_Buf,2 ;UN= 0 U相 下面的MOS管 导通
SET P_IOA_Buf,0 ;WN= 1 W相 下面的MOS管 截止
SET P_IOD_Buf,0 ;WP= 1 W相 上面的MOS管 导通 W--->U
SET P_IOA_Buf,1 ;VN= 1 V相 上面的MOS管 截止
CLR P_IOD_Buf,1 ;VP= 0 V相 上面的MOS管 截止
JMP L_Endsixstep
L_Phase2:
LDA G_Hall_Pos
CMP #C_IOD_Buf1 ;HALL_010_CW ;2
BNE L_Phase1
CLR P_IOD_Buf,2 ;UP= 0 U相 上面的MOS管 截止
CLR P_IOA_Buf,2 ;UN= 0 U相 下面的MOS管 导通
SET P_IOA_Buf,1 ;VN= 1 V相 下面的MOS管 截止
SET P_IOD_Buf,1 ;VP= 1 V相 上面的MOS管 导通
CLR P_IOD_Buf,0 ;WP= 0 W相 上面的MOS管 截止
SET P_IOA_Buf,0 ;WN= 1 W相 下面的MOS管 截止 V--->U
JMP L_Endsixstep
L_Phase1:
LDA G_Hall_Pos
CMP #C_IOD_Buf0 ;HALL_001_CW ;1
BNE L_Phase7
CLR P_IOD_Buf,2 ;UP= 0 U相 上面的MOS管 截止
SET P_IOA_Buf,2 ;UN= 1 U相 下面的MOS管 截止
SET P_IOA_Buf,0 ;WN= 1 W相 下面的MOS管 截止
SET P_IOD_Buf,0 ;WP= 1 W相 上面的MOS管 导通
CLR P_IOD_Buf,1 ;VP= 0 V相 上面的MOS管 截止
CLR P_IOA_Buf,1 ;VN= 0 V相 下面的MOS管 导通 W--->V
JMP L_Endsixstep
L_Phase7:
SET G_Monitor,CB_HallInvalid_Flag ;霍尔传感器出错 (无效的霍尔信号) 3
L_Endsixstep:
TST G_Hall_Flag,0
BNE L_Endsixstep1
JSR F_PwmCompresense_Delay
L_Endsixstep1:
RTS
;---------------------------------------------------------
;噪音補償用之程序
;本副程式為噪音補償之呼叫,透過本副程式的呼叫,可進行電流補償之功能。本程序
;為決定進行補償時間大小
F_PwmCompresense:
JSR F_Close_Timer2
TurnOffPWM
SET P_IOB_Dir,PWM
SET P_IOB_Data,PWM
RTS
;---------------------------------------------------------
;本副程式為噪音補償之呼叫,透過副程式的呼叫,可對電流補償之時間進行調整。
F_PwmCompresense_Delay:
LDA G_ADC6_Buf
CMP G_PwmCompressMaxBuf
BCC L_Pwmcompresense_Delay_End
TST G_Hall_Flag,1 ;G_Hall_Flag,CB_Hall120Or60_Flag
BEQ L_60Dgreewait ;?L_60DgreeWait
L_120Dgreewait:
LDA G_ADC6_Buf
SEC
SBC G_PwmCompressMaxBuf ;64h
STA G_PwmDelay_Buf
CMP G_120DgreePwmCompressMinBuf ;78
BCC L_120Dgreewait0
LDA G_120DgreePwmCompressMinBuf ;78
STA G_PwmDelay_Buf
L_120Dgreewait0:
JSR F_PwmCompresenseLoop
JMP L_Pwmcompresense_Delay_End
L_60Dgreewait:
LDA G_ADC6_Buf
SEC
SBC G_PwmCompressMaxBuf
LSR A
STA G_PwmDelay_Buf
CMP G_60DgreePwmCompressMinBuf
BCC L_60Dgreewait0
LDA G_60DgreePwmCompressMinBuf
STA G_PwmDelay_Buf
L_60Dgreewait0:
JSR F_PwmCompresenseLoop
L_Pwmcompresense_Delay_End:
RTS
;---------------------------------------------------------
F_PwmCompresenseLoop:
LDA G_PwmDelay_Buf
BEQ L_PWMCOMPRESSLOOP_END
LDA #(C_AD_CE+C_AD_Ch2+C_AD_Ch4) ;B0H
STA P_AD_Ctrl2 ;$2A
LDA #(C_AD_EN+C_AD_CS_8) ;84H Fcpu/8
STA P_AD_Ctrl0 ;$28
;
L_PWMCOMPRESSLOOP0:
TST P_AD_Ctrl0,C_AD_Start
BEQ L_PWMCOMPRESSLOOP0
LDA P_AD_DataHi ;$2B
LDX #(C_AD_EN+C_AD_CS_8) ;84H Fcpu/8
STX C_SpeedPwmRenew_Time ;P_AD_Ctrl0
CMP G_ADC6_Buf
BCC L_PWMCOMPRESSLOOP1
SEC
SBC G_ADC6_Buf
CMP G_PwmCompressIOverBuf ;3
BCS L_PWMCOMPRESSLOOP_END
LDA P_AD_DataHi
CMP #C_PWM_COMPRESS_IMax ;163
BCS L_PWMCOMPRESSLOOP_END
L_PWMCOMPRESSLOOP1:
DEC G_PwmDelay_Buf
BNE L_PWMCOMPRESSLOOP0
L_PWMCOMPRESSLOOP_END:
TurnOnPWM
JSR F_Open_Timer2
L_PWMCOMPRESSLOOP_END0:
RTS
.END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -