📄 tidtv_msp34x0g.c
字号:
//******************************************************************************
void dev_msp3420DemodWrite(WORD wraddr,WORD wrdata)
{
UCHAR temparray[5];
temparray[0] = 0x10;
temparray[1] = wraddr >> 8;
temparray[2] = (BYTE)wraddr & 0xff;
temparray[3] = wrdata >> 8;
temparray[4] = (BYTE)wrdata & 0xff;
gm_WriteI2C(msp3410_ID,&temparray[0], 5, 1);
}
//******************************************************************************
// FUNCTION : WORD dev_msp3410DemodRead(WORD raddr)
// USAGE : this fucntion does a read to the dsp block of the msp
// INPUT : addr
// OUTPUT : data
// GLOBALS : None
// USED_REGS : None
//******************************************************************************
WORD dev_msp3420DemodRead(WORD raddr)
{
WORD rdata;
UCHAR temp[2];
UCHAR temparray[5];
rdata=0;
temparray[0] = msp3410_ID;
temparray[1] = 0x11; //I2C Bus sub-addr.=>read address Dsp(see msp3450 datasheet page 17)
temparray[2] = raddr >> 8;
temparray[3] = (UCHAR)raddr & 0xff;
temparray[4] = msp3410_ID |0x01;
//gm_WriteI2C(msp3410_ID,&temparray[0], 3, 0);
//gm_ReadI2C(msp3410_ID, (BYTE*)&temp, 2, 1);
TiDTV_I2cReadAfterWrite(msp3410_I2C_CHANNEL, 1, 5, temparray,
2, temp, OS_TICKS_PER_SEC / 2);
rdata = temp[0];
rdata &= 0x00ff;
rdata <<= 8;
rdata &= 0xff00;
rdata = rdata | temp[1];
return rdata;
}
void dev_msp3420Init(void)
{
//UCHAR rdata1;
dev_msp3420ControlWrite(Mps3420_Reset); //reset Msp statically
dev_msp3420ControlWrite(Mps3420_Reset_Clear); //clear reset
/* the following code is an example code provide by micronas just for test MPS34xx
dev_msp3420DemodWrite(0x0020,0x0003);//<0x84 0x10 0x00 0x20 0x00 0x03> # STANDARD_SEL
dev_msp3420DemodWrite(0x0030,0x6098);//<0x84 0x10 0x00 0x30 0x60 0x98> # MODUS
dev_msp3420DspWrite(0x0000,0x6600); //<0x84 0x12 0x00 0x00 0x73 0x00> # VOL_MAIN
dev_msp3420DspWrite(0x0006,0x7300); //<0x84 0x12 0x00 0x06 0x73 0x00> # VOL_AUX
dev_msp3420DspWrite(0x0007,0x7301); //<0x84 0x12 0x00 0x07 0x73 0x01> # VOL_SCART1
dev_msp3420DspWrite(0x0008,0x0020); //<0x84 0x12 0x00 0x08 0x00 0x20> # SRC_MAT_MAIN
dev_msp3420DspWrite(0x0009,0x0020); //<0x84 0x12 0x00 0x09 0x00 0x20> # SRC_MAT_AUX
dev_msp3420DspWrite(0x000a,0x0020); //<0x84 0x12 0x00 0x0a 0x00 0x20> # SRC_MAT_SCART1
dev_msp3420DspWrite(0x000b,0x0020); //<0x84 0x12 0x00 0x0b 0x00 0x20> # SRC_MAT_I2S
dev_msp3420DspWrite(0x000c,0x0020); //<0x84 0x12 0x00 0x0c 0x00 0x20> # SRC_MAT_QPEAK
dev_msp3420DspWrite(0x000d,0x7f00); //<0x84 0x12 0x00 0x0d 0x19 0x00> # PRE_SCART
dev_msp3420DspWrite(0x000e,0x2403); //<0x84 0x12 0x00 0x0e 0x24 0x03> # PRE_FM_MATRIX
dev_msp3420DspWrite(0x0010,0x5a00); //<0x84 0x12 0x00 0x10 0x5a 0x00> # PRE_NICAM
dev_msp3420DspWrite(0x0013,0x0c80); //<0x84 0x12 0x00 0x13 0x0c 0x80> # ACB_REG
dev_msp3420DspWrite(0x0040,0x7301); //<0x84 0x12 0x00 0x40 0x73 0x01> # VOL_SCART2
dev_msp3420DspWrite(0x0041,0x0020); //<0x84 0x12 0x00 0x41 0x00 0x20> # SRC_MAT_SCART2
dev_msp3420DspWrite(0x0069,0xfa00); //<0x84 0x12 0x00 0x69 0xfa 0x00> # MDB_LIM
dev_msp3420DspWrite(0x006b,0x0a00); //<0x84 0x12 0x00 0x6b 0x0a 0x00> # MDB_LP
dev_msp3420DspWrite(0x006c,0x0a00); //<0x84 0x12 0x00 0x6c 0x0a 0x00> # MDB_HP
//2005-06-17 add by liuyong for debug */
// Automatic Sound Select, Status change indication.detected 4.5 MHz carrier is interpreted as:standard M (BTSC) for USA
dev_msp3420DemodWrite(0x0030,0x7003); //Modus
dev_msp3420DemodWrite(0x0020,0x0001); // Standard Select----Enable Automatic Standard Detection
dev_msp3420DspWrite(0x0000,0x7f00); // Volume LoudSpeaker Register 0db, clipping mode is set to reduce volume? extra Volume Increase is set to 0db
dev_msp3420DspWrite(0x0001,0x0001); // Balance
dev_msp3420DspWrite(0x0002,0x0800); // Bass
dev_msp3420DspWrite(0x0003,0x0800); // Treble
dev_msp3420DspWrite(0x0004,0x0600); //Loudness
dev_msp3420DspWrite(0x0005,0x0000); //Spatial
dev_msp3420DspWrite(0x000e,0x7f03); //FM/AM Prescale: 100 kHz FM deviation, FM Matrix Modes: sound A mono
dev_msp3420DspWrite(0x0010,0x7f00); //NICAM Prescale: 9 dB gain
dev_msp3420DspWrite(0x0013,0x0100);//ACB Register: mute DSP input, mute SCART1 output, mute SCART2 output
dev_msp3420DspWrite(0x0020,0x0000);//Tone control mode---Treble/Bass active
dev_msp3420DspWrite(0x002d,0x0000);// Subwoofer corner frequency
//-----headphone start-----------------
dev_msp3420DspWrite(0x0030,0x0001);// Balance headphone
dev_msp3420DspWrite(0x0031,0x0000);// Bass headphone
dev_msp3420DspWrite(0x0032,0x0000);// Treble headphone
dev_msp3420DspWrite(0x0033,0x0600);// Loudness headphone
//-----headphone end-----------------
dev_msp3420DspWrite(0x0069,0xf000);//MDB Amplitude Limit:
dev_msp3420DspWrite(0x006a,0x0d00);//MDB Harmonic content
dev_msp3420DspWrite(0x006b,0x0c00);//MDB Low Pass Corner Frequency: 100 hz for TV
dev_msp3420DspWrite(0x006c,0x0700);//MDB High Pass Corner Frequency: 100hz for TV
dev_msp3420DspWrite(0x000d,0x3300); //SCART Input Prescale: 0 dB gain
dev_msp3420DspWrite(0x000d,0x3300);//Add by Mark for reading of 3410
//rdata1 = dev_msp3420DspRead(0x000d);
//dev_msp3420DspWrite(0x000d,0x9900);
//rdata1 = dev_msp3420DspRead(0x000d);
StoredAudioData.InType = gmd_AUDIO_INTYPE_TUNER;
/*add by mark for test select input*/
//dev_msp3420DspWrite(0x000d,0x3300);
//dev_msp3420DspWrite(0x0008,0x0220); //should be 0x0200 for scart2
//dev_msp3420DspWrite(0x0013,0x0000);//modefid by Mark for select sart1 input
//dev_msp3420DspWrite(0x000d,0x3300);
//dev_msp3420DspWrite(0x0008,0x0220); //should be 0x0200 for scart2
//dev_msp3420DspWrite(0x0013,0x0020);
//tvpAudCommand(TVP_AUD_PLAY, TVP_AUD_UNMUTE);
//dev_msp3420DspWrite(0x000d,0x3300);
//dev_msp3420DspWrite(0x0008,0x0220); //should be 0x0200 for scart2
//while(1)
//{
//dev_msp3420DspWrite(0x000d,0x3300);
//rdata1 = dev_430Read();
//rdata1 = dev_430Read();
//rdata1 = dev_msp3420DspRead(0x000d);
//dev_msp3420DspWrite(0x000d,0x9900);
//rdata1 = dev_msp3420DspRead(0x000d);
//}
}
/*******************************************************************************
* @RoutineName:: dev_msp3420SetInputSelect
*
* @Description:: Audio channel switch
*
* @Input :: (none scart1 scart2 dvi ...)
*
* @Output :: none
*
* @Return :: none
********************************************************************************/
void dev_msp3420SetInputSelect(BYTE B_input)
{
StoredAudioData.port = B_input;
switch (StoredAudioData.port)
{
case gmd_AUDIO_INTYPE_NONE:
dev_msp3420DspWrite(0x000d,0x3300);
dev_msp3420DspWrite(0x0000,0x0000);//Volume=0, so mute;
break;
case gmd_AUDIO_INTYPE_CVBS: // Scart1 -- Need Modify
dev_msp3420DspWrite(0x000d,0x3300);
dev_msp3420DspWrite(0x0008,0x0220); //should be 0x0200 for scart2
dev_msp3420DspWrite(0x0013,0x0000);//modefid by Mark for select sart1 input
// Set Scart output according to the input
break;
case gmd_AUDIO_INTYPE_YPBPR: // Scart1 -- Need Modify
dev_msp3420DspWrite(0x000d,0x3300);//explain by Mark,Defines the input prescale value for the analog SCART input signal
dev_msp3420DspWrite(0x0008,0x0220); //should be 0x0200 for scart2
dev_msp3420DspWrite(0x0013,0x0200);//modefid by Mark for select sart2 input
// Set Scart output according to the input
break;
case gmd_AUDIO_INTYPE_AVI: // Scart1
dev_msp3420DspWrite(0x000d,0x3300);
dev_msp3420DspWrite(0x0008,0x0220); //should be 0x0200 for scart2
dev_msp3420DspWrite(0x0013,0x0300);//modefid by Mark for select sart3 input
break;
case gmd_AUDIO_INTYPE_DVI: //Scart2
dev_msp3420DspWrite(0x000d,0x3300);
dev_msp3420DspWrite(0x0008,0x0220); //should be 0x0200 for scart2
dev_msp3420DspWrite(0x0013,0x0020);//modefid by Mark for select sart4 input
break;
case gmd_AUDIO_INTYPE_TUNER: //IF1
dev_msp3420DspWrite(0x0029,0x0200); //AVC ON
dev_msp3420DemodWrite(0x0030,0x1001); //Modulator:standard D/K1, D/K2, D/K3, or D/K NICAM,,on: Automatic Sound Select;
dev_msp3420DemodWrite(0x0020,0x0001); //Standard Select=>start Automatic Standard Detection;
dev_msp3420DspWrite(0x000E, 0x4203); //Prescale FM/AM
dev_msp3420DspWrite(0x0008,0x0020); // 00:FM or AM;20:Stereo
break;
default:
//dev_msp3410DspWrite(0x0008,0x0020);
break;
}
}
//******************************************************************************
// FUNCTION : BYTE dev_msp3410GetLoudness(gmt_AUDIO_CHANNEL channel)
// USAGE : this function gets the user loudness setting of a channel
// INPUT : hp or ls channel
// OUTPUT : None
// GLOBALS : None
// USED_REGS : None
//******************************************************************************
BYTE dev_msp3410GetLoudness(void)
{
return StoredAudioData.Loudness;
}
//******************************************************************************
// FUNCTION : void dev_msp3410SetBalance(gmt_AUDIO_CHANNEL channel,BYTE bal)
// USAGE : this fn sets the Balance of a channel
// INPUT : hp or ls channel, Balance value
// OUTPUT : None
// GLOBALS : None
// USED_REGS : None
//******************************************************************************
void dev_msp3410SetBalance(BYTE Balance)
{
//BYTE Balance; //hgh 05-02-16
Balance=Balance*24/32; // msp3410 balance range: 0-24
if (Balance > 24)
{
return;
}
//msg_msp3410("Set msp3410 Balance: the balance is %d",Balance);
StoredAudioData.Balance = Balance;
//msg_msp3410("Set msp3410 Balance: %x",Cfg_BalanceTable[Balance]);
dev_msp3420DspWrite(0x0001,Cfg_BalanceTable[Balance]);
//dev_msp3420DspWrite(0x0001,0x0000); //hgh 05-02-27//modification by Mark
}
//******************************************************************************
// FUNCTION : BYTE dev_msp3410GetBalance(gmt_AUDIO_CHANNEL channel)
// USAGE : this function gets the user Balance setting of a channel
// INPUT : hp or ls channel
// OUTPUT : None
// GLOBALS : None
// USED_REGS : None
//******************************************************************************
BYTE dev_msp3410GetBalance(void)
{
return StoredAudioData.Balance;
}
//******************************************************************************
// FUNCTION : void dev_msp3410SetBass(gmt_AUDIO_CHANNEL channel,BYTE bass)
// USAGE : this fn sets the bass of a channel
// INPUT : hp or ls channel, bass value
// OUTPUT : None
// GLOBALS : None
// USED_REGS : None
//******************************************************************************/
void dev_msp3410SetBass(BYTE B_bass)
{
BYTE Bass;
Bass=B_bass*24/32;//msp3410 Bass Range:0-25
if (Bass > 24)
{
return;
}
StoredAudioData.Bass = Bass;
//msg_msp3410("Set msp3410 Bass: %x",Cfg_BassTrebleTable[Bass]);
dev_msp3420DspWrite(0x0002,Cfg_BassTrebleTable[Bass]);
}
//******************************************************************************
// FUNCTION : BYTE dev_msp3410GetTreble(gmt_AUDIO_CHANNEL channel)
// USAGE : this function gets the user Treble setting of a channel
// INPUT : hp or ls channel
// OUTPUT : None
// GLOBALS : None
// USED_REGS : None
//******************************************************************************
BYTE dev_msp3410GetTreble(void)
{
return StoredAudioData.Treble;
}
//******************************************************************************
// FUNCTION : void dev_msp3410SetTreble(gmt_AUDIO_CHANNEL channel,BYTE treb)
// USAGE : this fn sets the treble of a channel
// INPUT : hp or ls channel, treble value
// OUTPUT : None
// GLOBALS : None
// USED_REGS : None
//******************************************************************************
void dev_msp3410SetTreble(BYTE treb)
{
BYTE Treble;
Treble=treb*24/32; // msp3410 treble range: 0-24
if (Treble > 24)
{
return;
}
StoredAudioData.Treble = Treble;
//msg_msp3410("Set msp3410 Treble: %x",Cfg_BassTrebleTable[Treble]);
dev_msp3420DspWrite(0x0003,Cfg_BassTrebleTable[Treble]);
}
/*******************************************************************************
* @RoutineName:: dev_msp3410VolumeControl
*
* @Description:: control volume of 3410
*
* @Input :: none
*
* @Output :: none
*
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -