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

📄 spu_control.h

📁 凌阳SPCE3200多媒体开发板自带源程序。共安排了32个子目录
💻 H
📖 第 1 页 / 共 2 页
字号:
#ifndef	__SPUDRV_H__
#define	__SPUDRV_H__

#include "Sys_Define.h"      //Type definition.					  							//Type definition.

// Defined R_SPU_Status BITS, same as those defined in SPUDRV.ASM
#define	STS_MIDI_PLAY			0x0001								//SPU Status
#define STS_MIDI_CALLBACK		0x0100								//MIDI stop call back routine has been initiated
#define STS_MIDI_REPEAT_ON		0x0200								//MIDI play back continuously
#define STS_MIDI_PAUSE_ON		0x0400								//MIDI Pause flag

// Define MIDI playing mode here
#define SS_PLAYMIDI_ONCE		0x00								//Play MIDI SEQ once
#define SS_PLAYMIDI_INFINITY	0x01								//Play MIDI SEQ repeatly

//*************************************************************************************************	  
//								SPU Register Definition											  *
//*************************************************************************************************	  
#define SPUBASE									 0x88050000			//SPU Register Location
//****************************************
// SPU Control Register					 *
//****************************************
//Used as pointer only.
#define	P_SPU_ChEnL					((UV32 *)(0x88051000))		//Channel Enable
#define P_SPU_Vol					((UV32 *)(0x88051004))		//Main Volume
#define	P_SPU_ChFiqEnL				((UV32 *)(0x88051008))		//Channel FIQ Enable
#define P_SPU_ChFiqStsL				((UV32 *)(0x8805100C))		//Channel FIQ Status
#define P_SPU_BeatBaseCnt			((UV32 *)(0x88051010))		//Beat Base Count
#define P_SPU_BeatCnt				((UV32 *)(0x88051014))		//Beat Counter
#define P_SPU_EnvClk0				((UV32 *)(0x88051018))		//Envelope Interval Select
#define P_SPU_EnvClk1				((UV32 *)(0x8805101C))		//Envelope Interval Select
#define P_SPU_EnvClk2				((UV32 *)(0x88051020))		//Envelope Interval Select
#define P_SPU_EnvClk3				((UV32 *)(0x88051024))		//Envelope Interval Select
#define P_SPU_ChEnvRampDownL		((UV32 *)(0x88051028))		//Envelope Fase Ramp Down
#define P_SPU_ChStopStsL			((UV32 *)(0x8805102C))		//Stop Channel Status
#define P_SPU_ChZeroCrossEnL		((UV32 *)(0x88051030))		//Zero Cross Enable
#define P_SPU_Control				((UV32 *)(0x88051034))		//Contorl Flags
#define P_SPU_Threshold				((UV32 *)(0x88051038))		//Compressor Control
#define P_SPU_ChStsL				((UV32 *)(0x8805103C))		//Channel Status
#define P_SPU_WaveInL				((UV32 *)(0x88051040))		//Left Channel Mixer Input
#define P_SPU_WaveInR				((UV32 *)(0x88051044))		//Software Channel FIFO IRQ Threshold
#define P_SPU_WaveOutL				((UV32 *)(0x88051048))		//Left  Channel Mixer Outpurput
#define P_SPU_WaveOutR				((UV32 *)(0x8805104C))		//Right Channel Mixer Outpur
#define P_SPU_ChRepeatEnL			((UV32 *)(0x88051050))		//Channel Repeat Enable control
#define P_SPU_ChEnvModeL			((UV32 *)(0x88051054))		//Channel Envelope Mode
#define P_SPU_ChToneReleaseL		((UV32 *)(0x88051058))		//Channel Tone Release Control
#define P_SPU_ChEnvIrqStsL			((UV32 *)(0x8805105C))		//Channel Envelope IRQ Status
#define P_SPU_ChPitchBandEnL		((UV32 *)(0x88051060))		//Channel Pithc Bend Enable
#define P_SPU_CompControl			((UV32 *)(0x88051064))		//Software Channel Phase
#define P_SPU_AttRel				((UV32 *)(0x88051068))		//Attack/Release Time Control
#define P_SPU_EQFreq10				((UV32 *)(0x8805106C))		//Digital EQ Cut-off Frequency 0/1
#define P_SPU_EQFreq32				((UV32 *)(0x88051070))		//Digital EQ Cut-off Frequency 2/3
#define P_SPU_EQGain10				((UV32 *)(0x88051074))		//Digital EQ Gain 0/1
#define P_SPU_EQGain32				((UV32 *)(0x88051078))		//Digital EQ Gain 2/3
#define P_SPU_BankAddr				((UV32 *)(0x8805107C))		//Wave Table's Bank Address
#define P_SPU_SoftCHBaseL			((UV32 *)(0x88051080))		//Software channel external buffer base address
#define P_SPU_SoftCHBaseH			((UV32 *)(0x88051084))		//Software channel external buffer base address
#define P_SPU_SoftIRQEN				((UV32 *)(0x88051088))		//Software channel FIQ control

#define	P_SPU_ChEnH					((UV32 *)(0x88051400))     	//Channel Enable
#define	P_SPU_ChFiqEnH				((UV32 *)(0x88051408))     	//Channel FIQ Enable
#define P_SPU_ChFiqStsH				((UV32 *)(0x8805140C))     	//Channel FIQ Status
#define P_SPU_EnvClk4				((UV32 *)(0x88051418))     	//Envelope Interval Select
#define P_SPU_EnvClk5				((UV32 *)(0x8805141C))     	//Envelope Interval Select
//#define P_SPU_EnvClk6           	((UV32 *)(0x88051420))
//#define P_SPU_EnvClk7           	((UV32 *)(0x88051424))
#define P_SPU_ChEnvRampDownH		((UV32 *)(0x88051428))     	//Envelope Fase ramp down
#define P_SPU_ChStopStsH			((UV32 *)(0x8805142C))     	//Stop channel status
#define P_SPU_ChZeroCrossEnH		((UV32 *)(0x88051430))     	//Zero cross Enable
#define P_SPU_ChStsH				((UV32 *)(0x8805143C))     	//Channel Status
#define P_SPU_ChRepeatEnH			((UV32 *)(0x88051450))     	//Channel Repeat Enable contorl
#define P_SPU_ChEnvModeH			((UV32 *)(0x88051454))     	//Channel Envelope Mode
#define P_SPU_ChToneReleaseH		((UV32 *)(0x88051458))     	//Channel Tone Release Control
#define P_SPU_ChEnvIrqStsH			((UV32 *)(0x8805145C))     	//Channel Envelope IRQ Status
#define P_SPU_ChPitchBandEnH		((UV32 *)(0x88051460))     	//Channel Pitch Bend Enable
                                    
//****************************************
//SPU Channel Internal Attribute SRAM	 *
//****************************************
//Must can be used in Value and Pointer.
#define P_SPU_CH_WaveAddr			((UV32  *)(0x88050000))		//Wave Address
#define P_SPU_CH_Mode				((UV32  *)(0x88050004))		//Mode
#define P_SPU_CH_LoopAddr			((UV32  *)(0x88050008))		//Loop Address
#define P_SPU_CH_Pan				((UV32  *)(0x8805000C))		//Pan
#define P_SPU_CH_Envelop0			((UV32  *)(0x88050010))		//Envelope0
#define P_SPU_CH_EnvelopData		((UV32  *)(0x88050014))		//Envelope Data
#define P_SPU_CH_Envelop1			((UV32  *)(0x88050018))		//Envelope1
#define P_SPU_CH_EnvelopSegment		((UV32  *)(0x8805001C))		//Envelope Address
#define P_SPU_CH_EnvelopOffset		((UV32  *)(0x88050020))		//Envelope Address
#define P_SPU_CH_WaveData0			((UV32  *)(0x88050024))		//Wave Data 0
#define P_SPU_CH_EnvelopLoop		((UV32  *)(0x88050028))		//Envelope Loop Control
#define P_SPU_CH_WaveData			((UV32  *)(0x8805002C))		//Wave Data
#define P_SPU_CH_AdpcmSel			((UV32  *)(0x88050034))		//ADPCM Selection
//Register Offset from each channel's P_ChWaveAddr
#define D_SPU_CH_WaveAddr						(0x000      )		//P_ChWaveAddr
#define D_SPU_CH_Mode							(0x001		)		//P_ChMode 			- P_ChWaveAddr
#define D_SPU_CH_LoopAddr						(0x002		)		//P_ChLoopAddr 		- P_ChWaveAddr
#define D_SPU_CH_Pan							(0x003		)		//P_ChPan 			- P_ChWaveAddr
#define D_SPU_CH_Envelop0						(0x004		)		//P_ChEnvelop0 		- P_ChWaveAddr
#define D_SPU_CH_EnvelopData					(0x005		)		//P_ChEnvelopData 	- P_ChWaveAddr
#define D_SPU_CH_Envelop1						(0x006		)		//P_ChEnvelop1 		- P_ChWaveAddr
#define D_SPU_CH_EnvelopSegment					(0x007		)		//P_ChEnvelopSeg 	- P_ChWaveAddr
#define D_SPU_CH_EnvelopOffset					(0x008		)		//P_ChEnvelopOffset - P_ChWaveAddr
#define D_SPU_CH_WaveData0						(0x009		)		//P_ChWaveData0 	- P_ChWaveAddr
#define D_SPU_CH_EnvelopLoop					(0x00A		)		//P_ChEnvelopLoop 	- P_ChWaveAddr
#define D_SPU_CH_WaveData						(0x00B		)		//P_ChWaveData1 	- P_ChWaveAddr
#define D_SPU_CH_AdpcmSel						(0x00D		)		//P_ChAdpcmSel 		- P_ChWaveAddr
 
                                                    
//****************************************          
//SPU Channel Internal Phase SRAM		 *          
//****************************************
//Must can be used in Value and Pointer.        
#define P_SPU_CH_Phase				((UV32  *)(0x88050800))		//Phase
#define P_SPU_CH_PhaseAccumulator	((UV32  *)(0x88050804))		//Phase Accumulator
#define P_SPU_CH_TargetPhase		((UV32  *)(0x88050808))		//Target Phase
#define P_SPU_CH_PhaseControl		((UV32  *)(0x8805080C))		//Phase Control
//Register Offset from each channel's P_ChPhase     
#define D_SPU_CH_PhaseAccumulator				(0x0001		)		//P_ChPhaseAccumulator - P_ChPhase
#define D_SPU_CH_TargetPhase					(0x0002		)		//P_ChTargetPhase      - P_ChPhase
#define D_SPU_CH_PhaseControl					(0x0003		)		//P_ChPhaseControl     - P_ChPhase


extern U16 OptionalReturnValue;									//Return the optional variables.


//*************************************************************************************************
// Function:     InitSPU(void)
// Parameters:   None.
// Returns:      None.
// Description:  Initialize SPU
// Notes:        * HARDWARE DEPENDENT *
//*************************************************************************************************
extern void InitSPU(void);	

//*************************************************************************************************
// Function:     SetMidiChannelMask();
// Parameters: 
// 				 Mask word for 16 channels, bits from B0 to B15 represent
//               channel 0 to channel 15; When a bit equals 1 then the corresponding
//               channel will be used by MIDI play algorithm, on the contrary bit equals
//               to 0 then the corresponding channel will not be allocated for MIDI play
//               User can reserve some channels for playing CELP or SPEECH
// Returns:      None.
// Description:  MIDI playing channel MASK word
// Notes:
//*************************************************************************************************
//extern void SetMidiChannelMask( U16 iMask_H, U16 iMask);						
extern void SetMidiChannelMask(U32 MaskWord);

//*************************************************************************************************
// Function:     PlayMidi();
// Parameters:   Segment  - Segment of sequence data which is compiled from Tonemaker
//               Offset   - Offset of sequence data
//               PlayMode - SS_PLAYMIDI_ONCE | SS_PLAYMIDI_INFINITY
//               SS_PLAYMIDI_ONCE : Play MIDI once
//               SS_PLAYMIDI_INFINITY : Play MIDI repeatedly
// Returns:      None.
// Description:  Play a specified MIDI sequence which is compiled from Tonemaker
// Notes:
//*************************************************************************************************
//extern void PlayMidi(U16 * Address, U16 PlayMode);
extern void PlayMidi( U16  MIDI_Index, U16 PlayMode);
//*************************************************************************************************
// Function:     StopMidi();
// Parameters:   None.
// Returns:      None.
// Description:  Stop MIDI playing back
// Notes:
//*************************************************************************************************
extern void StopMidi();

//*************************************************************************************************
// Function:     PauseMidi();
// Parameters:   None.
// Returns:      None.
// Description:  Pause MIDI playing back
// Notes:
//*************************************************************************************************
extern void PauseMidi();

//*************************************************************************************************
// Function:     PauseMidi();
// Parameters:   None.
// Returns:      None.
// Description:  Resume MIDI playing back
// Notes:
//*************************************************************************************************
extern void ResumeMidi();

//*************************************************************************************************

⌨️ 快捷键说明

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