add to support 48/32kHz switching.

add several Get functions

git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/twl_wrapsdk/trunk@144 4ee2a332-4b2b-5046-8439-1ba90f034370
This commit is contained in:
yutaka 2007-06-28 10:20:11 +00:00
parent e75aed13fd
commit 31c569252d
5 changed files with 116 additions and 53 deletions

View File

@ -78,23 +78,23 @@ void CDC_Init( void )
#ifdef MEASUREMENT_BY_TICK
tick_cdcInit_tail =OS_GetTick();
OS_TPrintf("cdcInit = %llu, %6d\n", tick_cdcInit_head,
OS_TPrintf("CDC_Init = %llu, %6d\n", tick_cdcInit_head,
OS_TICK_TO_USEC(tick_cdcInit_head));
OS_TPrintf("cdcPowerUpPLL = %llu, %6d\n", tick_cdcPowerUpPLL_head,
OS_TPrintf("CDC_PowerUpPLL = %llu, %6d\n", tick_cdcPowerUpPLL_head,
OS_TICK_TO_USEC(tick_cdcPowerUpPLL_head));
OS_TPrintf("cdcInitSound = %llu, %6d\n", tick_cdcInitSound_head,
OS_TPrintf("CDC_InitSound = %llu, %6d\n", tick_cdcInitSound_head,
OS_TICK_TO_USEC(tick_cdcInitSound_head));
OS_TPrintf("cdcPowerUpDAC = %llu, %6d\n", tick_cdcPowerUpDAC_head,
OS_TPrintf("CDC_PowerUpDAC = %llu, %6d\n", tick_cdcPowerUpDAC_head,
OS_TICK_TO_USEC(tick_cdcPowerUpDAC_head));
OS_TPrintf("cdcSetupDAC = %llu, %6d\n", tick_cdcSetupDAC_head,
OS_TPrintf("CDC_SetupDAC = %llu, %6d\n", tick_cdcSetupDAC_head,
OS_TICK_TO_USEC(tick_cdcSetupDAC_head));
OS_TPrintf("cdcEnableHeadphoneDriver = %llu, %6d\n", tick_cdcEnableHeadphoneDriver_head,
OS_TPrintf("CDC_EnableHeadphoneDriver = %llu, %6d\n", tick_cdcEnableHeadphoneDriver_head,
OS_TICK_TO_USEC(tick_cdcEnableHeadphoneDriver_head));
OS_TPrintf("cdcEnableSpeakerDriver = %llu, %6d\n", tick_cdcEnableSpeakerDriver_head,
OS_TPrintf("CDC_EnableSpeakerDriver = %llu, %6d\n", tick_cdcEnableSpeakerDriver_head,
OS_TICK_TO_USEC(tick_cdcEnableSpeakerDriver_head));
OS_TPrintf("cdcUnmuteDAC = %llu, %6d\n", tick_cdcUnmuteDAC_head,
OS_TPrintf("CDC_UnmuteDAC = %llu, %6d\n", tick_cdcUnmuteDAC_head,
OS_TICK_TO_USEC(tick_cdcUnmuteDAC_head));
OS_TPrintf("cdcInit tail = %llu, %6d\n", tick_cdcInit_tail,
OS_TPrintf("CDC_Init tail = %llu, %6d\n", tick_cdcInit_tail,
OS_TICK_TO_USEC(tick_cdcInit_tail));
#endif
}
@ -396,15 +396,12 @@ void CDC_GetInputPinControl( BOOL *enable_vcnt5, BOOL *enable_sphp, BOOL *enable
*---------------------------------------------------------------------------*/
static void CDCi_PowerUpPLL( void )
{
// IOP からの MCLK を check / enable
// page 0, reg 5 ‚Å P=2,R=1,PLL on <20>Ýè
CDC_ChangePage( 0 );
CDC_WriteI2cRegister( REG_CDC0_PLL_P_R_ADDR,
CDC0_PLL_P_R_PWR | (2 << CDC0_PLL_P_R_DIV_SHIFT) |
CDC_WriteI2cRegister( REG_CDC0_PLL_P_R_ADDR,
CDC0_PLL_P_R_PWR |
(2 << CDC0_PLL_P_R_DIV_SHIFT) |
(1 << CDC0_PLL_P_R_MUL_SHIFT) );
// ADC / DAC のパワーアップ時が問題?
// dly_tsk( 15 );
}
/*---------------------------------------------------------------------------*
@ -421,11 +418,35 @@ static void CDCi_PowerDownPLL( void )
// page 0, reg 5 ‚Å PLL off <20>Ýè
CDC_ChangePage( 0 );
CDC_WriteI2cRegister( REG_CDC0_PLL_P_R_ADDR, 0 );
// dly_tsk( 15 );
// IOP からの MCLK を check / disable
}
/*---------------------------------------------------------------------------*
Name: CDC_SetParamPLL
Description: setup PLL parameter of the CODEC
Arguments: is48kHz : set 48 kHz if TRUE. set 32kHz if FALSE.
Returns: None
*---------------------------------------------------------------------------*/
// パラメータをいきなり変更しても問題ないか要確認
// Codec Off状態で変更すべき
void CDC_SetParamPLL( BOOL is48kHz )
{
if (is48kHz)
{
CDC_WriteI2cRegister( REG_CDC0_PLL_J_ADDR, 15 );
CDC_WriteI2cRegister( REG_CDC0_NDAC_DIV_ADDR, CDC0_NDAC_DIV_PWR | 5 );
CDC_WriteI2cRegister( REG_CDC0_NADC_DIV_ADDR, CDC0_NADC_DIV_PWR | 5 );
}
else
{
CDC_WriteI2cRegister( REG_CDC0_PLL_J_ADDR, 21 );
CDC_WriteI2cRegister( REG_CDC0_NDAC_DIV_ADDR, CDC0_NDAC_DIV_PWR | 7 );
CDC_WriteI2cRegister( REG_CDC0_NADC_DIV_ADDR, CDC0_NADC_DIV_PWR | 7 );
}
}
/*---------------------------------------------------------------------------*
Name: CDC_PowerUpDAC

View File

@ -41,23 +41,24 @@ static void SNDi_I2SInit(void)
if (isInitialized == FALSE)
{
isInitialized = TRUE;
reg_SND_POWCNT |= REG_SND_POWCNT_SPE_MASK;
reg_CFG_TWL_EX |= REG_CFG_TWL_EX_I2S_MASK;
if (reg_CFG_TWL_EX & REG_CFG_TWL_EX_I2S_MASK)
{
isTwl = TRUE;
// 32KHz
// reg_SND_I2SCNT |= REG_SND_I2SCNT_MIX_RATIO_MASK;
// reg_SND_I2SCNT &= ~(REG_SND_I2SCNT_MUTE_MASK | REG_SND_I2SCNT_CODEC_SMP_MASK);
// 48KHz
reg_SND_I2SCNT |= REG_SND_I2SCNT_MIX_RATIO_MASK | REG_SND_I2SCNT_CODEC_SMP_MASK;
reg_SND_I2SCNT &= ~(REG_SND_I2SCNT_MUTE_MASK);
}
if ((reg_CFG_CLK & REG_CFG_CLK_SND_MASK) == 0)
{
// initialize codec with enabling I2S
CDC_Init();
}
reg_CFG_TWL_EX |= REG_CFG_TWL_EX_I2S_MASK;
if (reg_CFG_TWL_EX & REG_CFG_TWL_EX_I2S_MASK)
{
isTwl = TRUE;
// Set default values
SND_I2SSetSamplingRatio(TRUE);
SND_I2SSetMixingRatio(8);
SND_I2SMute(FALSE);
}
}
}
@ -172,6 +173,20 @@ void SND_I2SMute(BOOL isMute)
}
}
/*---------------------------------------------------------------------------*
Name: SND_I2SIsMute
Description: Get mute status
Arguments: None
Returns: TRUE if mute
*---------------------------------------------------------------------------*/
BOOL SND_I2SIsMute(void)
{
return (BOOL)((reg_SND_I2SCNT & REG_SND_I2SCNT_MUTE_MASK) >> REG_SND_I2SCNT_MUTE_SHIFT);
}
/*---------------------------------------------------------------------------*
Name: SND_I2SSetMixingRatio
@ -190,25 +205,42 @@ void SND_I2SSetMixingRatio(int nitroRatio)
if (nitroRatio >= 0 && nitroRatio <= 8)
{
reg_SND_I2SCNT &= ~REG_SND_I2SCNT_MIX_RATIO_MASK;
reg_SND_I2SCNT = (u8)((reg_SND_I2SCNT & ~REG_SND_I2SCNT_MIX_RATIO_MASK) | nitroRatio);
reg_SND_I2SCNT = (u8)((reg_SND_I2SCNT & ~REG_SND_I2SCNT_MIX_RATIO_MASK) | (nitroRatio << REG_SND_I2SCNT_MIX_RATIO_SHIFT));
}
}
}
/*---------------------------------------------------------------------------*
Name: SND_I2SGetMixingRatio
Description: Set mixing ratio
Arguments: None
Returns: NITRO : DSP ratio. (0-8)
if 8, nitro sound is all.
if 0, DSP sound is all.
*---------------------------------------------------------------------------*/
int SND_I2SGetMixingRatio(void)
{
return (reg_SND_I2SCNT & REG_SND_I2SCNT_MIX_RATIO_MASK) >> REG_SND_I2SCNT_MIX_RATIO_SHIFT;
}
/*---------------------------------------------------------------------------*
Name: SND_I2SSetSamplingRatio
Description: Set I2S sampling ratio
Description: Set I2S sampling ratio.
It can be called while I2S is disabled.
Arguments: is47kHz : set 48 kHz if TRUE. set 32kHz if FALSE.
Arguments: is48kHz : set 48 kHz if TRUE. set 32kHz if FALSE.
Returns: None
*---------------------------------------------------------------------------*/
void SND_I2SSetSamplingRatio(BOOL is47kHz)
void SND_I2SSetSamplingRatio(BOOL is48kHz)
{
if (isTwl)
{
if (is47kHz)
if (is48kHz)
{
reg_SND_I2SCNT |= REG_SND_I2SCNT_CODEC_SMP_MASK;
}
@ -216,7 +248,22 @@ void SND_I2SSetSamplingRatio(BOOL is47kHz)
{
reg_SND_I2SCNT &= ~REG_SND_I2SCNT_CODEC_SMP_MASK;
}
CDC_SetParamPLL(is48kHz);
}
}
/*---------------------------------------------------------------------------*
Name: SND_I2SIsSamplingRatio48kHz
Description: Get I2S sampling ratio.
Arguments: None
Returns: TRUE if 48 kHz. otherwise FALSE
*---------------------------------------------------------------------------*/
BOOL SND_I2SIsSamplingRatio48kHz(void)
{
return (BOOL)((reg_SND_I2SCNT & REG_SND_I2SCNT_CODEC_SMP_MASK) >> REG_SND_I2SCNT_CODEC_SMP_SHIFT);
}
/*====== End of snd_i2s.c ======*/

View File

@ -15,6 +15,8 @@
*---------------------------------------------------------------------------*/
#include <twl_sp.h>
#include <twl/cdc.h> // for DS mode
#include <twl/snd/ARM7/i2s.h>
/*---------------------------------------------------------------------------*
è<EFBFBD>è`
@ -29,7 +31,7 @@
*---------------------------------------------------------------------------*/
static OSHeapHandle InitializeAllocateSystem(void);
static void VBlankIntr(void);
#include <twl/cdc.h> // for DS-mode
/*---------------------------------------------------------------------------*
Name: TwlSpMain
@ -59,9 +61,9 @@ void TwlSpMain(void)
#if 0
// DS mode
SND_Disable();
reg_SND_I2SCNT &= ~REG_SND_I2SCNT_CODEC_SMP_MASK; // 32kHz
SND_Enable();
SND_I2SSetSamplingRatio(FALSE); // 32kHz
CDC_GoDsMode();
SND_Enable();
#endif
// reg_CFG_DS_MDFY |= REG_CFG_DS_MDFY_SND_MASK; // SOUND‰ñ˜HƒoƒO<C692>C<EFBFBD>³ (default: off)

View File

@ -152,26 +152,15 @@ void CDC_SetInputPinControl( BOOL enable_vcnt5, BOOL enable_sphp, BOOL enable
void CDC_GetInputPinControl( BOOL *enable_vcnt5, BOOL *enable_sphp, BOOL *enable_pmoff );
/*---------------------------------------------------------------------------*
Name: i_cdcPowerUpPLL
Name: CDC_SetParamPLL
Description: power up Internal PLL of the CODEC
Description: setup PLL parameter of the CODEC
Arguments: None
Arguments: is48kHz : set 48 kHz if TRUE. set 32kHz if FALSE.
Returns: None
*---------------------------------------------------------------------------*/
void i_cdcPowerUpPLL( void );
/*---------------------------------------------------------------------------*
Name: i_cdcPowerDownPLL
Description: power down Internal PLL of the CODEC
Arguments: None
Returns: None
*---------------------------------------------------------------------------*/
void i_cdcPowerDownPLL( void );
void CDC_SetParamPLL( BOOL is48kHz );
/*---------------------------------------------------------------------------*
Name: CDC_PowerUpDAC

View File

@ -45,9 +45,13 @@ void SND_I2SBeginSleep(void);
void SND_I2SEndSleep(void);
void SND_I2SMute(BOOL isMute);
BOOL SND_I2SIsMute(void);
void SND_I2SSetMixingRatio(int nitroRatio);
void SND_I2SSetSamplingRatio(BOOL is47kHz);
int SND_I2SGetMixingRatio(void);
void SND_I2SSetSamplingRatio(BOOL is48kHz);
BOOL SND_I2SIsSamplingRatio48kHz( void );
#endif /* SDK_ARM7 */