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

📄 main.asm

📁 sunplus e_bike demo
💻 ASM
📖 第 1 页 / 共 4 页
字号:
																		
;==================================================================================
;	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
;==================================================================================
;  * Function selection *
;
;  Notice:  Mark it to cancel its function      (;U_Help_Mode) --> Disable Help_Mode
;==================================================================================
U_Electric_Break          .DEFL 1		;select brake function
U_Help_Mode  		      .DEFL 1		;select help function
U_ConsSpeed               .DEFL 1		;select constant function
U_UnderVCheck 	      	  .DEFL 1		;select low battery function
U_Mosfet_Check		      .DEFL 1		;select mos check function
;U_HallInputMode			  .DEFL 1		;select 120 degree / 60 degree
U_PWM_Compresense		  .DEFL 1		;select pwm compresense
U_BatterChage_Mode		  .DEFL 1		;select batter charge function
U_MotoStopUp_Mode		  .DEFL 1		;select moto stopup function

U_HallBar_Detect		  .DEFL	1
U_Modulate_Enable		  .DEFL	1 
U_Alarm_Mode		      .DEFL	1
U_RollBack			      .DEFL	1		;rollback
;=====================================================================================

.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

.EXTERNAL   F_SixStepWave

.EXTERNAL   F_InitMos_Check
.EXTERNAL	F_Delay5ms
.EXTERNAL	F_Delay1sec
.EXTERNAL   F_Brake_Control
.EXTERNAL   F_Motor_StopUp_Control
.EXTERNAL	F_MotorStop_Control
.EXTERNAL	F_BatteryCharge_Control

.EXTERNAL	F_DutyCmdUpdate
.EXTERNAL	F_Pwm_Renew_Process
.EXTERNAL	F_Close_Timer0
.EXTERNAL   L_Alarm_Work_Process

;****************************************
;*										*
;*		Data memory Define				*
;*										*
;****************************************
.PAGE0	
;======================
;main area
;======================
G_Time_Slot				DS		1		; task counter
Gw_Pc_Reg				DS		2		; task counter
;
;============================================
;Ini area for MOSFET CHECK variable
;============================================
G_Mos_Num				DS      1       ; MOSFET Check	
G_Mos_Num_Temp			DS		1       ; MOSFET Check	
G_Test_Num				DS		1		; MOSFET Check	
G_Delay_Count       	DS      1		; MOSFET Check	
G_Under_Test			DS		1		; MOSFET Check	
;============================================
;ad	area
;============================================
G_ADC7_Buf				DS		1		; valtage ad result
G_Speed_AD_Buf			DS		2		; speed ad buffer
G_Speed_AD_Old			DS		1		; speed old ad
;										; ADaverage=AD(n-1)*(N-1)+ADn/N
;=====================
;8Bit muilt 8bit area
;=====================
G_Multed0				DS		1
G_Multed1				DS		1
G_Mult0					DS		1
G_Mul_Out0				DS		1
G_Mul_Out1				DS		1
;
;======================
;16Bit divide 8Bit area
;======================
G_Shift					DS		1
G_Divided0				DS		1
G_Divided1				DS		1
G_Divided2				DS		1
G_Divid0				DS		1
;
;======================
;time area
;======================
G_4Ms_Count				DS		1		;4ms count 
G_20Ms_Count			DS		1		;20ms count 
G_250Ms_Count			DS		1		;250ms count
G_500Ms_Count			DS		1		;500ms count
G_1250Ms_Count			DS		1		;1250ms count
G_1s_Count				DS		1		;1s count
G_2S_Count				DS		1		;2s count
G_3S_Count				DS		1		;3s count
G_1Min_Count			DS		1		;1min count
;
;======================
;prottect area
;======================
G_Iover_Time			DS		1		;used for I over time count
G_Batter_Low_Time		DS		1		;used for batter low time count
G_BatterLowStart_Time 	DS		1
G_TMB_Delay_Cnt     	DS		1		;NMI int delay time cout
;
;======================
;help comand area
;======================
G_Help0_count			DS		2		;used for count help 0
G_Help1_count			DS		2		;used for count help 1
G_Help_Comand			DS		2		;used for count help comand
G_Help_Comand_BufferLo	ds		4		;;hlp 05/29
G_Help_Comand_BufferHi	DS		4
G_Help_Buffer			DS		2
G_Help1_count_Time  	DS		1		;used for count help comand
G_Help_SpeedMode_Count  DS		1
G_HallStart_Count		DS		1
;======================
;display area
;======================
G_DISP_FLAG				DS		1		 ;used for display ERROR ERROR_LED

