Add CSND_ChnSetDuty()
This commit is contained in:
parent
e562b15a68
commit
671ea5f555
@ -8,11 +8,11 @@
|
|||||||
|
|
||||||
typedef enum
|
typedef enum
|
||||||
{
|
{
|
||||||
CSND_ENCODING_PCM8,
|
CSND_ENCODING_PCM8 = 0,
|
||||||
CSND_ENCODING_PCM16,
|
CSND_ENCODING_PCM16,
|
||||||
CSND_ENCODING_ADPCM, // IMA-ADPCM
|
CSND_ENCODING_ADPCM, // IMA-ADPCM
|
||||||
CSND_ENCODING_PSG, // Similar to DS?
|
CSND_ENCODING_PSG, // Similar to DS?
|
||||||
} CSND_ENCODING;
|
};
|
||||||
|
|
||||||
#define SOUND_CHANNEL(n) ((u32)(n) & 0x1F)
|
#define SOUND_CHANNEL(n) ((u32)(n) & 0x1F)
|
||||||
#define SOUND_FORMAT(n) ((u32)(n) << 12)
|
#define SOUND_FORMAT(n) ((u32)(n) << 12)
|
||||||
@ -30,6 +30,19 @@ enum
|
|||||||
SOUND_ENABLE = BIT(14),
|
SOUND_ENABLE = BIT(14),
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// Duty cycles for a PSG channel
|
||||||
|
enum
|
||||||
|
{
|
||||||
|
DutyCycle_0 = 7, /*!< 0.0% duty cycle */
|
||||||
|
DutyCycle_12 = 0, /*!< 12.5% duty cycle */
|
||||||
|
DutyCycle_25 = 1, /*!< 25.0% duty cycle */
|
||||||
|
DutyCycle_37 = 2, /*!< 37.5% duty cycle */
|
||||||
|
DutyCycle_50 = 3, /*!< 50.0% duty cycle */
|
||||||
|
DutyCycle_62 = 4, /*!< 62.5% duty cycle */
|
||||||
|
DutyCycle_75 = 5, /*!< 75.0% duty cycle */
|
||||||
|
DutyCycle_87 = 6 /*!< 87.5% duty cycle */
|
||||||
|
};
|
||||||
|
|
||||||
typedef union
|
typedef union
|
||||||
{
|
{
|
||||||
u32 value[3];
|
u32 value[3];
|
||||||
@ -62,6 +75,7 @@ void CSND_ChnSetPlayState(u32 channel, u32 value);
|
|||||||
void CSND_ChnSetBlock(u32 channel, int block, u32 physaddr, u32 size);
|
void CSND_ChnSetBlock(u32 channel, int block, u32 physaddr, u32 size);
|
||||||
void CSND_ChnSetVol(u32 channel, u16 left, u16 right);
|
void CSND_ChnSetVol(u32 channel, u16 left, u16 right);
|
||||||
void CSND_ChnSetTimer(u32 channel, u32 timer);
|
void CSND_ChnSetTimer(u32 channel, u32 timer);
|
||||||
|
void CSND_ChnSetDuty(u32 channel, u32 duty);
|
||||||
void CSND_ChnConfig(u32 flags, u32 physaddr0, u32 physaddr1, u32 totalbytesize);
|
void CSND_ChnConfig(u32 flags, u32 physaddr0, u32 physaddr1, u32 totalbytesize);
|
||||||
|
|
||||||
Result CSND_UpdateChnInfo(bool waitDone);
|
Result CSND_UpdateChnInfo(bool waitDone);
|
||||||
|
@ -260,6 +260,18 @@ void CSND_ChnSetTimer(u32 channel, u32 timer)
|
|||||||
csndWriteChnCmd(0x8, (u8*)&cmdparams);
|
csndWriteChnCmd(0x8, (u8*)&cmdparams);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CSND_ChnSetDuty(u32 channel, u32 duty)
|
||||||
|
{
|
||||||
|
u32 cmdparams[0x18>>2];
|
||||||
|
|
||||||
|
memset(cmdparams, 0, 0x18);
|
||||||
|
|
||||||
|
cmdparams[0] = channel & 0x1f;
|
||||||
|
cmdparams[1] = duty;
|
||||||
|
|
||||||
|
csndWriteChnCmd(0x7, (u8*)&cmdparams);
|
||||||
|
}
|
||||||
|
|
||||||
void CSND_ChnConfig(u32 flags, u32 physaddr0, u32 physaddr1, u32 totalbytesize)
|
void CSND_ChnConfig(u32 flags, u32 physaddr0, u32 physaddr1, u32 totalbytesize)
|
||||||
{
|
{
|
||||||
u32 cmdparams[0x18>>2];
|
u32 cmdparams[0x18>>2];
|
||||||
@ -267,7 +279,7 @@ void CSND_ChnConfig(u32 flags, u32 physaddr0, u32 physaddr1, u32 totalbytesize)
|
|||||||
memset(cmdparams, 0, 0x18);
|
memset(cmdparams, 0, 0x18);
|
||||||
|
|
||||||
cmdparams[0] = flags;
|
cmdparams[0] = flags;
|
||||||
cmdparams[1] = 0; // Unknown
|
cmdparams[1] = 0x7FFF7FFF; // Volume
|
||||||
cmdparams[2] = 0; // Unknown
|
cmdparams[2] = 0; // Unknown
|
||||||
cmdparams[3] = physaddr0;
|
cmdparams[3] = physaddr0;
|
||||||
cmdparams[4] = physaddr1;
|
cmdparams[4] = physaddr1;
|
||||||
@ -314,8 +326,6 @@ Result csndChnPlaySound(int chn, u32 flags, u32 sampleRate, void* data0, void* d
|
|||||||
CSND_ChnSetBlock(chn, 1, paddr1, size);
|
CSND_ChnSetBlock(chn, 1, paddr1, size);
|
||||||
}
|
}
|
||||||
|
|
||||||
CSND_ChnSetVol(chn, 0xFFFF, 0xFFFF);
|
|
||||||
|
|
||||||
return csndExecChnCmds(true);
|
return csndExecChnCmds(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user