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

📄 user.h

📁 关于DVD上的PCM的解码的代码,PCM的DSP压缩,解调的算法,用RISC32指令来写.
💻 H
字号:
;	Module:	user
;

#include "dolby_pl.h"
#include "sync.h"

#ifdef EFFECT
#if	THREEPAGE
#define	PCM_IBUF_SIZE		0xf000	// 60k bytes
#define	PCM_IBUF_START		0	// 0x5000	
#else	// THREEPAGE
#define	PCM_IBUF_SIZE		0x6000	//0x5000	// 20k bytes
#define	PCM_IBUF_START		0x5000	
#endif	// THREEPAGE
#define PCM_IBUF_END_plus1	PCM_IBUF_START+PCM_IBUF_SIZE	
//efine PCM_MIN_IBUF_DEPTH	0x1000	//initial
#define PCM_MIN_IBUF_DEPTH	0x1800	//initial
#else //EFFECT
#define	PCM_IBUF_SIZE		0xa000	// 40k bytes
#define	PCM_IBUF_START		0x5000	
#define PCM_IBUF_END_plus1	PCM_IBUF_START+PCM_IBUF_SIZE
#define PCM_MIN_IBUF_DEPTH	0x4000  //initial   
#endif //EFFECT

#define	IBUF_START		PCM_IBUF_START
#define	IBUF_END		PCM_IBUF_START+PCM_IBUF_SIZE
#define	IBUF_SIZE		PCM_IBUF_SIZE

#define	OBUF_SIZE		0x3000	// 12K bytes
#define	OBUF_START		0x0000	// 1.5K words, 6K bytes
#define PROGRAM_START		0x1800	// 6K words, 24K bytes

// copy protection stuff
#define	Drv_RD			0xfef0	// 5 byte
#define	Drv_acc			0xfef8	// 1 byte 0xfef5
#define Drv_CD			0xfefc	// 10 byte 0xfef6

//#define	BUS_KEY0		0xff68
//#define	BUS_KEY4		0xff6c
#define	BUS_KEY0		0xf168
#define	BUS_KEY4		0xf16c
#define	PTS_FIFO_START		0xfa00	// 2 elements(PTS,byte count) per entry
#define	PTS_FIFO_END		0xfe00
#define PTS_FIFO_SIZE		(PTS_FIFO_END-PTS_FIFO_START)
#define	PTS_FIFO_ENTRY		(PTS_FIFO_END-PTS_FIFO_START)>>3	
#define	USER_DATA		0xff74
#define	VER_SCALE		0xff78
#define	USER_ICFG   	       	0xff7c
#define	USER_OCFG		0xff80
#define mic1_vol		0xff94
#define mic2_vol		0xff98
//************************************
//Vars added by ZhangWei
//#define mute_num		0xff9c
#define mute_num_mic		0xff9e
//************************************
// DiskAttrib: Low half for Disk Attribution, Hi half for seek snyc counter
// Low half: 0 = not seek yet, 1 = DTS CD, 2 = PCM CD
// Hi half: number of seeking sync 
#define	DiskAttrib		0xff90

#define	INT_MASK		0xffa4
#define	INT_STATUS		0xffa8
#define	IN_BUFFER_THRESHOLD	0xffac	//not used
#define	PCM_SCALE		0xffb0

#define	MUTE_BLK_CNT		0xffb4

#define PTS_FIFO_Start		0xffd0
#define PTS_FIFO_End		0xffd4
#define PTS_FIFO_Wr_Ptr		0xffd8
#define PTS_FIFO_Rd_Ptr		0xffdc

#ifdef	STREAM_SIM
#define	MEM_SEG			0
#define	Stream_Enable		0x104
#define	Stream_Start		0x108
#define	Stream_Size		0x10c
#define	Stream_Rd_Ptr		0x110
#define	PCM_Out_Ctrl		0x284
#else
#if LS388
#if	SVCD
#define	MEM_SEG			0x9	//0x20
#if	THREEPAGE
#define	MEM_SEG12		0xb	//0x22
#endif	// THREEPAGE
#else	// SVCD
#define	MEM_SEG			0x10
#if	THREEPAGE
#define	MEM_SEG12		0x12
#endif	// THREEPAGE
#endif	// SVCD
#if	1
#define	Comm_Reg0		0x100>>2
#define	Comm_Reg1		0x104>>2
#define	Comm_Reg2		0x108>>2
#define	Comm_Reg3		0x918>>2	//0x10c>>2
#else	// 1
#define	Comm_Reg0		0x10>>2
#define	Comm_Reg1		0x14>>2
#define	Comm_Reg2		0x18>>2
#define	Comm_Reg3		0x1c>>2
#endif	// 1
#else	// LS388
#define	MEM_SEG			0x1f
#endif	// LS388
#define	Stream_Start		0xffe0
#define	Stream_End		0xffe4
#define	Stream_Wr_Ptr		0xffe8
#define	Stream_Rd_Ptr		0xffec
#if LS388
#define	Chip_Id			(0x04>>2)
//#define Audio_CtrlReg		(0x700>>2)
#define PCM_Run_Halt		(0xe00>>2)
#define	PCM_Out_Ctrl		(0xe04>>2)
#define PCM_Start_Addr          (0xe08>>2)
#define PCM_End_Addr            (0xe0c>>2)
#define SPDIF_channel_status    (0xe18>>2)
#define GPIO_CTRL_REG           (0x44>>2)
#define PCM_In_Control_Reg	(0xe20>>2)
#define PCM_In_Fifo_Start_Addr  (0xe24>>2)
#define PCM_In_Fifo_End_Addr	(0xe28>>2)
#define PCM_In_Current_Addr     (0xe38>>2)
#define	PLL_Ctrl_Reg1		(0xf0>>2)
#define	PLL_Ctrl_Reg2		(0xf4>>2)
#define	PLL_Off_Reg		(0xf8>>2)
#define	PLL_Clk_Div_Reg		(0xfc>>2)

#define	GenIOMIS_Read_Reg	(0x1040>>2)
#define	GenIOMIS_Tri_State_Enable	(0x1048>>2)
#define	GenIOMIS_Mode		(0x1064>>2)
#else //LS388
#define	PCM_Run_Halt		(0x280>>2)
#define	PCM_Out_Ctrl		(0x284>>2)
#define PCM_Start_Addr          (0x288>>2)
#define PCM_End_Addr            (0x28c>>2)
#define SPDIF_channel_status    (0x298>>2)
#define GPIO_CTRL_REG           (0x350>>2)
#endif //LS388
#endif

#ifdef STREAM_SIM
#define	PCM_Rd_Ptr		0x294
#else

#ifdef FILE_OUT
#define	PCM_Rd_Ptr		0xffd8
#else
#if LS388
#define	PCM_Rd_Ptr		(0xe14>>2)
#else	//LS388
#define	PCM_Rd_Ptr		(0x294>>2)
#endif	//LS388
#endif

#endif

#define	COMMAND0		0xfff0
#define	COMMAND1		0xfff4
#define	STATUS0			0xfff8
#define	STATUS1			0xfffc

// executive host command
#define	CMD_NOP			0x0
#define CMD_AC3			0x80
#define CMD_MPEG1		0x81
#define CMD_MPEG2		0x82
#define CMD_PCM			0x83

#define CMD_PLAY		0x84
#define CMD_STOPF		0x85
#define CMD_STOP		0x86
#define CMD_STOPB		0x87
#define CMD_UNMUTE		0x88

#define CMD_CONFIG		0x89
#define CMD_VER			0x8a
#define CMD_STAT		0x8b
#define CMD_GAIN                0X8c

#define SPDIF_ENABLED		0x1

#define	CMD_FRAMES		0xa0
#define	CMD_CPYP_CLEAR		0xa1
#define	CMD_CPYP_DEC_AUTH	0xa2
#define	CMD_CPYP_DRV_AUTH	0xa3
#define	CMD_CPYP_KEY_SHARE	0xa4
#define	CMD_CPYP_DISC_KEY	0xa5
#define	CMD_CPYP_TITLE_KEY	0xa6
#define	CMD_CPYP_SET_TK		0xa7
#define	CMD_CPYP_DRIVER_TYPE	0xa8

#define CMD_SLOW_PLAY           0xb1
#define CMD_FAST_PLAY           0xb2
#define CMD_FF_FB_PLAY          0xb3
#define CMD_STEP_PLAY           0xb4
#define CMD_PAUSE_RESUME        0xb5
#define CMD_FORCE_DISPLAY       0xb6
#define CMD_NORMAL_PLAY         0xb7
#define CMD_SKIP_TO_I_FRAME	0xb8
#define CMD_FIELD_LOCK_ON	0xb9
#define CMD_FIELD_LOCK_OFF	0xba
#define CMD_NEW_AV_DELTA	0xbb

#define	CMD1_QSOUND		0x800
#define	CMD1_QSOUND_A		0x802		// QSurround with attenuation
#define	CMD1_QSOUND_OFF		0x801

#define	CMD1_AVF		0xa00
#define	CMD1_AVF_OFF		0xa10
#define	CMD1_AVF_L_ON		0xa01
#define	CMD1_AVF_L_OFF		0xa11
#define	CMD1_AVF_R_ON		0xa02
#define	CMD1_AVF_R_OFF		0xa12
#define	CMD1_AVF_LR_ON		0xa03
#define	CMD1_AVF_LR_OFF		0xa13

#define	CMD1_CS_ON		0xb00
#define	CMD1_CS_OFF		0xb01

#define	CS_DISABLED		0x0
#define	CS_ENABLED		0x10
#define	CS_PROCESSED		0x11

#define	ERROR_MASK		0xf		// bit 3..0
#define	RUN_STOP_MASK		0x10		// bit 4
#define	MUTE_MASK		0x20		// bit 5
#define	PROCESSOR_MASK		0x700		// bit 10..8
#define	FIRST_PCM_OUT		0x800		// bit 11
#define	PAUSE			0x1000		// bit 12
#define	NEW_OLD_MASK		0x4000		// bit 14
#define	SYSINIT_MASK		0x8000		// bit 15

#define ICFG_CLOCK_MASK         0x0007
#define ICFG_CHAN_POLAR_MASK    0x0008
#define ICFG_PCM_SIZE_MASK      0x0030
#define ICFG_I2S_MASK           0x0040
#define ICFG_SPDIF_MASK         0x0080

#define ICFG_CLOCK_SHIFT        0
#define ICFG_CHAN_POLAR_SHIFT   3
#define ICFG_PCM_SIZE_SHIFT     4
#define ICFG_I2S_SHIFT          6
#define ICFG_SPDIF_SHIFT        7
//------New flag about KarlaOK system--------------------
#define ICFG_HWECHO_MASK        0x1000		//1 = HW-ECHO, 0 = SW-ECHO
#define ICFG_REVERB_BYPASS_MASK	0x2000		//1 = bypass reverb, 0 = reverb
#define ICFG_LS128_MASK 	0x4000		//1 = LS128, 0 = not LS128
//-------------------------------------------------------

#define OCFG_MUTE_MASK          0x0040
#define OCFG_EMPHA_MASK         0x0080
#define OCFG_CHANNEL_MASK       0x0700
#define OCFG_PCM_FREQ_MASK	0x2000
#define OCFG_SAMP_FREQ_MASK     0x1000		// 0x3000
#define OCFG_WORD_LEN_MASK      0xc000
#define OCFG_Y_MASK_HI          0x001f
#define OCFG_X_MASK_HI          0x00e0

#define OCFG_MUTE_SHIFT         6
#define OCFG_EMPHA_SHIFT        7
#define OCFG_CHANNEL_SHIFT      8
#define OCFG_SAMP_FREQ_SHIFT    12
#define OCFG_WORD_LEN_SHIFT     14
#define OCFG_Y_SHIFT            16
#define OCFG_X_SHIFT            21

#define ROM_VER			0x100

#define	STATUS_STOP		0x0
#define	PROCESS_OLD		0x0

#define	RESET_ERROR		0xfff0
#define	RESET_ERR_SYNC		0xfffe
#define	RESET_STOP		0xffef
#define	SET_RUN			0x10
#define	SET_MUTE		0x20
#define	RESET_UNMUTE		0xffdf
#define	SET_SYSINIT		0x8000		// set bit 15 to 1
#define	RESET_SYSINIT		0x7fff
#define SET_PROCESS_NEW		0x4000		// set bit 14 to 1
#define RESET_PROCESS_OLD	0xbfff		// set bit 14 to 0
#define	SET_PAUSE		0x1000
#define	RESET_RESUME		0xefff

#define	PCM_DONE		0x1

#define	SET_INT			0x4000		// Kluge way to set int
#define	RESET_INT		0xbfff

/* host to fill 0xffffa5a5 in the stream buffer if end of stream reached 
#define	STREAM_END0		0xffff
#define	STREAM_END1		0xa5a5
#define	MAX_DMA_SIZE		32
*/

#if LS388
#define	PLL_CTRL_48K		0x44E11000
#define	PLL_DIV_48K		0x112
#define	PLL_CTRL_441K		0x45431000
#define	PLL_DIV_441K		0x08E
#define	LS500_ID		0x00000000
#define	LS508_ID		0x00000200
#define	PLL_CTRL_48K_500	0x48AB1000
#define	PLL_DIV_48K_500		0x46
#define	PLL_CTRL_441K_500	0x0D0B1000
#define	PLL_DIV_441K_500	0x15A
#define	PLL_CTRL_48K_508	0x000108ab
#define	PLL_DIV_48K_508		0x01110000
#define	PLL_CTRL_441K_508	0x00000d0b
#define	PLL_DIV_441K_508	0x01560000
#define	CHANNEL_STATUS_48K	0x02000040
#define	CHANNEL_STATUS_441K	0x02000000
#endif	// LS388

// location of PCM_FIFO in main memory
#ifdef  I2S      // buffer size = 128 samples, 6 channels, 4 bytes per sample
#define	PCM_FIFO_BASE	0
#define PCM_FIFO_0_START	PCM_FIFO_BASE
#define	PCM_FIFO_0_END		PCM_FIFO_0_START+127*6*4
#define	PCM_FIFO_1_START	PCM_FIFO_BASE+256*3*4
#define PCM_FIFO_1_END		PCM_FIFO_1_START+127*6*4
#define	PCM_FIFO_SIZE		0x17ff
#else
#define	PCM_FIFO_BASE	0
#define PCM_FIFO_0_START	PCM_FIFO_BASE
#define	PCM_FIFO_0_END		PCM_FIFO_0_START+255*6*4
#define	PCM_FIFO_1_START	PCM_FIFO_BASE+256*6*4
#define PCM_FIFO_1_END		PCM_FIFO_1_START+255*6*4
#define	PCM_FIFO_SIZE		0x2fff
#endif

#define SP_draft_before_dram_byte			0x1800
#define SP_draft_before_dram_word			0x600
#define SP6_draft_before_dram_byte			0x1f00
#define SP6_draft_before_dram_word			0x800


#define	RegStrWrPtr	0x914>>2
#define	RegStrRdPtr	0x918>>2
#define	RegPTSWrPtr	0x91c>>2
#define	RegPTSRdPtr	0x920>>2

#if 1	/* Use DRAM for Pointers */
.MACRO	LdStrRdPtr	RegRdPtr
	dlw	\RegRdPtr,Stream_Rd_Ptr
.ENDM
.MACRO	LdStrWrPtr	RegWrPtr
	dlw	\RegWrPtr,Stream_Wr_Ptr
.ENDM
.MACRO	SvStrRdPtr	RegRdPtr
	dsw	\RegRdPtr,Stream_Rd_Ptr
.ENDM
.MACRO	SvStrWrPtr	RegWrPtr
	dsw	\RegWrPtr,Stream_Wr_Ptr
.ENDM
.MACRO	LdPTSRdPtr	RegRdPtr
	dlw	\RegRdPtr,PTS_FIFO_Rd_Ptr
.ENDM
.MACRO	LdPTSWrPtr	RegWrPtr
	dlw	\RegWrPtr,PTS_FIFO_Wr_Ptr
.ENDM
.MACRO	SvPTSRdPtr	RegRdPtr
	dsw	\RegRdPtr,PTS_FIFO_Rd_Ptr
.ENDM
.MACRO	SvPTSWrPtr	RegWrPtr
	dsw	\RegWrPtr,PTS_FIFO_Wr_Ptr
.ENDM
#else	/* Use Register for Pointers */
.MACRO	LdStrRdPtr	RegRdPtr
	rlwi	\RegRdPtr,RegStrRdPtr
.ENDM
.MACRO	LdStrWrPtr	RegWrPtr
	rlwi	\RegWrPtr,RegStrWrPtr
.ENDM
.MACRO	SvStrRdPtr	RegRdPtr
	rswi	\RegRdPtr,RegStrRdPtr
.ENDM
.MACRO	SvStrWrPtr	RegWrPtr
	rswi	\RegWrPtr,RegStrWrPtr
.ENDM
.MACRO	LdPTSRdPtr	RegRdPtr
	rlwi	\RegRdPtr,RegPTSRdPtr
.ENDM
.MACRO	LdPTSWrPtr	RegWrPtr
	rlwi	\RegWrPtr,RegPTSWrPtr
.ENDM
.MACRO	SvPTSRdPtr	RegRdPtr
	rswi	\RegRdPtr,RegPTSRdPtr
.ENDM
.MACRO	SvPTSWrPtr	RegWrPtr
	rswi	\RegWrPtr,RegPTSWrPtr
.ENDM
#endif

⌨️ 快捷键说明

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