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

📄 main.asm

📁 winbond的W567B030驱动ISD17240的例子
💻 ASM
字号:
	CHIP		W567


	INCLUDE		PGM_HEAD_567B.INI

	PUBLIC		QUIT_IRQ_ISR
	PUBLIC		QUIT_VS0_ISR
	PUBLIC		QUIT_VS1_ISR

	PUBLIC		WTB_ENV_SHARP_DECAY_AMOUNT
;	PUBLIC		FXF_ISR_NESTED_INT_MASK

;==========================================================================
;	DECLARE VARIABLES INSIDE THIS SECTION
;	EXAMPLE => VAR1	DS	3
;			   VAR2	DS	1
;==========================================================================
	USER_RAM: SECTION

    INCLUDE  A00_Variable_Define.ASM  	;定义变量及宏  Wangbo
	INCLUDE  A03_ISD17XX_Define.ASM
	INCLUDE  A03_ISD17XX_MACRO1.ASM

	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
	STA !BANK
	RELOAD_SW_CS
	PLA
	RTI

;=== INTERRUPT SERVICE ROUTINES ===
IRQ_ISR:
	PHA
	STORE_SW_CS
	LDA !BANK
	PHA
	
	LDA !IEF0
	AND !EVF0
	BIT #02H
	BNE VS0_ISR
	BIT #04H
	BNE VS1_ISR
	BIT #10H
	BNE FXF13_ISR

	
	LDA !IEF1
	AND !EVF1
	BIT #02H
	BNE FXF15_ISR

	
	PLA
	STA !BANK
	RELOAD_SW_CS
	PLA
	RTI
	
;=== SPEECH VS0 IRQ ===
VS0_ISR:
	LDA #02H
	STA !EFC0			;CLEAR EVF0 FLAG OF TIMER0
	LDA #10H
	BIT <VS0_STATUS			;check PAUSE flag of VS0_STATUS
	BNE QUIT_VS0_ISR

	JMP (ISR0_NEXT_SYNTH_START)	;DO VS0 SPEECH SYNTHESIZE

QUIT_VS0_ISR:
	PLA
	STA !BANK
	RELOAD_SW_CS
	PLA
	RTI

;=== SPEECH VS1 IRQ ===
VS1_ISR:
	LDA #04H
	STA !EFC0			;CLEAR EVF0 FLAG OF TIMER1
	LDA #10H
	BIT <VS1_STATUS			;check PAUSE flag of VS1_STATUS
	BNE QUIT_VS1_ISR

	JMP (ISR1_NEXT_SYNTH_START)	;DO VS1 SPEECH SYNTHESIZE

QUIT_VS1_ISR:
	PLA
	STA !BANK
	RELOAD_SW_CS
	PLA
	RTI

;=== MELODY FXF13 IRQ ===
FXF13_ISR:
	LDA	#10H
	STA	!EFC0			;CLEAR EVF0 FLAG OF TIMER_FXF
	PHX
	PHY
	;=== OPEN SPEECH IRQ ===
	LDA	!IEF0
	PHA			;BACK-UP IEFL0 & IEF1

	LDA	#06H		;FXF_ISR_NESTED_INT_MASK DEFAULT=06H
	AND	!IEF0		;ENABLE TM0/1 INT ONLY
	STA	!IEF0
	CLI

	JMP	LIB_FXF13_ISR	;DO MELODY SYNTHESIZE

QUIT_IRQ_ISR:
	SEI
	PLA
	AND #11111001B
	ORA !IEF0
	STA	!IEF0		;RESTORE IEF0
	;=== check MS busy flag ===
	LDA <MS_STATUS
	.IFDEF	TWOMIDI
	ORA	<MS_STATUS+1
	.ENDIF
	BIT #01H
	BNE CONT_QUIT_FXF13_INT
	LDA #10H
	TRB !IEF0
CONT_QUIT_FXF13_INT:
	PLY
	PLX
	PLA
	STA 	!BANK
	RELOAD_SW_CS
	PLA
	RTI
	
;=== INTERRUPT SERVICE ROUTINES END ===

;=== RESET BEGIN PROGRAM START HERE ===
MAIN_START:
	SYSTEM_INIT_PROCEDURE_W567			;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
	SET_SPEAKER_OUTPUT_TYPE_TO DAC_5mA	;USER'S OPTION (DAC_5mA/ DAC_3mA/ PWM)
	SPECIAL_REGISTERS_INIT				;RESET SPECIAL REGISTERS

	CLI

;=== DC RAMP UP FOR DAC-type MIXER OUTPUT ===
;DAC_RAMP_UP:
;	LDX #00H
;INCREASE_AGAIN:
;	LDY #77H
;NOP_LOOP:
;	DEY
;	BNE NOP_LOOP
;	CLC
;	LDA !S0DCH
;	ADC #01H
;	STA !S0DCH
;	CMP #80H
;	BNE INCREASE_AGAIN
;=============================
;---------------------------SPEECH EQUATION -------------------------------------
;    PLAY  MANSPEAK_MDM<CH=1/2,VOL=100,SR=8000>
;         MANSPEAK_MDM is speech file name with MDPCM format
;         CH is speech channel assignment, CH=1:TIMER0 CH=2:TIMER1
;         VOL is volume level(0~127)
;         SR is sampling rate,
;         if user not assign value to SR then use the default SR in speech file
;---------------------------MELODY EQUATION--------------------------------------
;    PLAY  MARCH<CH=4MS,VOL=100,TPO=120>
;         March is melody file name with MIDI format 0
;         CH is melody channel assignment(1MS~4MS)
;         VOL is volume level(0~127)
;         TPO is tempo value
;         if user not assign value to TPO then use the default tempo in MIDI file
;--------------------------------------------------------------------------------

;===== USER'S CODE START HERE =====

	JMP SProgram_Start
	INCLUDE A10_Initial_Main.ASM
	INCLUDE A20_KEY_LED.ASM
	INCLUDE A30_ISD17XX.ASM
	INCLUDE A31_ISD17XX_TAB.ASM

;===== USER'S CODE END ============
	ENDS


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

	ORG	100EH
	DW	0990H			;IV OF BRK
	
	ORG	1010H
	DW	1000H			;IV OF EXT0
	DW	1000H			;IV OF EXT1

	ORG	101CH
	DW	MAIN_START		;IV OF RESET
	DW	IRQ_ISR			;IV OF IRQ

;	ORG	103CH
;	DW	MAIN_START		;IV OF RESET FOR TEST
;	DW	IRQ_ISR			;IV OF IRQ FOR TEST

	ENDS

⌨️ 快捷键说明

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