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

📄 app_main.s

📁 关于DVD的MPEG2用的DSP代码,在DSP的实现MPEG的压缩,解压算法.
💻 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 + -