📄 isr.lst
字号:
< .DEFINE C_Auto_Mode 0x0010; //b4=1: A/D auto mode
< .DEFINE C_Manual_Mode 0x0000; //b4=0: A/D manual mode
< //b5: ADINI?
< .DEFINE C_DAC_Current_2mA 0x0040; //b6=1: DAC current = 2mA @ vdd=3V(new option)
< .DEFINE C_DAC_Current_3mA 0x0000; //b6=0: DAC current = 3mA @ vdd=3V(Default)
< .DEFINE C_AD_Vref_VDD 0x0080; //b7=1: Vref is VDD
< .DEFINE C_AD_Vref_VRTPAD 0x0000; //b7=0: Vref is from pin "VRTPAD"
< .DEFINE C_AD_COMP 0x4000; //b14=1: output voltage of DAC0<Analog input signal
< //b14=0: output voltage of DAC0>Analog input signal
< .DEFINE C_AD_RDY 0x8000; //b15=1: A/D digital data ready; 0: not ready
< .endif
<
< .if BODY_TYPE == SPCE500A
< .DEFINE C_AD 0x0001 //
< .DEFINE C_DA 0x0000 //
< .DEFINE C_MIC 0x0000 //
< .DEFINE C_LINE 0x0002 //
< .endif
< //----------------------------------------------
<
<
< // Define for P_DAC_Ctrl
< //----------------------------------------------
< .if BODY_TYPE == SPCE061A
< .DEFINE C_DAC1_Direct 0x0000; // b8 b7: DAC1 latch
< .DEFINE C_DAC1_LatchA 0x0080; // Latch data to DAC1 by TimerA
< .DEFINE C_DAC1_LatchB 0x0100; // Latch data to DAC1 by TimerB
< .DEFINE C_DAC1_LatchAB 0x0180; // Latch data to DAC1 by TimerA or TimerB
<
< .DEFINE C_DAC2_Direct 0x0000; // b6 b5: DAC2 latch
< .DEFINE C_DAC2_LatchA 0x0020; // Latch data to DAC2 by TimerA
< .DEFINE C_DAC2_LatchB 0x0040; // Latch data to DAC2 by TimerB
< .DEFINE C_DAC2_LatchAB 0x0060; // Latch data to DAC2 by TimerA or TimerB
<
< .DEFINE C_ADC_Direct 0x0000; // b4 b3: ADC latch
< .DEFINE C_ADC_LatchA 0x0008; // Latch data to ADC by TimerA
< .DEFINE C_ADC_LatchB 0x0010; // Latch data to ADC by TimerB
< .DEFINE C_ADC_LatchAB 0x0018; // Latch data to ADC by TimerA or TimerB
< .endif
<
< .if BODY_TYPE == SPCE500A
< .DEFINE C_PushPull 0x0000 // b0, (default)
< .DEFINE C_DoubleEnd 0x0001 // b0
< .DEFINE C_DAC_Mode 0x0000 // b1, (default)
< .DEFINE C_PWM_Mode 0x0002 // b1
<
< .DEFINE C_D1_Direct 0x0000 // DAC1 latch
< .DEFINE C_D1_LatchA 0x0008 //
< .DEFINE C_D1_LatchB 0x0010 //
< .DEFINE C_D1_LatchAB 0x0018 //
<
< .DEFINE C_D2_Direct 0x0000 // DAC2 latch
< .DEFINE C_D2_LatchA 0x0020 //
< .DEFINE C_D2_LatchB 0x0040 //
< .DEFINE C_D2_LatchAB 0x00C0 //
< .endif
< //----------------------------------------------
<
< // Define for P_LVD_Ctrl
< //----------------------------------------------
< .if BODY_TYPE == SPCE061A
< .DEFINE C_LVD24V 0x0000; // LVD = 2.4V; b1b0
< .DEFINE C_LVD28V 0x0001; // LVD = 2.8V
< .DEFINE C_LVD32V 0x0002; // LVD = 3.2V
< .endif
<
< .if BODY_TYPE == SPCE500A
< .DEFINE C_LVD26V 0x0000 // LVD = 2.6V
< .DEFINE C_LVD30V 0x0001 // LVD = 3.0V
< .DEFINE C_LVD36V 0x0002 // LVD = 3.6V
< .DEFINE C_LVD40V 0x0003 // LVD = 4.0V
< .endif
<
< .DEFINE C_LVD_Result 0x8000; // b15 = 1: below the selected LVD level
< //----------------------------------------------
<
<
< // SPCE061 flash operation instruction definition
< //----------------------------------------------
< .if BODY_TYPE == SPCE061A
< .DEFINE C_EnableFlashAccess 0xAAAA;
< .DEFINE C_EraseFlashPage 0x5511;
< .DEFINE C_ProgramFlash 0x5533;
< .endif
< //----------------------------------------------
<
<
<
< //===============================================================
< // Sunplus APIs for SPCE 061A
< //===============================================================
< //////////////////////////////////////////////////
< // Note: This register will map to the P_INT_Ctrl
< // (0x7010), The SACMvxx.lib use this register to
< // combine with user's interrupt setting.
< // In SPCE061, it is not necessary since the
< // P_INT_Mask(0x702D) already does this. It is for
< // compatibility to keep it here.
< //////////////////////////////////////////////////
< //.EXTERNAL R_InterruptStatus
<
< //========================================================================================
< // End of SPCE.inc
< //========================================================================================
<
<
<
.include ms01.inc // include ms01 information
< // Progarm: SACM-MS01 API external definition for sacmVxx.lib
< // Writen by: Andy
< // Date: 2000/06/20
< // 2001/02/10
< // 2001/10/11: Add manual mode definition
< //////////////////////////////////////////////////////////////////////////////////////////
<
< .EXTERNAL F_SACM_MS01_Initial
< .EXTERNAL F_SACM_MS01_ServiceLoop // For Auto Mode only
< .EXTERNAL F_SACM_MS01_Play // For Auto Mode only
< .EXTERNAL F_SACM_MS01_Stop
< .EXTERNAL F_SACM_MS01_Stop_EX // Keep Int. enable
< .EXTERNAL F_SACM_MS01_Pause
< .EXTERNAL F_SACM_MS01_Resume
< .EXTERNAL F_SACM_MS01_Volume
< .EXTERNAL F_SACM_MS01_Status
<
< .EXTERNAL F_SACM_MS01_ChannelOff
< .EXTERNAL F_SACM_MS01_ChannelOn
< .EXTERNAL F_SACM_MS01_SetInstrument
<
< .EXTERNAL F_SACM_MS01_ADPCM_Play
< .EXTERNAL F_SACM_MS01_ADPCM_Status
<
< .EXTERNAL F_SACM_MS01_InitDecoder // For Manual Mode only
< .EXTERNAL F_SACM_MS01_Decoder // For Manual Mode only
< .EXTERNAL F_SACM_MS01_InitQueue // For Manual Mode only
< .EXTERNAL F_SACM_MS01_FillQueue // For Manual Mode only
< .EXTERNAL F_SACM_MS01_TestQueue // For Manual Mode only
<
< .EXTERNAL F_FIQ_Service_SACM_MS01 // Interrupt service Routine(FM)
< .EXTERNAL F_ISR_Service_SACM_MS01 // Interrupt service Routine(FM)
< .EXTERNAL F_IRQ2_Service_SACM_MS01 // Interrupt service Routine(ADPCM)
< .EXTERNAL F_IRQ4_Service_SACM_MS01 // Interrupt service Routine(TEMPO)
<
< //========================================================================================
< // End of MS01.inc
< //========================================================================================
.public _BREAK
.public _FIQ
.public _IRQ0
.public _IRQ1
.public _IRQ2
.public _IRQ3
.public _IRQ4
.public _IRQ5
.public _IRQ6
.public _IRQ7
_FIQ:
0000805A A8 DA PUSH R1,R5 TO [SP];
//------------------------------------------------------------------
// hook Timer A FIQ subroutine here and define it to be external
0000805B 40 F0 65 88 CALL F_ISR_Service_SACM_MS01
//------------------------------------------------------------------
0000805D 09 93 00 20 R1 = C_FIQ_TMA
0000805F 19 D3 11 70 [P_INT_Clear] = R1
00008061 A8 90 POP R1,R5 FROM [SP]
00008062 98 9A RETI
/////////////////////////////////////////////////////////////////////////////////////////
// Function: Interrupt Service routine Area
// Service for IRQ1 - IRQ7
// User's IRQ must hook on here
/////////////////////////////////////////////////////////////////////////////////////////
_BREAK:
_IRQ0:
_IRQ1:
00008063 A8 DA PUSH R1,R5 to [sp]
//R1 = C_x
//[P_INT_Clear] = R1
00008064 A8 90 POP R1,R5 from [sp]
00008065 98 9A RETI
_IRQ2:
00008066 A8 DA PUSH R1,R5 TO [SP]
00008067 40 F0 9B 88 CALL F_IRQ2_Service_SACM_MS01 //2ch drum sound
00008069 09 93 00 04 R1 = C_IRQ2_TMB
0000806B 19 D3 11 70 [P_INT_Clear] = R1
0000806D A8 90 POP R1,R5 FROM [SP]
0000806E 98 9A RETI
_IRQ3:
0000806F A8 DA PUSH R1,R5 to [sp]
//R1 = C_x
//[P_INT_Clear] = R1
00008070 A8 90 POP R1,R5 from [sp]
00008071 98 9A RETI
_IRQ4:
00008072 A8 DA PUSH R1,R5 TO [SP]
00008073 40 F0 42 89 CALL F_IRQ4_Service_SACM_MS01; // SONG Tempo control
00008075 50 92 R1 = C_IRQ4_1KHz;
00008076 19 D3 11 70 [P_INT_Clear] = R1
00008078 A8 90 POP R1,R5 FROM [SP]
00008079 98 9A RETI
_IRQ5:
_IRQ6:
_IRQ7:
0000807A A8 DA PUSH R1,R5 to [sp]
//R1 = C_x
//[P_INT_Clear] = R1
0000807B A8 90 POP R1,R5 from [sp]
0000807C 98 9A RETI
//========================================================================================
// End of isr.asm
//========================================================================================
0 error(s), 0 warning(s).
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -