📄 jack.c
字号:
#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 + -