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

📄 main.asm

📁 用W588D写的驱动6210-2.4G无线模块,收发程序在一块,(65C02汇编指令实现)
💻 ASM
字号:
	CHIP		W588

	INCLUDE		PGM_HEAD_588.INI

	EXTERN		FXF_ISR_DELAY_COUNT_DEFAULT
	EXTERN		STOP_TM_FXF_PROC
	EXTERN		INIT_TM_FXF_PROC

	EXTERN		VC_TMV_TABLE
	EXTERN		VC_TMC_TABLE

.ifdef	FW_PWM_TIMER_TM0
	EXTERN		FW_PWM_TIMER_DOWNCOUNT
	PUBLIC		FW_TIMER_DWONCOUNT_RET
.endif
.ifdef	FW_PWM_TIMER_TM1
	EXTERN		FW_PWM_TIMER_DOWNCOUNT
	PUBLIC		FW_TIMER_DWONCOUNT_RET
.endif
.ifdef	FW_PWM_TIMER_TMG0
	EXTERN		FW_PWM_TIMER_DOWNCOUNT
	PUBLIC		FW_TIMER_DWONCOUNT_RET
.endif
.ifdef	FW_PWM_TIMER_TMG1
	EXTERN		FW_PWM_TIMER_DOWNCOUNT
	PUBLIC		FW_TIMER_DWONCOUNT_RET
.endif

	PUBLIC		QUIT_LIB_ISR
;==========================================================================
; Initial For Main.asm Macro
;--------------------------------------------------------------------------


;==========================================================================
;	DECLARE VARIABLES INSIDE THIS SECTION
;	EXAMPLE => VAR1	DS	3
;		   VAR2	DS	1
;==========================================================================
	USER_RAM: SECTION             
    INCLUDE  A00_System_Define.ASM  	;定义变量及宏  Wangbo
	INCLUDE  A01_MF6210_DEFINE.ASM
	INCLUDE	 A02_ISD17XX_Define.ASM		;ISD17XXX用到的变量及宏

	ENDS

;=======================================================================
;	WRITE PROGRAM CODES & TABLES INSIDE THIS SECTION
;==========================================================================
	CODE: SECTION


;==================================================
FXF15_ISR:
	LDA #02H
	STA !EFC1						;CLEAR EVF OF FXF15
									;User can insert program from here
;========================================================
	MACRO_SYS_Time
;========================================================
	PLA
	RTI

;=================================================================
;PORT ISR
;==================================================================
PORT_ISR:
	PHA
	LDA #01H
	STA !EFC0
	JSR MMF6210_Receive_DATA
									;User can insert program from here
	PLA
	RTI
	
;***************************************************************
; INTERRUPT SERVICE ROUTINES
; EVF0 = [XX SI_INT FXF_INT TMG_INT TM1_INT TM0_INT POR_INT]
;***************************************************************
IRQ_ISR:
	PHA

	LDA !IEF0
	AND !EVF0

 	BIT #10H
	BNE FXF_ISR      			 ;1S2T	

	BIT #01H
	BNE PORT_ISR

	LDA !IEF1
	AND !EVF1
	
	BIT #02H
	BEQ PLA_RTI
	
	JMP FXF15_ISR

PLA_RTI:    
	PLA
    	RTI

;===============================================================
;  SR_NAME: FXF13_ISR				;FXF13_ISR FOR MELODY
;  INPUT  : MS_DATA_ADDR			;OUTPUT : SP0AT, SP0BT
;===============================================================
FXF_ISR:
	LDA #10H
	STA !EFC0     					;CLEAR EVF OF FXF13
	
	.IF(WITH_MS .EQ. 1).OR.(WITH_EVO .EQ. 1)
		PHX
		PHY
		
		STORE_SW_CS		
		LDA !BANK
		PHA
	
	    	LDA !IEF1					;DISABLE FXF15
		PHA
	    	STZ !IEF1
	
		LDA !IEF0
		PHA
		AND #01001110B				;KEEP TMG/0/1 INTERRUPT ONLY
		STA !IEF0 
		
		CLI							;ENABLE INTERRUPT
	
		FXF13_ISR_PROC
;-------------------------------------------------------------------------
		PUBLIC		QUIT_LIB_FXF_ISR
QUIT_LIB_FXF_ISR:
		SEI
	
		PLA
		AND #10110001B				;RESTORE IEF0 INTERRUPT
		ORA !IEF0
		STA !IEF0

		QUIT_LIB_FXF_ISR_CONT
		
QUIT_LIB_FXF_ISR_END:
		PLA							;RESTORE FXF15
		STA !IEF1
	
		PLA
		STA !BANK
		RELOAD_SW_CS
		PLY
		PLX
	.ENDIF 
	PLA 
	RTI
;===============================================================
;  SR_NAME: TIMERG1_ISR			;
;===============================================================
TMG1_ISR:
	PHA
	LDA #40H
	STA !EFC0						;CLEAR EVF OF TIMERG1
									;User can insert program from here
.ifdef	FW_PWM_TIMER_TMG1
	JMP FW_PWM_TIMER_DOWNCOUNT
FW_TIMER_DWONCOUNT_RET:
.endif

	PLA
	RTI



;===============================================================
;  SR_NAME: TIMERG0_ISR			;
;  INPUT  : ISR0_NEXT_SYNTH_START	;OUTPUT : SP0CLT, SP0CT
;===============================================================
.IF (CHIPSERIES = 'W588D').OR.(CHIPSERIES = 'W588L')
TMG0_ISR:
LIB_VS0_ISR:
LIB_VS0A_ISR:
	PHA
	LDA #08H
	STA !EFC0				;CLEAR EVF OF TIMERG
	
.ifdef	FW_PWM_TIMER_TMG0
	JMP FW_PWM_TIMER_DOWNCOUNT
FW_TIMER_DWONCOUNT_RET:
.endif
	
.IF (WITH_VS0A .EQ. 1H)
	PHX
	PHY

	STORE_SW_CS
	LDA !BANK
	PHA
		
	.IF (WITH_VOL_REDUCE .EQ. 1)
	LDA #CHANNEL_VS0A
	PHA
	.ENDIF

	JMP_CH1_ISR_ACTION
.ENDIF 

	PLA
	RTI	
.ENDIF 
;===============================================================
;  SR_NAME: TIMER0_ISR			;
;  INPUT  : ISR1_NEXT_SYNTH_START	;OUTPUT : SP0ALT, SP0AT
;===============================================================
TM0_ISR:
LIB_VS1_ISR:
LIB_VS1A_ISR:
	PHA
	LDA #02H
	STA !EFC0			;CLEAR EVF OF TIMERG
	
.ifdef	FW_PWM_TIMER_TM0
	JMP FW_PWM_TIMER_DOWNCOUNT
FW_TIMER_DWONCOUNT_RET:
.endif
	
.IF (WITH_VS1A .EQ. 1H)	
	PHX
	PHY
	
	STORE_SW_CS
	LDA !BANK
	PHA

	.IF (WITH_VOL_REDUCE .EQ. 1)
	LDA #CHANNEL_VS1A
	PHA
	.ENDIF

	JMP_CH2_ISR_ACTION
.ENDIF 

	PLA
	RTI
;===============================================================
;  SR_NAME: TIMER2_ISR			;
;  INPUT  : ISR2_NEXT_SYNTH_START	;OUTPUT : SP0BLT, SP0BT
;===============================================================
TM1_ISR:
LIB_VS2_ISR:
LIB_VS2A_ISR:
	PHA
	LDA #04H
	STA !EFC0     	;CLEAR EVF OF TIMER1
	
.ifdef	FW_PWM_TIMER_TM1
	JMP FW_PWM_TIMER_DOWNCOUNT
FW_TIMER_DWONCOUNT_RET:
.endif

.IF (WITH_VS2A .EQ. 1H)
	PHX
	PHY
	
	STORE_SW_CS
	LDA !BANK
	PHA
	
	.IF (WITH_VOL_REDUCE .EQ. 1)
	LDA #CHANNEL_VS2A
	PHA
	.ENDIF

	JMP_CH3_ISR_ACTION
.ENDIF 

	PLA
	RTI
;===============================================================
;  Quit Libary ISR Lable
;===============================================================
QUIT_LIB_ISR:
	
	SP_VOLUME_REDUCE
	PLA
	STA !BANK
	RELOAD_SW_CS
	
	PLY
	PLX
	PLA
	RTI
                  
;===============================================
; Main program start here after resetting
;===============================================
MAIN_START:
    SYSTEM_INIT_PROCEDURE_W588				;SYSTEM INITIALIZATION PROCEDURE
	SET_STACK_POINTER_TO STACK_END			;USER CAN CHANGE THE VALUE
	CLEAR_RAM_FROM_00H_TO RAM_END			;USER CAN CHANGE THE VALUE
 	CLI
	SPECIAL_REGISTERS_INIT
;===== USER'S CODE START HERE =====
	JMP SProgram_Start
	INCLUDE A20_Initial_Main.ASM
	INCLUDE A30_KEY_LED.ASM
	INCLUDE A40_ISD17XX.ASM
	INCLUDE A50_CLOCK.ASM
	INCLUDE A60_MF6210.ASM
	INCLUDE A61_MF6210_TX.ASM
	INCLUDE A62_MF6210_RX.ASM
;===== USER'S CODE END ============

	ENDS



;==========================================================================
;	ASSIGN INTERRUPT VECTORS INSIDE THIS SECTION
;==========================================================================
	VECTOR:	SECTION
	ORG	1000H
	DW	0040H			;DO NOT REMOVE
	DW	0000H			;DO NOT REMOVE

	ORG	100EH
	DW	0990H			;IV OF BRK
	
	ORG	1010H
	DW	TM0_ISR			;TIMER 0 ISR   ;DO NOT REMOVE
	DW 	TM1_ISR			;TIMER 1 ISR   ;DO NOT REMOVE
	.IF (CHIPSERIES = 'W588D').OR.(CHIPSERIES = 'W588L')
		DW 	TMG0_ISR	;TIEMRG 0 ISR  ;DO NOT REMOVE
	.ELSE
		DW 	0000
	.ENDIF 
	DW 	TMG1_ISR		;TIMERG 1 ISR 
	DW	PORT_ISR		;DO NOT REMOVE
	
	ORG 	101AH
	DW	0000H
	DW	MAIN_START		;IV OF RESET
	DW 	IRQ_ISR			;IV OF IRQ
	
	ORG 	102EH
	DW	0584H			;DO NOT REMOVE

	ENDS

⌨️ 快捷键说明

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