;======================
;hz2006-5-5
;======================
G_AD4_Queue:			DS		4
G_AD6_Queue:			DS		4
G_AD7_Queue:			DS		4

G_AD_QueueADD			DS		2
G_AD_Register			DS		1		; adn buffer

G_Temp_0:				DS		1
G_Temp_1:				DS		1
G_Temp_2:				DS		1
G_Temp_3:				DS		1

;==================
;pwm compress area
;==================
G_PwmCompressIOverBuf		DS		1		; G_PwmCompressLimitBuf
G_PwmCompressMaxBuf			DS		1		; if AD6<5EH no pwm compress 

G_60DgreePwmCompressMinBuf	DS		1		; 60 dgree delay ,time base 3 us
G_120DgreePwmCompressMinBuf	DS		1		; 120 dgree delay ,time base 3 us

;==================
;Alarm area
;==================
G_Alarm_Cnt					DS		1
Hall_Alarm_Pos				DS		1
G_Alarm_Hall_Cnt			DS		1

.PUBLIC		G_PwmCompressIOverBuf			; G_PwmCompressLimitBuf
.PUBLIC		G_PwmCompressMaxBuf				; if AD6<5EH no pwm compress 

.PUBLIC		G_60DgreePwmCompressMinBuf		; 60 dgree delay ,time base 3 us
.PUBLIC		G_120DgreePwmCompressMinBuf		; 120 dgree delay ,time base 3 us

;
;
.PUBLIC   G_Delay_Count					; MOSFET Check	
.PUBLIC   G_Mos_Num_Temp				; MOSFET Check
.PUBLIC   G_Under_Test					; MOSFET Check
.PUBLIC   G_Test_Num					; MOSFET Check
.PUBLIC   G_Mos_Num						; MOSFET Check

.PUBLIC   G_DISP_FLAG					; MOSFET Check


.DATA							    	; define data storage section
;****************************************
;*										*
;*		Program Area					*										
;*										*
;****************************************
.CODE									; 

;****************************************
;	Applied Body	: SPMC65P2404A
;	Firmware version: V1.0
;	Programer		: 
;	Date			: 2006/09/15	
;	Description		: Power on Reset Process - Main Program
;	Hardware Connect: SPMC65 BLDC demo board	 
;	IDE Version		: v1.6.8	
;	BODY Version	: v1.0.2A
;****************************************
V_Reset:
        sei                             ; Disable interrupt
        ldx     #C_STACK_BOTTOM         ; Initial stack pointer at $00ff
        txs		                        ; Transfer to stack point       
;			
		clr 	P_LVR_Opt,CB_LVR_V40	; low ret =2.5v
		clr 	P_LVR_Opt,CB_LVR_V40
		
	;	set 	P_LVR_Opt,CB_LVR_V40	; low ret =4.0v
	;	set 	P_LVR_Opt,CB_LVR_V40
		
		lda		#$FF					; Clear Reset flag
        sta		P_SYS_Ctrl
        sta		P_SYS_Ctrl   

		jsr		F_Delay5ms				; delay 5ms
		jsr		F_Delay5ms				; delay 5ms
		jsr		F_Delay5ms				; delay 5ms
		jsr		F_Delay5ms				; delay 5ms	
		
		jsr     F_IintWDT				; Initial WDT 			
		jsr		F_ClearRAM				; clear RAM data to zero
		jsr		F_InitIOPort			; initial GPIO port
		
	;	jsr	    F_Alarm_InitMode
		
		lda		#$FF					; clear all interrupt flags	
		sta		P_INT_Flag0		
		cli					
;********************************************************************************
;*   Purpose: Inspect MOSFET for short 		 		              	      		*
;*   Display: Show the number of times on RED ERROR_LED according to its number *						 				  		  *
;********************************************************************************		
.IFDEF	U_Mosfet_Check

		jsr     F_InitMos_Check	        ;  MOSFET Check	     		
.ENDIF		
;**************************************************************************		
		sei				
		jsr     F_InitTimeRAM			; initial timer ram		
		jsr		F_InitTMR0				; initial timer 0
		jsr		F_InitTMR1				; initial timer 1
		jsr		F_InitTMR2_3			; initial timer 2_3
		jsr		F_InitTMB				; initial time base
		jsr		F_InitADC				; initial adc module

;****************************************
;	Applied Body	: SPMC65P2404A
;	Firmware version: V1.0
;	Programer		: 
;	Date			: 2006/09/15	
;	Description		: HallBar start detect
;	Hardware Connect: SPMC65 BLDC demo board	 
;	IDE Version		: v1.6.8	
;	BODY Version	: v1.0.2A
;****************************************	
.IFDEF	U_HallBar_Detect
L_HallBar_Fault:
		jsr		F_AD4_Detect_HallBar
		cmp		#$46
		bcc		L_HallBar_OK
		set		P_IOB_Data,LED
		jmp		L_HallBar_Fault
L_HallBar_OK:
		clr		P_IOB_Data,LED		
.ENDIF

;****************************************
;	Applied Body	: SPMC65P2404A
;	Firmware version: V1.0
;	Programer		: 
;	Date			: 2006/09/15	
;	Description		: 120 degree / 60 degree Check
;	Hardware Connect: SPMC65 BLDC demo board	 
;	IDE Version		: v1.6.8	
;	BODY Version	: v1.0.2A
;****************************************	
;.IFDEF   U_HallInputMode		
		
;		jsr     F_Phase_InitMode		;select 120 dgree
;ELSE									
;		set      G_Hall_Flag,CB_Hall120Or60_Flag	

;.ENDIF	

		clr		G_Hall_Flag,CB_120_60_Checked
		clr     G_Hall_Flag,CB_Hall120Or60_Flag		
												
;****************************************
;	Applied Body	: SPMC65P2404A
;	Firmware version: V1.0
;	Programer		: 
;	Date			: 2006/09/15	
;	Description		: Purpose: PWM Compresens init
;	Hardware Connect: SPMC65 BLDC demo board	 
;	IDE Version		: v1.6.8	
;	BODY Version	: v1.0.2A
;****************************************				
.IFDEF	U_PWM_Compresense

		jsr     F_InitPWM_Compresense	;  pwm compresense init	     		
.ENDIF		
;**************************************************************************	
;
;
		lda		#$FF					; clear all interrupt flags	
		sta		P_INT_Flag0				
		sta		P_INT_Flag1
		sta		P_INT_Flag2				       
		cli
;
;

;****************************************
;	Applied Body	: SPMC65P2404A
;	Firmware version: V1.0
;	Programer		: 
;	Date			: 2006/09/15	
;	Description		:  Main loop process
;	Hardware Connect: SPMC65 BLDC demo board	 
;	IDE Version		: v1.6.8	
;	BODY Version	: v1.0.2A
;****************************************

L_MAINLOOP:	
		    

       	lda     #00000011B             ; 4 time slot
        and     G_Time_Slot
        sta     G_Time_Slot
        clc
        adc     G_Time_Slot            ; address * 2 (2 bytes)
        tax
        lda     T_SLOT_TSK,X           ;
        sta     Gw_Pc_Reg
        lda     T_SLOT_TSK+1,X         ;
        sta     Gw_Pc_Reg+1
        jmp     (Gw_Pc_Reg)            ; table branch
;-----------------------------------------------------------------------------
;
L_MAILP_10:        
L_MAILP_WT:
		jsr     F_Clear_Wdt			   ; clear watch dog   
		tst		P_INT_Flag2, CB_INT_ITVALIF	
		beq		L_MAILP_WT			   ; no, end IRQ check
		
		set		P_INT_Flag2, CB_INT_ITVALIF	
	 					   			   ;
	 	jsr		F_AD6_Detect 		   ; I detect(Task 70 usec)	
		
.IFDEF   U_Alarm_Mode		
		
		jsr     F_Alarm_InitMode		;select Normal operation
;ELSE									
;		clr     P_IOB_Data,Alarm_LED
.ENDIF	 
		
;**************************************************************************			 	
.IFDEF	U_Modulate_Enable
	 	lda		G_ADC6_Buf
	 	cmp		#108			;100=2.5 ;115
	 	bcs		ON_Modulate
	 	clr		P_IOB_Data,Modulate
	 	jmp		ModulateEnd
ON_Modulate:		
	 	set		P_IOB_Data,Modulate
ModulateEnd:
		nop
.ENDIF
		
;**************************************************************************				
			 	
		jsr		F_Spd_MontCtrl		   ; pwm renew (Max 100 usec)  
		  
        inc     G_Time_Slot            ; time slot pointer + 1
        
        jsr		F_Help_Detect		   ; help hall detect(50us)
        
;****************************************
;	Applied Body	: SPMC65P2404A
;	Firmware version: V1.0
;	Programer		: 
;	Date			: 2006/09/15	
;	Description		:  electronic brake Check
;	Hardware Connect: SPMC65 BLDC demo board	 
;	IDE Version		: v1.6.8	
;	BODY Version	: v1.0.2A
;****************************************     
.IFDEF   U_Electric_Break			   	
		
		jsr     F_EBS_InitMode
ELSE								  
		clr     G_BrakeError_Buf,CB_EbsEnable_Flag
.ENDIF		
;
;       
        jmp     L_MAINLOOP
;
;
;****************************************
;	Applied Body	: SPMC65P2404A
;	Firmware version: V1.0
;	Programer		: 
;	Date			: 2006/09/15	
;	Description		:  Time Slot Tasks (1.0mSec)
;	Hardware Connect: SPMC65 BLDC demo board	 
;	IDE Version		: v1.6.8	
;	BODY Version	: v1.0.2A
;****************************************	
F_TSLOT0:   	    		 		   ;(Task0=> 220 usec)	
		
		    	
        jsr     F_Protect_Control	   ; Voltage Current protect
        jsr		F_AD4_Detect		   ; Speed AD detect  	    	
        jmp     L_MAILP_10 
;
;               
F_TSLOT1:    						   ;(Task1  250 usec)  
        jsr     F_Speed_Control        ; speed control process 
        
IFDEF 	U_BatterChage_Mode

       	jsr		F_BatteryCharge_Control
.ENDIF	 
        jmp     L_MAILP_10 
;
;     
F_TSLOT2:  							   ;(Task2  120 usec)    
        jsr     F_Brake_Control		   ; moto brake process  
        
IFDEF 	U_MotoStopUp_Mode
     	
     	jsr		F_Motor_StopUp_Control ; moto stopup process 
     	 	
.ENDIF       
        jsr     F_Led_Driver		   ; moto informtion display
        jsr     F_Protect_Control	   ; Voltage Current protect	       		  
      	jsr     F_Clear_Wdt  	        	  	   
        jmp     L_MAILP_10            
;
;               
F_TSLOT3:  							   ;(Task3  220 usec)
;.IFDEF   U_Alarm_Mode		
		
	;	jsr     F_Alarm_InitMode		;select Normal operation
;		jsr     F_Alarm_InitMode1
;ELSE									
;		clr      P_IOB_Data,Alarm_LED
;.ENDIF	 
	;	jsr	    F_Alarm_InitMode ;qqq   		      
        jsr		F_AD7_Detect		   ; Battery Voltage AD detect 
        jsr		F_Time_Process		   ; motor time process
        
IFDEF 	U_BatterChage_Mode      
  
        jsr		F_MotorStop_Control    ; motor stop detect 
.ENDIF       
        jmp     L_MAILP_10  
;
;
F_Clear_Wdt:						   ; clear watchdog
        lda     #C_WDT_Clr
        sta     P_WDT_Clr
        sta     P_WDT_Clr
        rts  
;
;
;****************************************
;	Applied Body	: SPMC65P2404A
;	Firmware version: V1.0
;	Programer		: 
;	Date			: 2006/09/15	
;	Description		:  Help hall detect	process
;	Hardware Connect: SPMC65 BLDC demo board	 
;	IDE Version		: v1.6.8	
;	BODY Version	: v1.0.2A

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -