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

📄 jack.c

📁 LC72131 PLL C源程序
💻 C
📖 第 1 页 / 共 2 页
字号:



#include "jack.h"
//#include "nmscreen.h"
#if 0

//MSB first
void send_MSB(BYTE value)
{
	BYTE i;
	for(i=0;i<8;i++)
	{
		SET_GPIO_LOW(TUNER_CL);  //CLK=0;
		if(value&0x80)
		SET_GPIO_HI(TUNER_DA);
		else
		SET_GPIO_LOW(TUNER_DA);
	    I2cDelay(2);/* delay 2us */
		SET_GPIO_HI(TUNER_CL);  //CLK=1;
	    I2cDelay(2);
		SET_GPIO_LOW(TUNER_CL); //CLK = 0
	    I2cDelay(2);
		value=(value<<1);
	}                                                  
}

// LSB first
void send_LSB(BYTE value)
{
	BYTE i;
	for(i=0;i<8;i++)
	{
		if(value&0x01)
		SET_GPIO_HI(TUNER_DA);
		else
		SET_GPIO_LOW(TUNER_DA);
	    I2cDelay(2);
		SET_GPIO_HI(TUNER_CL);  //CLK=1;
	    I2cDelay(2);
		SET_GPIO_LOW(TUNER_CL); //CLK = 0
	    I2cDelay(2);
		value=(value>>1);
	}               
}
void mode1_send_24bit_data(void)
{
	BYTE temp;
	UINT16 data_to_send;
	SET_GPIO_LOW(TUNER_CE); //CE=0;                      //CE NORMALLY LOW
    I2cDelay(2);
	SET_GPIO_LOW(TUNER_CL);  //CLK=0;  // clk normal high
    I2cDelay(2);

	
	send_MSB(inmode1_start);   //mode1 address data
	SET_GPIO_HI(TUNER_CE); //CE=1;  //send data must high   
    I2cDelay(2);
	
	temp=mode1_send_data;
	send_LSB(temp);  //send freq data from lsb           
	temp=(mode1_send_data>>8);
	send_LSB(temp);             
	send_MSB(mode1_ctl_data);        //send ctl data from msb         
	
	SET_GPIO_LOW(TUNER_CE); //CE=0;  
    I2cDelay(2);

	
}  

//MSB first

void mode1_send_24bit_data(void)
{
	BYTE temp;
	UINT16 data_to_send;
	SET_GPIO_LOW(TUNER_CE); //CE=0;
	SET_GPIO_HI(TUNER_CL);  //CLK=1;
    I2cDelay(3);

	
	send_MSB(inmode1_start);   //mode1 address data
	SET_GPIO_HI(TUNER_CE); //CE=1;  //send data must high   
    I2cDelay(2);
	
	temp=mode1_send_data;
	send_LSB(temp);  //send freq data from lsb           
	temp=(mode1_send_data>>8);
	send_LSB(temp);             
	send_MSB(mode1_ctl_data);        //send ctl data from msb         
	
	SET_GPIO_LOW(TUNER_CE); //CE=0;  
    I2cDelay(2);

	
}  

void mode2_send_24bit_data(void)
{
	SET_GPIO_LOW(TUNER_CE); //CE=0;                      //CE NORMALLY LOW
    I2cDelay(2);
	SET_GPIO_LOW(TUNER_CL);  //CLK=0;  // clk normal high
    I2cDelay(2);

	send_MSB(inmode2_start);   //mode2 address data
	SET_GPIO_HI(TUNER_CE); //CE=1;  
    I2cDelay(2);
	//send the data from high to low,no change the order 
	send_MSB(mode2_send_data0);   
	send_MSB(mode2_send_data1);   
	send_MSB(mode2_send_data2);   
	
	SET_GPIO_LOW(TUNER_CE); //CE=0;  
    I2cDelay(2);
}     
#endif
//MSB first
void send_MSB(BYTE value)
{
	BYTE i;
	for(i=0;i<8;i++)
	{
		SET_GPIO_LOW(TUNER_CL);  //CLK=0;
	    I2cDelay(3);
		if(value&0x80)
		SET_GPIO_HI(TUNER_DA);
		else
		SET_GPIO_LOW(TUNER_DA);
	    I2cDelay(1);
		SET_GPIO_HI(TUNER_CL);  //CLK=1;
	    I2cDelay(3);
		value=(value<<1);
	}                                                 
}
// LSB first
void send_LSB(BYTE value)
{
	BYTE i;
	for(i=0;i<8;i++)
	{
		SET_GPIO_LOW(TUNER_CL);  //CLK=0;
	    I2cDelay(3);
		if(value&0x01)
		SET_GPIO_HI(TUNER_DA);
		else
		SET_GPIO_LOW(TUNER_DA);
	    I2cDelay(1);
		SET_GPIO_HI(TUNER_CL);  //CLK=1;
	    I2cDelay(3);
		value=(value>>1);
	}               
}

void mode1_send_24bit_data(void)
{
	BYTE temp;
	UINT16 data_to_send;
	SET_GPIO_LOW(TUNER_CE); //CE=0;
	//SET_GPIO_HI(TUNER_CL);  //CLK=1;  nomal high
    I2cDelay(3);

	
	send_MSB(inmode1_start);   //mode1 address data
	SET_GPIO_HI(TUNER_CE); //CE=1;  //send data must high   
    I2cDelay(3);
	
	temp=mode1_send_data;
	send_LSB(temp);  //send freq data from lsb           
	temp=(mode1_send_data>>8);
	send_LSB(temp);             
	send_MSB(mode1_ctl_data);        //send ctl data from msb         
	
	SET_GPIO_LOW(TUNER_CE); //CE=0;  
    I2cDelay(3);

	
}  

void mode2_send_24bit_data(void)
{
	SET_GPIO_LOW(TUNER_CE); //CE=0;                      //CE NORMALLY LOW
	SET_GPIO_LOW(TUNER_CL);  //CLK=0;  // clk normal high
    I2cDelay(2);

	send_MSB(inmode2_start);   //mode2 address data
	SET_GPIO_LOW(TUNER_CL); //CL=0;  
    I2cDelay(3);
    SET_GPIO_HI(TUNER_CE); //CE=1;  
    I2cDelay(3);
	//send the data from high to low,no change the order 
	send_MSB(mode2_send_data0);   
	send_MSB(mode2_send_data1);   
	send_MSB(mode2_send_data2);   
	
	SET_GPIO_LOW(TUNER_CE); //CE=0;  
    I2cDelay(3);
}     


void cmd_end(void)
{
    I2cDelay(2);
	SET_GPIO_HI(TUNER_CE); //CE=1;  
    I2cDelay(2);
	SET_GPIO_HI(TUNER_DA); //DATA=1;  
    I2cDelay(2);
	SET_GPIO_HI(TUNER_CL); //CLK=1;  
    I2cDelay(2);
}
void AM_FM_SELECT(void)
{
	
    if(am_fm_flag == 3) // am-->am_fm_flag = 1;
    {

		mode1_send_data=AM_REAL_DATA;
		
		SET_DVS(0); //DVS=0;                  // TWICE
		SET_SNS(0); //SNS=0;
		
		SET_R0(0); //R00=0;
		SET_R1(0); //R11=0;
		SET_R2(1); //R22=1;
		SET_R3(1); //R33=1;                  // 3K
		
		SET_XS(1); //7.2MHZ;

		// no use the IF counter if now data send
		//	SET_CTE(0); //CTE=0;
		//	SET_GT0(1); //GT0=1; //64MS
		//	SET_GT1(1); //GT1=1; 


		//SET_IO2(1); //not use
 		SET_IO2(0);   //high;  
		

		
		SET_BDSW2(1); //BDSW2=0;      BO1 FM = 0; AM = 1
		SET_IFSW(1);  //IFSW=1;       BO2 IF REQ,MUTE                
		SET_BDSW1(1); //BDSW1=1;     BO3 ST/MONO SW STERE = 1 MONO = 0

		
		//set the DO pin mode
		SET_DOC0(0); //DOC0=0;
		SET_DOC1(1); //DOC1=1;
		SET_DOC2(0); //DOC2=0;		//DO OUT
		
		//SET_UL0(0);  //UL0=0;
		SET_UL0(1);  //UL0=1;   	  
		SET_UL1(1);  //UL1=1;	  
		
		SET_DZ0(1);  //DZ0=1;
		SET_DZ1(1);  //DZ1=1;








		//below must set the 
	    SET_IOC1(1);  //output mode;
	    SET_IOC2(1);  //output mode;

		SET_TBC(0);  //SDC1=0;		  //disable time base     
		
		SET_DLC(0);  //DLC=0;  normal operation; 	
		
		SET_IFS(1); //IFS=1;                  //NORMAL HIGH
		
		SET_TEST0(0);
		SET_TEST1(0);
		SET_TEST2(0);
		
		SET_DNC(0); //DNC=0; must be set to 0;
    }
    else if(am_fm_flag == 4) //fm
    {
		
		mode1_send_data=FM_REAL_DATA;
		
		SET_DVS(1); //DVS=1;                  //TWICE
		SET_SNS(0); //SNS=0;
		
		SET_R0(1); //R00=1;                  // 25K
		SET_R1(1); //R11=1;
		SET_R2(0); //R22=0;
		SET_R3(0); //R33=0;
		
		SET_XS(1); //7.2MHZ;
		
		// no use the IF counter if now data send
		//	SET_CTE(0); //CTE=0;
		//	SET_GT0(1); //GT0=1; //64MS
		//	SET_GT1(1); //GT1=1; 




		//SET_IO2(1);   //no use
		SET_IO2(1);   //high;

		SET_BDSW2(0); //BDSW2=0;      BO1 FM = 0; AM = 1
		SET_IFSW(1);   //IFSW=1;       BO2 IF REQ,MUTE               
		SET_BDSW1(1); //BDSW1=1;     BO3 ST/MONO SW STERE = 1 MONO = 0

		
		
		
		SET_DOC0(0); //DOC0=0;
		SET_DOC1(1); //DOC1=1;
		SET_DOC2(0); //DOC2=0;		//DO OUT
		
		SET_UL0(1);  //UL0=1;
		SET_UL1(1);  //UL1=0;		//UNLOCK
		







	    SET_IOC1(1);  //output mode;
	    SET_IOC2(1);  //output mode;

		SET_DZ0(1);
		SET_DZ1(1);
		
		SET_TBC(0); //SDC1=0;		  //disable time base
		
		SET_DLC(0);
		
	     	 SET_IFS(1); //IFS=1;                  // NORMAL HIGH
			 
             SET_TEST0(0);
             SET_TEST1(0);
             SET_TEST2(0);
			 
             SET_DNC(0); //DNC=0; must be set to 0;
			 
    }
    
    mode2_send_24bit_data();
    mode1_send_24bit_data();
    cmd_end();    
    //I2cDelay(100);

}
UINT32 read_24bit_outup_data(void)
{
	BYTE i;
	UINT32 out_temp=0x00;

	SET_GPIO_LOW(TUNER_CE); //CE=0;
	I2cDelay(2);
	SET_GPIO_LOW(TUNER_CL); //CLK=0;  
	send_MSB(outmode_start);
	I2cDelay(2);
	SET_GPIO_HI(TUNER_CE); //CE=1;

	for(i=0;i<24;i++)
	{
		out_temp<<=1;
		SET_GPIO_HI(TUNER_CL); //CLK=1;  
		I2cDelay(2);
		if(TUNER_READ_DA)
		out_temp|=1;
		else
		out_temp|=0;
		SET_GPIO_LOW(TUNER_CL); //CLK=0;  
		I2cDelay(2);

	}
	return(out_temp);
}                                        


void Amautosearch( BYTE autosearch_status )
{
	BYTE looptime=0;
	UINT32 ldataup;
	if(am_fm_flag == 3)//am
	{
		while(1) //autosearch must rotation for ever
		{       	         	  
			
			if( autosearch_status)
			{
				//if(autosearch_flag!=1) 	  //up
				//	return;

				AM_TEMP_SHOW_DATA += 9; // 3*3k step
				AM_TEMP_DATA += 0x30; // 3*3k step
				AM_REAL_DATA = AM_TEMP_DATA;          
				SET_IFSW(0);  //IFSW, 0: mute, 1: receive mode
				
                //AM_FREQ_MAX  0x2b20 // 1620k
				//AM_FREQ_MIN  0x1440 // 522k
				
				if(AM_REAL_DATA>/*1620*/AM_FREQ_MAX)  //am max
				{
					AM_TEMP_SHOW_DATA =1620;//522;//AM_FREQ_MIN;
					AM_REAL_DATA=AM_FREQ_MAX;//AM_FREQ_MIN;
					break;
				}
			}
			else //if( autosearch_status)
			{
				//if(autosearch_flag!=2) 	  //down
				//	return;
				FM_TEMP_SHOW_DATA -= 9; // 3*3k step
                AM_TEMP_DATA -= 0x30;   //gap = 3; 3*3K step
				AM_REAL_DATA = AM_TEMP_DATA;
				SET_IFSW(0);  //IFSW=1;			             //mute               
				
				if(AM_REAL_DATA<AM_FREQ_MIN)//Am min
				{
					AM_TEMP_SHOW_DATA=522;//1620;
					AM_REAL_DATA=AM_FREQ_MIN;
					break;
				}
			}		 
				//AM_SHOW_DATA=AM_REAL_DATA;//in1_data12=tuner.ambak;      
				//AM_SHOW_DATA = AM_TEMP_SHOW_DATA;      
				Test_curr_AM(1,(BYTE)(AM_TEMP_SHOW_DATA/1000),(BYTE) ((AM_TEMP_SHOW_DATA%1000)/100),(AM_TEMP_SHOW_DATA%100));
			#if 0
			dly_tsk(500);
			SET_R0(0);// REF CLOCK: 3KHZ
			SET_R1(0);
			SET_R2(1);
			SET_R3(1);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -