📄 spu_control.h
字号:
#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 + -