📄 main.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 + -