📄 main.asm
字号:
sta G_PhaseCmd+1
jsr L_SpeedChangeMode_TurnOnMotor
jmp L_Speed_Control_End
L_AD_limit_max:
lda G_Monitor
and #ALARM_MASK ;there is alarm-mask
bne L_AD_StopMotor_L2 ;yes
;
lda #0
sta G_PhaseCmd
lda #0EH
sta G_PhaseCmd+1
jsr L_SpeedChangeMode_TurnOnMotor
jmp L_Speed_Control_End
;
;
L_AD_StopMotor_L1:
clr G_BrakeError_Buf,CB_MotorStopUp_Flag
clr G_BrakeError_Buf,CB_SpeedErrorFlag;;hlp 05/29
.IFDEF U_Help_Mode
jsr F_Help_Speed_Mode ; 1:1 help mode select ?
.ELSE
jsr F_StopMotor_Control
.ENDIF
jmp L_Speed_Control_End
;
L_AD_StopMotor_L2:
TurnOffMotor
L_Speed_Control_End:
rts
L_SpeedChangeMode_TurnOnMotor:
.IFDEF U_RollBack
tst G_Monitor, CB_MotorRun_Flag
bne ?skip
tst P_IOC_Data,3
bne ?norm
tst G_Hall_Flag,CB_RollBack
bne ?skip
jmp ?check_if_stop
?norm:
tst G_Hall_Flag,CB_RollBack
beq ?skip
?check_if_stop:
jsr F_AD4_Detect_HallBar
cmp #$46
bcs ?exit
jsr F_ReadHall
tst G_Hall_Flag,CB_HallSame_Flag
beq ?exit
DEC G_Test_Num
bne ?exit
TurnOffIPM
inv G_Hall_Flag,CB_RollBack
lda #FFH
sta G_PhaseCmd
lda #0Fh
sta G_PhaseCmd+1
?skip:
.ENDIF
TurnOnMotor
clr G_BrakeError_Buf,CB_MotorStop_Flag
clr G_Hall_Flag,CB_HelpMode_Flag
clr G_DISP_FLAG,CB_DispHelp_Flag
?exit:
rts
L_SpeedError_StopMotor: ; hlp 05/29
set G_BrakeError_Buf,CB_SpeedErrorFlag
jmp L_AD_StopMotor_L2
;
;
;****************************************
; Applied Body : SPMC65P2404A
; Firmware version: V1.0
; Programer :
; Date : 2006/09/15
; Description : help speed mode process
; Hardware Connect: SPMC65 BLDC demo board
; IDE Version : v1.6.8
; BODY Version : v1.0.2A
;****************************************
F_Help_Speed_Mode:
lda #0
sta G_SpeedMode
sta G_5S_Count ;test help comand flag
tst G_Hall_Flag,CB_HelpComand_Flag
beq L_Help_Speed_Stop
lda G_Help_Comand+1
cmp #1
bcc L_Help_Process0
jmp L_Help_Speed_Constant ;help comand >255,give constant pwm 30%
L_Help_Process0: ;help comand <255
sec
lda #C_Help_HighSpeedL
adc G_Help_Comand
sta G_Help_Buffer
lda #C_Help_HighSpeedH
adc G_Help_Comand+1
sta G_Help_Buffer+1
L_Compare_Help_Speed_Comand:
lda G_Help_Buffer+1
cmp G_PhaseCmd+1
bcc L_Dec_Help_Speed_Comand
beq L_Compare_Help_Speed_Comand_Low
jmp L_Inc_Help_Speed_Comand
L_Compare_Help_Speed_Comand_Low:
lda G_Help_Buffer
cmp G_PhaseCmd
bcc L_Dec_Help_Speed_Comand
L_Inc_Help_Speed_Comand:
inc G_PhaseCmd
bne L_SkipIncPhaseCmd
inc G_PhaseCmd+1
jmp L_SkipIncPhaseCmd
L_Dec_Help_Speed_Comand:
lda G_PhaseCmd
beq L_Dec_Help_Speed_Comand_High
dec G_PhaseCmd
jmp L_SkipDecPhaseCmd
L_Dec_Help_Speed_Comand_High:
dec G_PhaseCmd+1
lda #FFh
sta G_PhaseCmd
L_SkipDecPhaseCmd:
L_SkipIncPhaseCmd:
L_TurnOnMotor_Process:
TurnOnMotor
clr G_BrakeError_Buf,CB_MotorStop_Flag
set G_Hall_Flag,CB_HelpMode_Flag
set G_DISP_FLAG,CB_DispHelp_Flag
jsr F_DutyCmdUpdate
jsr F_Pwm_Renew_Process
jmp L_Help_Speed_Mode_End
L_Help_Speed_Stop:
clr G_Hall_Flag,CB_HelpMode_Flag
clr G_DISP_FLAG,CB_DispHelp_Flag
jsr F_StopMotor_Control
jmp L_Help_Speed_Mode_End
L_Help_Speed_Constant:
lda #C_Help_LowSpeedL
sta G_Help_Buffer
lda #C_Help_LowSpeedH
sta G_Help_Buffer+1
jmp L_Compare_Help_Speed_Comand
L_Help_Speed_Mode_End:
rts
;
;****************************************
; Applied Body : SPMC65P2404A
; Firmware version: V1.0
; Programer :
; Date : 2006/09/15
; Description : judge clear stopup flag or not
; Hardware Connect: SPMC65 BLDC demo board
; IDE Version : v1.6.8
; BODY Version : v1.0.2A
;****************************************
F_ClearStopupFlag_Control:
jsr F_ReadHall
lda G_ADC4_Buf
cmp #C_SpeedLmit_AD
bcs L_ClearStopupFlag_Control_End
clr G_BrakeError_Buf,CB_MotorStopUp_Flag
L_ClearStopupFlag_Control_End:
rts
;
;
;****************************************
; Applied Body : SPMC65P2404A
; Firmware version: V1.0
; Programer :
; Date : 2006/09/15
; Description : lentitude stop the motor
; Hardware Connect: SPMC65 BLDC demo board
; IDE Version : v1.6.8
; BODY Version : v1.0.2A
;****************************************
F_StopMotor_Control:
lda G_Monitor
and #(~ ALARM_MASK)
sta G_Monitor
lda #0ffh
sta G_PhaseCmd
lda #0fh
sta G_PhaseCmd+1
lda G_PhaseCtrlFilter
cmp #ffh
bne L_STOP_MOTOR_END
lda G_PhaseCtrlFilter+1
cmp #0fh
bne L_STOP_MOTOR_END
TurnOffMotor
clr P_IOB_Dir, INT_OC ; re-enable INT_OC function
set P_INT_Ctrl0, CB_INT_IRQ0IE
lda #$0
sta G_TMB_Delay_Cnt
sta G_SpeedMode
sta G_MotorStopUp_Time
L_STOP_MOTOR_END:
rts
;
;
;****************************************
; Applied Body : SPMC65P2404A
; Firmware version: V1.0
; Programer :
; Date : 2006/09/15
; Description : turn off motor immediately
; Hardware Connect: SPMC65 BLDC demo board
; IDE Version : v1.6.8
; BODY Version : v1.0.2A
;****************************************
F_Pwm_Clear:
lda G_Monitor
and #(~ ALARM_MASK)
sta G_Monitor
TurnOffMotor
lda #$FFh ; initial phasecmd
sta G_PhaseCmd
sta G_PhaseCtrlFilter ; initial PhaseCtrlFilter
sta G_POS_fifo ; initial G_POS_fifo
sta G_POS_fifo+1
lda #$0Fh
sta G_PhaseCmd+1
sta G_PhaseCtrlFilter+1
lda #0
sta G_SpeedMode
sta G_5S_Count
sta G_TMB_Delay_Cnt ;hlp 0424
sta G_MotorStopUp_Time
rts
;
;
;****************************************
; Applied Body : SPMC65P2404A
; Firmware version: V1.0
; Programer :
; Date : 2006/09/15
; Description : Timer/Counter Maintain Process
; Hardware Connect: SPMC65 BLDC demo board
; IDE Version : v1.6.8
; BODY Version : v1.0.2A
;****************************************
F_Time_Process:
inc G_250Ms_Count ;4mSec counter increase
bne L_20Ms_Count
lda #C_250MS ;250mSec counter increase
sta G_250Ms_Count
inv G_Time_Flag,CB_250Ms_Flag ;inv 250ms flag
L_1250MS_COUNT:
inc G_1250Ms_Count
bne L_20Ms_Count
lda #C_1250MS ;1250mSec counter increase
sta G_1250Ms_Count
set G_Time_Flag,CB_1250Ms_Flag ;set help mode 1s flag
L_20Ms_Count:
inc G_20Ms_Count ;4mSec counter increase
bne L_4Ms_Count
lda #C_20MS ;20mSec counter increase
sta G_20Ms_Count
set G_Time_Flag,CB_20Ms_Flag ;used for ebs
L_4Ms_Count:
inc G_4Ms_Count ;0.5Sec overflow ?
bne L_Time_Process_End ;no
lda #C_HFSEC ;0.499712 Sec
sta G_4Ms_Count
inv G_Time_Flag,CB_500Ms_Flag ;inv 500ms flag
lda G_Hall1_Num ;
beq L_500Ms_Count ; no motor run
inc G_MotorStop_Cnt ; motor stop count
L_500Ms_Count:
inc G_500Ms_Count ;Half Sec counter increase
bne L_Time_Process_End
lda #C_1SEC
sta G_500Ms_Count ;1s count
inv G_Time_Flag,CB_1S_Flag ;inv 1s flag
set G_Time_Flag,CB_Help1S_Flag ;set help mode 1s flag
inc G_Batter_Low_Time ;battery low time cout,time base 1s
inc G_BatterLowStart_Time ;battery low restart time cout,time base 1s
inc G_2S_Count ;2s count
bne L_3SCount
lda #C_2SEC
sta G_2S_Count
inv G_Time_Flag,CB_2S_Flag ;inv 2s flag
L_3SCount:
inc G_3S_Count ;3s count
bne L_Test_Stock_End1
lda #C_3SEC
sta G_3S_Count
inv G_Time_Flag,CB_3S_Flag ;inv 2s flag
L_Test_Stock_End1:
tst G_Monitor, CB_MotorRun_Flag ;1Sec counter increase
beq L_Test_Stock_End
inc G_5S_Count ;CB_MotorRun_Flag =1,process
tst G_Monitor,CB_MotorBrake_Flag ;motor brake ?
bne L_Test_Stock_End
lda G_Hall1_Num ;CB_MotorBrake_Flag=0,process
beq L_Test_Stock_End ;no motor run
inc G_MotorStopUp_Time ;
L_Test_Stock_End:
lda #1
sta G_Hall1_Num
inc G_Iover_Time
inc G_1s_Count ; half Sec overflow ?
bne L_Time_Process_End ; no
lda #C_ONEMIN ; 59.96544 Sec
sta G_1s_Count
inc G_1Min_Count
L_Time_Process_End:
rts
;
;
;****************************************
; Applied Body : SPMC65P2404A
; Firmware version: V1.0
; Programer :
; Date : 2006/09/15
; Description : AD7 DETECT Battery PROCESS
; Hardware Connect: SPMC65 BLDC demo board
; IDE Version : v1.6.8
; BODY Version : v1.0.2A
;****************************************
F_AD7_Detect:
lda #(C_AD_CE+ C_AD_Ch7)
sta P_AD_Ctrl2
nop
lda #10000100b
sta P_AD_Ctrl0
L_AD7_Detect0:
tst P_AD_Ctrl0,0
beq L_AD7_Detect0
lda P_AD_DataHi
sta G_AD_Register
lda #G_AD7_Queue
sta G_AD_QueueADD
lda #00h
sta G_AD_QueueADD+1
jsr F_AD_Queue_Data_Disposal
lda G_Temp_2
sta G_ADC7_Buf
rts
;
;
;****************************************
; Applied Body : SPMC65P2404A
; Firmware version: V1.0
; Programer :
; Date : 2006/09/15
; Description : AD6 DETECT PROCESS
; Hardware Connect: SPMC65 BLDC demo board
; IDE Version : v1.6.8
; BODY Version : v1.0.2A
;****************************************
F_AD6_Detect:
lda #(C_AD_CE+ C_AD_Ch6)
sta P_AD_Ctrl2
nop
lda #10000100b
sta P_AD_Ctrl0
;Test
L_AD6_Detect0:
tst P_AD_Ctrl0,0
beq L_AD6_Detect0
lda P_AD_DataHi
sta G_AD_Register
lda #G_AD6_Queue
sta G_AD_QueueADD
lda #00h
sta G_AD_QueueADD+1
jsr F_AD_Queue_Data_Disposal
lda G_Temp_2
sta G_ADC6_Buf
rts
;
;
;****************************************
; Applied Body : SPMC65P2404A
; Firmware version: V1.0
; Programer :
; Date : 2006/09/15
; Description : name: F_AD_Queue_Data_Disposal
; Input: G_AD_Register,G_AD_QueueADD
; Output: G_Temp_2
; Destroy: A,Y
; Hardware Connect: SPMC65 BLDC demo board
; IDE Version : v1.6.8
; BODY Version : v1.0.2A
;****************************************
F_AD_Queue_Data_Disposal:
ldy #2
L_AD_Data_In_Queue_Shift:
lda (G_AD_QueueADD),Y
iny
sta (G_AD_QueueADD),Y
dey
dey
bpl L_AD_Data_In_Queue_Shift
lda G_AD_Register
ldy #0
sta (G_AD_QueueADD),Y
sta G_Temp_0
sta G_Temp_1
ldy #3
L_CPM_Loop_0:
nop
lda (G_AD_QueueADD),Y
cmp G_Temp_0
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -