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

📄 test.s

📁 关于DVD的MPEG2用的DSP代码,在DSP的实现MPEG的压缩,解压算法.
💻 S
📖 第 1 页 / 共 5 页
字号:
/************************************************************************/
; (C)1997 Copyright LuxSonor, Inc. All rights reserved
;
; Revision 1.0
;
;	
;	Module:	AUDIO test code
;
;	Initial version:Cecile Foret, mars 1997
;			Jinshi Huang 12/1/98 for LS388/LS500
; 
;	test interrupt in the PCM OUT BUFFER
;	when an audio interrupt is catched, take data from a fake buffer....
;	command read from outside in Comm_Reg3 and analysed 
;	routine for trebble/bass and 3D sound integrated in code 
;	keyshift, trebble/bass and 3D commands are directly handled by
;	the command subroutine.
;	rate conversion 11Kh-44Kh for micro input 
;	echo on the micro phone input at 11Kh
;	interpolation of the echo -> 44.1Kh.
;	microphone input, command handled by CommReg3 (see all_command.S
;	for details ).
;	mixing with audio signal
;************************************************************************

;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
;  How to have echo/mixing back
;	 MICRO = 1
;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
	.nolist
#include "regdef2.h"
#include "stereo_user.h"
#include "user2.h"
#ifdef	EFFECT
#include "memory.h"
#else	//EFFECT
#include "globalv.h"
#endif	//EFFECT
#include "memory2.h"
	.list

	.data

	.global	SUB_Audio_Effect
	.global	main_audio_task
#ifdef	EFFECT
	.extern	Audio_Effect_Entry
#endif
	
; tables related to key shift stuff
	.extern table			; table containing length, dec, Nb
	.extern FIR_coeff		; location in MM of the FIR coefficients.
	.extern window			; location in MM of triangular window
	.extern key_val			; location in MM of the value of the key.
	.extern ratefilt		; location in MM of rate conversion filter sets.
	
; subroutines related to key shift stuff
	.extern SUB_search_update	; routine to modify search buffer, when key change
	.extern SUB_trebble1		; routines to perform trebble filtering 
	.extern SUB_trebble2		; routines to perform trebble filtering
	.extern SUB_bass		; routine to perform the bass filtering
	.extern SUB_command		; routine to get the command from r3k
	.extern SUB_rate		; routine to change freq rate 11Kh->44.1Kh
	.extern SUB_echo		; routine to perform echo on MIC input
	.extern SUB_presence		; routine to add presence and do rate conv.
	.extern	mic_data_ptr
	.extern	dc_offset_44
	.extern	rtn_Microphone
	.extern SUB_record              // for record the microphone 
	.extern SUB_play                // play back the microphone  

	.set	noreorder

; used to scale input by 0.5 
#define		INTERRUPT	1
#define		ALG		1

#define		KEYSHIFT	1
#define		NOP_ENABLE  0

;; ALG is set up to run the keyshift algorithm
#define		MICRO		1		
#define		FAKE		0
;***********************************************************************
;;;; definitions related to AUDIO, CD, PCM-IN and PCM-OUT buffers 
;***********************************************************************
; start address high =0 byte start/end adress for audio buffer 1,5 Kbytes	
#define	AUD_BUF_START_B	0x0c00
#define AUD_BUF_END_B	0x1200
; word & shifted start/end @ for audio buffer 1.5 Kbytes 
#define AUD_BUF_START_W 0x60
#define AUD_BUF_END_W	0x90
#define AUD_BUF_SIZE_W	0x30

;; start address high =0, CD fifo, 0x1e00-0x3c00
#define CD_BUF_START	0x1e00
#define CD_BUF_END		0x3600
#define CD_BUF_SIZE		0x1800

#define CD_BUF_START_W	0x1e0
#define CD_BUF_SIZE_W	0xc0

#if OLD_PCM_BUF_SEG	// 10-13-98
; start @=0x79000, end @=0x7a000, 2K samples
#define PCM_BUF_START	0x7900
#define PCM_BUF_END		0x7a00
#else	// 10-13-98
; start @=0xf3000, end @=0xf4000, 2K samples
#define PCM_BUF_START	0xf900
#define PCM_BUF_END		0xfa00
#endif	// 10-13-98

#if OLD_PCM_IN_SEG	// 10-13-98
; start adress high = 3, start @ = 0x35c00, end @ = 0x37c00, size = 0x2000
#define PCMIN_HIGH		0x3
#define PCMIN_BUF_START 0x5c00
#define PCMIN_BUF_END	0x7c00
#define PCMIN_BUF_SIZE	0x2000

#define PCMIN_BUF_START_W	0x35c0
#define PCMIN_BUF_END_W		0x37c0
#define PCMIN_BUF_SIZE_W	0x200
#else	// 10-13-98
; start adress high = f, start @ = 0xf3000, end @ = 0xf5000, size = 0x2000
#define PCMIN_HIGH		0xf
#define PCMIN_BUF_START 0x3000
#define PCMIN_BUF_END	0x5000
#define PCMIN_BUF_SIZE	0x2000

#define PCMIN_BUF_START_W	0xf300
#define PCMIN_BUF_END_W		0xf500
#define PCMIN_BUF_SIZE_W	0x200
#endif	// 10-13-98

;***********************************************************************
;;;  definitions related to fake input buffer (micro)
;***********************************************************************
; Start adress high =9
#define INPUT_BUF_START	0x0000
; input buffer starts at adress 90000, ends at a0000


;****************************************************************
;			DEFINITIONS RELATED TO ECHO 
;****************************************************************




;*********************************************************************
;;; definitions related to local adresses (filters,data,window,history)
;*********************************************************************

#define local_hist_point	0x530

;************** MAIN PROGRAM ***************************************
;************** Start actual DSP code ******************************

SUB_Audio_Effect:

#ifdef	EFFECT
	movi	StartAddrHigh, DataSeg
	movi	DcacheBase, DataSeg		
	movi	BlockSkip, 0
	movi	BlockSize, 0		;block size = 1.
#endif	//EFFECT
	
		movi	r0, 0x0
		movh	%Prev_Int, r0	; first interrupt should be audio !

;************** set up the command to default values ***************
		movi	r0, 0x7			; trebble = bass = 0dB
		movh	%bass_com,r0	; no bass by default !
		movh	%trebble_com, r0; no trebble by default
//		movi	r0, 0xffff		
//		movh	%echo_com, r0	; no echo by default !
//		dsw		r0,echo_com		; tchou
		movh	%micro_com, r0	; no micro by default
//		dsw		r0,micro_com	; no micro by default
		movi	r0, Key_default
		movh	%keyshift_com,r0

#if		MICRO
;********** init microphone related stuff ***********************
;********** put 3 blocks in MICRO FIFO to start *****************
#if		0	//---------------tchou

#ifdef	EFFECT
		movi	StartAddrHigh, DataSeg		//0x0
		movi	DMASize, 31		//32 words each
		movi	r0, 0
		movi	r1, mic_start_addr
		shr	r1, 2
	
		loop	8, init_mic_0
		
		mov		LocalAddr, r0
		dmawr	r1		; third block
		WaitDma

		addi	r0, 32
		addi	r1, 32
init_mic_0:

		movi	r0, 0
		movi	r1, 0x1200
		shr	r1, 2
	
		loop	8, init_mic_1
		
		mov		LocalAddr, r0
		dmawr	r1		; first block
		WaitDma

		addi	r0, 32
		addi	r1, 32
init_mic_1:

		movi	r0, 0
		movi	r1, 0x1600
		shr	r1, 2
	
		loop	8, init_mic_2
		
		mov		LocalAddr, r0
		dmawr	r1		; first block
		WaitDma

		addi	r0, 32
		addi	r1, 32
init_mic_2:

#else	//EFFECT
		movi	StartAddrHigh, 0x0
		movi	ByteSize, 0x3fe
		movi	ByteLocal, 0x0
		dmabw	mic_start_addr		; third block

		movi	ByteSize, 0x3fe
		movi	ByteLocal, 0x0
		dmabw	0x1200				; first block

		movi	ByteSize, 0x3fe
		movi	ByteLocal, 0x0
		dmabw	0x1600				; second block
#endif	//EFFECT
#endif			//------------------tchou

#endif	//MICRO

;************* init of the bass buffers to 0 *****************************
		movi	AGRAdr1, 0x0
		movi	AGRInc1, 0x2
		movi	AGRSiz1, 0xffff
;		movi	StartAddrHigh, 0x7
		movi	StartAddrHigh, DataSeg	// 10-13-98

#ifdef	EFFECT
		movi	DMASize, 1		;2 words
		movi	LocalAddr, 0x0
		movi	r0,0x0
		loop	4,trebble_hist
		movhf	i1,r0
trebble_hist:
		movi	r0, Lu0u1
		shr	r0, 2		//to word addr
		dmawr	r0			; set up left history
		WaitDma
		
		movi	r0, Ru0u1
		shr	r0, 2
		movi	LocalAddr, 0x0
		dmawr	r0					; set up right history
		WaitDma
		
#else	//EFFECT
		movi	ByteSize, 0x6		;(2*2-1)*2
		movi	ByteLocal, 0x0
		movi	r0,0x0
		loop	4,trebble_hist
		movhf	i1,r0
trebble_hist:
		movi	r0, Lu0u1
		dmabwr	r0					; set up left history
		
		movi	r0, Ru0u1
		movi	ByteSize, 0x6
		movi	ByteLocal, 0x0
		dmabwr	r0					; set up right history
#endif	//EFFECT
	
;************ Init of the trebble buffers to 0 ***************************

#ifdef	EFFECT
		movi	r0, TLu0u1			; set up left trebble  history
		shr	r0, 2
		movi	DMASize, 1			
		movi	LocalAddr, 0x0
		dmawr	r0
		WaitDma
	
		movi	r0, TRu0u1			; set up right trebble history
		shr	r0, 2
		movi	LocalAddr, 0x0
		dmawr	r0
		WaitDma
#else	//EFFECT
		movi	r0, TLu0u1			; set up left trebble  history 
		movi	ByteSize, 0x6			
		movi	ByteLocal, 0x0
		dmabwr	r0

		movi	r0, TRu0u1			; set up right trebble history 
		movi	ByteSize, 0x6
		movi	ByteLocal, 0x0
		dmabwr	r0
#endif	//EFFECT

;************ Set u0,u1 to zero ******************************************

#ifdef	EFFECT
		movi	DMASize, 0	//1 word
		movi	LocalAddr, 0x0
		movi	r0, TDu0u1
		shr	r0, 2		//to word addr
		dmawr	r0
		WaitDma
#else	//EFFECT
		movi	ByteSize, 0x2		;(2*2-1)*2
		movi	ByteLocal, 0x0
		movi	r0, TDu0u1
		dmabwr	r0
#endif	//EFFECT
	
;************ Init of the decimation 44.1Khz-> 11Khz ***************
;******* init the dec_hist *****************************************
		movi	AGRAdr0, 0x0
		movi	AGRInc0, 0x2
		movi	AGRSiz0, 0xffff
		movi	r0, 0x0
		
		loop	127, dec_init
		movhf	i0, r0
dec_init:

#ifdef	EFFECT
		movi	DMASize, 31
		movi	StartAddrHigh,DataSeg	
		movi	r0, 0
		movh	r1,%Echo_delay_ptr
;		movi	r1, dec_hist
;		shr	r1, 2
	
		loop	2, init_dec_hist
	
		mov	LocalAddr, r0
		dmawr	r1
		WaitDma

		addi	r0, 32
		addi	r1, 32
init_dec_hist:
	
#else	//EFFECT
		movi	ByteSize, 0xfc
		movi	ByteLocal, 0x0
;		movi	StartAddrHigh, 0x7
		movi	StartAddrHigh, DataSeg	// 10-13-98
		dmabw	dec_hist
#endif


;************ Init of the interpolation  11Khz->44Khz***************
;******* init the history of the rate filter to zero ***************
#ifdef	EFFECT
		movi	AGRAdr4, 0x1000
		movi	AGRSiz4, 0xffff
		movi	AGRInc4, 0x2
#else	//EFFECT
		movi	AGRAdr2, 0x1000
		movi	AGRSiz2, 0xffff
		movi	AGRInc2, 0x2
#endif	//EFFECT
		movi	r0, 0x0
		loop	32, rate_hist_init
#ifdef	EFFECT
		movhf	i4, r0
#else	//EFFECT
		movhf	i2, r0
#endif	//EFFECT
rate_hist_init:

#ifdef	EFFECT
		movi	DMASize, 16		; history =31 coefficients
		movi	LocalAddr, 0x1000>>2
		movi	r0, rate_hist>>2
		dmawr	r0			; adress in DRAM for history of rate filter
		WaitDma
#else	//EFFECT
		movi	StartAddrHigh, 0x7
		movi	StartAddrHigh, DataSeg	// 10-13-98
		movi	ByteSize, 0x3c		; history =31 coefficients
		movi	ByteLocal, 0x1000
		dmabw	rate_hist		; adress in DRAM for history of rate filter
#endif

#ifdef	EFFECT	//put system variables at 0x400 for now ???
;******* load the 4 sets of filter coefficients ********************
;		movi	StartAddrHigh, 0x40	; read from ROM
		movi	StartAddrHigh, DataSeg	; read from DRAM 10-13-98
		movi	DMASize,31		; 128 coefficients in total 
		movi	r0,ratefilt
		movi	r9, local_rate_filter>>2
		shr		r0,2

		loop	2,decim_interp_coef
		mov		LocalAddr, r9
		dmarr	r0					; adress in ROM of the rate filter
		WaitDma
		addi	r0,32
		addi	r9,32
decim_interp_coef:

#else
;******* load the 4 sets of filter coefficients ********************
;		movi	StartAddrHigh, 0x40	; read from ROM
		movi	StartAddrHigh, DataSeg	; read from DRAM 10-13-98
		movi	ByteSize,0xfe		; 128 coefficients in total 
		movi	ByteLocal, local_rate_filter
		dmabr	ratefilt			; adress in ROM of the rate filter
#endif	//EFFECT

#if		1
;*******************************************************************
;********** init of echo *******************************************
;********** init buffers in DRAM to zero ***************************
		movi	AGRAdr0, 0x1000
		movi	AGRInc0, 0x2
		movi	AGRSiz0, 0xffff
		movi	r0, 1403
		movi	r1, 0x0

buffer_init:
		movhf	i0, r1
		subi	r0, 0x1
#ifdef	EFFECT
		bne		buffer_init
#else	//EFFECT
		bnz		buffer_init
#endif	//EFFECT

#ifdef	EFFECT
		movi	DMASize, 31
		movi	r0, 0x1000>>2
		movi	r1, HBASE>>2
		
		loop	22, init_HBASE		//704 words
		mov	LocalAddr, r0
		dmawr	r1
		WaitDma

		addi	r0, 32
		addi	r1, 32
init_HBASE:
	
#else	//EFFECT
;		movi	StartAddrHigh, 0x7
		movi	StartAddrHigh, DataSeg	// 10-13-98
		movi	ByteSize, 0xaf4
		movi	ByteLocal, 0x1000
		dmabw	HBASE
#endif	//EFFECT
;********** init of gain coefficients ******************************
		movi	r0,	13107 
		movh	%g1, r0			; NAP1
		movh	%g4, r0			; NAP3
		movi	r0, 19661 
		movh	%g2, r0			; NAP2
		movi	r0,	9830 
		movh	%g3, r0			; OAP1
		movi	r0, 3277 
		movh	%g5, r0			; OAP2
		movi	r0, 1000		; default value of feedback gain 
		movh	%FBgain, r0

;********** init of the lowpass filter (feedback)*******************

#ifdef	EFFECT
		movi	LocalAddr, LPFB>>2

⌨️ 快捷键说明

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