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

📄 mos&step.asm

📁 sunplus e_bike demo
💻 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 + -