⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.asm

📁 sunplus e_bike demo
💻 ASM
📖 第 1 页 / 共 4 页
字号:
		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 + -