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

📄 tidtv_msp34x0g.c

📁 ti的数字电视芯片 tvp9000的源码
💻 C
📖 第 1 页 / 共 3 页
字号:
//******************************************************************************

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 + -