📄 app_main.s
字号:
/*============================================================================*\
application command process module
D.B.White 2000-11-01
\*----------------------------------------------------------------------------*/
/*============================================================================*\
check application command --white 2000-11-01
\*----------------------------------------------------------------------------*/
.nolist
#include "regdef.h"
#include "app_mem.h"
.list
.extern spectrum_buffer
.extern psm_on_off_flag
.extern fft_stage
.extern record_on_off_flag
.extern play_on_off_flag
.extern frame_count
.extern equalizer_on_off_flag
.extern equalizer_gain
.extern equalizer_coeff_flag
.text
.extern in_reread_status
.extern in_normal_status
.extern APP_Exit
.global APP_Main
.global APP_Init
#define RISC_MEM_BASE_HIGH (0xA000+APP_DATA_SEG)
.macro APP_FLAG_VALUE FLAG_VALUE
movi r2, \FLAG_VALUE
.endm
.macro APP_SET_FLAG BIT_MASK
ori r2, \BIT_MASK
.endm
.macro APP_CLR_FLAG BIT_MASK
andi r2, \BIT_MASK
.endm
.macro APP_BIT_TEST BIT_MASK
andi r0, r2, \BIT_MASK
tsti r0, \BIT_MASK
.endm
.macro APP_CMD_TEST REG, COMMAND, FUNCTION
tsti \REG, \COMMAND
beq \FUNCTION
.endm
.macro APP_SET_DRAM ADDRESS, VALUE
movi r0, \VALUE
dsw r0, \ADDRESS
nop
.endm
.macro APP_GET_DRAM ADDRESS
// movi DcacheBase, 0x12
// nop
dlw r0, \ADDRESS
nop
// movi DcacheBase, 0x10
.endm
#define Comm_Reg_0 (0x14>>2)
#define Comm_Reg_1 (0x18>>2)
#define Comm_Reg_2 (0x1C>>2)
#define Comm_Reg_3 (0x10>>2)
// .fill 0x10,4,0x0
/*============================================================================*\
function: APP_Init -- Init Communicate Memory
used: r0, r31
r0: temp register
r31: return address
\*----------------------------------------------------------------------------*/
APP_Init:
SWITCH_TO_APP
dsw r0, app_command
movi r0, 0
// dsw r0, app_status
dsw r0, app_misc
dsw r0, app_debug
mupi r1, RISC_MEM_BASE_HIGH
/*==========================================*\
** init Power spectrum meter
\*------------------------------------------*/
#if ENABLE_PSM
ori r0, r1, spectrum_buffer
dsw r0, PSM_DATA_PTR // init psm pointer
#ifdef mp3
ori r0, r1, pcm_buffer
dsw r0, MP3_DATA_PTR
#endif
#endif
//==========================================
/*==========================================*\
** init equalizer
\*------------------------------------------*/
#if ENABLE_EQUALIZER
ori r0, r1, equalizer_gain
dsw r0, EQUALIZER_DATA_PTR // init equalizer coeff pointer
APP_SET_DRAM sound_effect_flag, 0
#endif
//==========================================
/*==========================================*\
** init recorder
\*------------------------------------------*/
#if ENABLE_REREAD
// ori r0, r1, frame_count
// dsw r0, FRAME_COUNT_PTR // init recorder frame_count pointer
APP_SET_DRAM record_on_off_flag, 0x5555
APP_SET_DRAM play_on_off_flag, 0x5555
APP_SET_DRAM frame_count, 0x0000
#endif
//==========================================
SWITCH_TO_DSP
j r31
nop
/*============================================================================*\
function: APP_Main -- CheckCmd
used: r0, r1, r2
r0: temp register
r1: application command
r2: application status
\*----------------------------------------------------------------------------*/
APP_Main:
#if 0 // use register
rlwi r1, Comm_Reg_0
rlwi r2, Comm_Reg_1
andi r1, 0xff
APP_CMD_TEST r1, APP_CMD_NOP, APP_CheckCmdEnd
APP_CMD_TEST r1, APP_CMD_UNKOWN, APP_ClearCmd
// process command
rswi r1, Comm_Reg_2
APP_ClearCmd:
movi r0, APP_CMD_ACK
rswi r0, Comm_Reg_1 // clear command
addi r2, 1
rswi r2, Comm_Reg_1 // store application flag
APP_CheckCmdEnd:
#else
SWITCH_TO_APP
APP_CheckCmd:
dlw r1, app_command // load application command
dlw r2, app_status // load application flag
nop
andi r1, 0xff
APP_CMD_TEST r1, APP_CMD_NOP, APP_CheckCmdEnd
APP_CMD_TEST r1, APP_CMD_UNKOWN, APP_ClearCmd
j APP_ProcessCmd
APP_ClearCmd:
movi r0, APP_CMD_ACK
dsw r0, app_command // clear command
dsw r2, app_status // store application flag
APP_CheckCmdEnd:
nop
//=====================================================================
//#if SVCD
#if 0 // change by snowwan for microphone always on in pause mode
APP_BIT_TEST APP_RR_ENABLE
bne 1f
#if ENABLE_REREAD
mov r27, DcacheBase
APP_BIT_TEST APP_RR_MODE_REREAD
bne 2f
andi r0, r2, (APP_RR_PLAY_RUN|APP_RR_REC_RUN)
tsti r0, 0
beq 2f
jsr r31, in_reread_status
nop
j 1f
nop
2:
jsr r31, in_normal_status
nop
#endif /* ENABLE_REREAD */
1:
nop
#endif // SVCD
// j APP_CheckCmdReturn
SWITCH_TO_DSP
#endif
j APP_Exit
nop
/*============================================================================*/
APP_ProcessCmd:
andi r0, r1, 0xf0
APP_CMD_TEST r0, APP_CMD_PSM, APP_PC_PSM_CMD
APP_CMD_TEST r0, APP_CMD_RR, APP_PC_RR_CMD
j APP_ProcessCmdEnd
APP_PC_PSM_CMD:
APP_CMD_TEST r1, APP_CMD_PSM_ENABLE, APP_PC_PSM_ENABLE
APP_CMD_TEST r1, APP_CMD_PSM_DISABLE, APP_PC_PSM_DISABLE
APP_CMD_TEST r1, APP_CMD_EQU_ENABLE, APP_PC_EQU_ENABLE
APP_CMD_TEST r1, APP_CMD_EQU_DISABLE, APP_PC_EQU_DISABLE
APP_CMD_TEST r1, APP_CMD_EQU_COEFF, APP_PC_EQU_COEFF
j APP_ProcessCmdEnd
APP_PC_RR_CMD:
APP_CMD_TEST r1, APP_CMD_RR_ENABLE, APP_PC_RR_ENABLE
APP_CMD_TEST r1, APP_CMD_RR_DISABLE, APP_PC_RR_DISABLE
APP_BIT_TEST APP_RR_ENABLE
bne APP_ProcessCmdEnd
APP_CMD_TEST r1, APP_CMD_RR_MODE_REREAD, APP_PC_RR_MODE_REREAD
APP_CMD_TEST r1, APP_CMD_RR_MODE_RESING, APP_PC_RR_MODE_RESING
APP_CMD_TEST r1, APP_CMD_RR_PLAY_RUN, APP_PC_RR_PLAY_RUN
APP_CMD_TEST r1, APP_CMD_RR_PLAY_STOP, APP_PC_RR_PLAY_STOP
APP_CMD_TEST r1, APP_CMD_RR_REC_RUN, APP_PC_RR_REC_RUN
APP_CMD_TEST r1, APP_CMD_RR_REC_STOP, APP_PC_RR_REC_STOP
j APP_ProcessCmdEnd
APP_PC_PSM_ENABLE:
/* APP_BIT_TEST (APP_PSM_ENABLE|APP_PSM_RUN)
beq APP_ProcessCmdEnd
APP_FLAG_VALUE (APP_PSM_ENABLE|APP_PSM_RUN)
*/
APP_SET_FLAG (APP_PSM_ENABLE|APP_PSM_RUN)
j APP_ProcessCmdEnd
APP_PC_PSM_DISABLE:
APP_CLR_FLAG APP_PSM_STOP
// APP_FLAG_VALUE 0
j APP_ProcessCmdEnd
APP_PC_EQU_ENABLE:
APP_BIT_TEST (APP_PSM_ENABLE|APP_EQU_RUN)
beq APP_ProcessCmdEnd
APP_FLAG_VALUE (APP_PSM_ENABLE|APP_EQU_RUN)
#if ENABLE_EQUALIZER
// APP_SET_DRAM equalizer_on_off_flag, 0x5555
#endif
j APP_ProcessCmdEnd
APP_PC_EQU_COEFF:
#if ENABLE_EQUALIZER
// APP_SET_DRAM equalizer_coeff_flag, 0xAAAA
#endif
j APP_ProcessCmdEnd
APP_PC_EQU_DISABLE:
#if ENABLE_EQUALIZER
APP_SET_DRAM equalizer_on_off_flag, 0xAAAA
#endif
APP_CLR_FLAG APP_EQU_STOP
APP_FLAG_VALUE 0
j APP_ProcessCmdEnd
APP_PC_RR_ENABLE:
APP_FLAG_VALUE APP_RR_ENABLE
j APP_ProcessCmdEnd
APP_PC_RR_DISABLE:
#if ENABLE_REREAD
APP_SET_DRAM record_on_off_flag, 0x5555
APP_SET_DRAM play_on_off_flag, 0x5555
APP_SET_DRAM frame_count, 0x0000
#endif
APP_FLAG_VALUE 0
j APP_ProcessCmdEnd
APP_PC_RR_MODE_REREAD:
APP_SET_FLAG APP_RR_MODE_REREAD
j APP_ProcessCmdEnd
APP_PC_RR_MODE_RESING:
APP_CLR_FLAG APP_RR_MODE_RESING
j APP_ProcessCmdEnd
APP_PC_RR_REC_RUN:
APP_SET_FLAG APP_RR_REC_RUN
#if ENABLE_REREAD
APP_SET_DRAM record_on_off_flag, 0xAAAA
#endif
j APP_ProcessCmdEnd
APP_PC_RR_REC_STOP:
APP_CLR_FLAG APP_RR_REC_STOP
#if ENABLE_REREAD
APP_SET_DRAM record_on_off_flag, 0x5555
#endif
j APP_ProcessCmdEnd
APP_PC_RR_PLAY_RUN:
APP_SET_FLAG APP_RR_PLAY_RUN
#if ENABLE_REREAD
APP_SET_DRAM play_on_off_flag, 0xAAAA
#endif
j APP_ProcessCmdEnd
APP_PC_RR_PLAY_STOP:
APP_CLR_FLAG APP_RR_PLAY_STOP
#if ENABLE_REREAD
APP_SET_DRAM play_on_off_flag, 0x5555
#endif
j APP_ProcessCmdEnd
APP_ProcessCmdEnd:
nop
j APP_ClearCmd
/// tail
/*============================================================================*\
\*----------------------------------------------------------------------------*/
/*============================================================================*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -