📄 iic.c
字号:
const Word Bass_Data[] =
{
// 0x9e40, 0xa280, 0xa740, 0xac40, 0xb180,
0xb740, 0xbd40, 0xc3c0, 0xca40, 0xd180,
0xd8c0, 0xe040, 0xe800, 0xefc0, 0xf7c0,
0x0000,
0x0800, 0x1000, 0x17c0, 0x1f80, 0x2700,
0x2e40, 0x3580, 0x3c00, 0x4280, 0x4880,
// 0x4e40, 0x5380, 0x5880, 0x5d40, 0x6180,
};
const Word Treble_Data[] =
{
// 0xb2c0, 0xbb40, 0xc180, 0xc6c0, 0xcbc0,
0xd040, 0xd500, 0xd980, 0xde00, 0xe280,
0xe7e0, 0xec00, 0xf0c0, 0xf5c0, 0xfac0,
0x0000,
0x0540, 0x0ac0, 0x1040, 0x1600, 0x1c00,
0x2200, 0x2840, 0x2ec0, 0x3540, 0x3c00,
// 0x42c0, 0x49c0, 0x5180, 0x5840, 0x5f80
};
//--------------------------------------------------------------------------
void IicDelay (void)
{
IicData = IicData;
IicData = IicData;
}
/*
//--------------------------------------------------------------------------
void IicStart (void)
{
IicClk = 1;
IicDelay();
IicData = 0;
IicDelay();
IicClk = 0;
}
//--------------------------------------------------------------------------
void IicStop (void)
{
IicData = 0;
IicClk = 1;
IicDelay();
IicData = 1;
IicDelay();
IicDelay();
}
*/
//--------------------------------------------------------------------------
void IicStart (void)
{
IicDelay();
IicClk = 1;
IicData = 1;
IicDelay();
IicData = 0;
IicDelay();
IicClk = 0;
IicDelay();
}
//--------------------------------------------------------------------------
void IicStop (void)
{
IicDelay();
IicClk = 1;
IicData = 0;
IicDelay();
IicData = 1;
IicDelay();
}
/*
void IicStart (void)
{
IicDelay();
IicClk = 1;
IicDelay();
IicData = 1;
IicDelay();
IicData = 0;
IicDelay();
IicClk = 0;
}
void IicStop (void)
{
IicDelay();
IicClk = 1;
IicDelay();
IicData = 0;
IicDelay();
IicData = 1;
IicDelay();
IicClk = 0;
}
*/
//--------------------------------------------------------------------------
//#define IicBit(x) IicData = x; IicDelay(); IicClk = 1; IicDelay(); IicDelay(); IicClk = 0;
//void IicBit(Byte x)
void IicBit(Bit x)
{
IicDelay();
IicClk = 0;
IicData = x;
IicDelay();
IicClk = 1;
IicDelay();
IicClk = 0;
IicDelay();
}
void IicByte (Byte dt)
{
// Byte i;
IicBit (dt & 0x80);
IicBit (dt & 0x40);
IicBit (dt & 0x20);
IicBit (dt & 0x10);
IicBit (dt & 0x08);
IicBit (dt & 0x04);
IicBit (dt & 0x02);
IicBit (dt & 0x01);
// Ack
IicClk = 0;
IicData = 1;
IicDelay();
IicClk = 1;
IicDelay();
while(~IicClk);
IicClk = 0;
IicDelay();
I2C_Error=0;
/*
for( i=0 ; i<10 ; i++)
{
if(~IicData)
{
IicClk = 0;
IicDelay();
return;
}
}
while(~IicClk);
IicStop();
I2C_Error=1;
*/
/*
IicClk = 0;
IicDelay();
I2C_Error=0;
*/
/*
Bit IicErr;
do
{
IicBit (dt & 0x80);
IicBit (dt & 0x40);
IicBit (dt & 0x20);
IicBit (dt & 0x10);
IicBit (dt & 0x08);
IicBit (dt & 0x04);
IicBit (dt & 0x02);
IicBit (dt & 0x01);
// IicBit (1); // Ack
// IicDelay();
// IicDelay();
// IicDelay();
// Ack
IicClk = 0;
IicData = 1;
IicDelay();
IicClk = 1;
IicDelay();
// Red_Light(1,1);
while(!IicClk);
// Red_Light(1,1);
if(IicData)
{
IicClk = 0;
IicData = 0;
IicClk = 1;
IicDelay();
IicData = 1;
IicDelay();
IicErr = 1;
}
else
{
IicErr = 0;
}
}
while(IicErr);
IicClk = 0;
I2C_Error=0;
*/
}
void Volume_Adj()
{
// DAC3550A control
// Delay(100);
do{
I2C_Error=0;
IicStart();
IicByte (0x9A);
IicByte (0xC2);
if(Volume>10)
{
IicByte (Volume+10); // max 0x38 (d'56')
IicByte (Volume+10);
}
else
{
IicByte (Volume*2); // max 0x38 (d'56')
IicByte (Volume*2);
}
IicStop();
}while(I2C_Error);
// Delay(100);
}
void Volume_Mute()
{
// DAC3550A control
// Delay(10);
do{
I2C_Error=0;
IicStart();
IicByte (0x9A);
IicByte (0xC2);
IicByte (0); // max 0x38 (d'56')
IicByte (0);
IicStop();
}while(I2C_Error);
// Delay_100ms(1);
}
void Bass_Adj()
{
do{
I2C_Error=0;
IicStart();
IicByte(0x3A);
IicByte(0x68);
IicByte(0x96); // 0x9 : write register
IicByte(0xb0); // 0xe6 : Startup configration
IicByte(Bass_Data[Bass]/256);
IicByte(Bass_Data[Bass]%256);
IicStop();
}while(I2C_Error);
}
void Treble_Adj()
{
do{
I2C_Error=0;
IicStart();
IicByte(0x3A);
IicByte(0x68);
IicByte(0x96); // 0x9 : write register
IicByte(0xf0); // 0xe6 : Startup configration
IicByte(Treble_Data[Treble]/256);
IicByte(Treble_Data[Treble]%256);
IicStop();
}while(I2C_Error);
}
void Set_EQ_Mode(Byte mode)
{
Red_Off();
Green_Off();
/*
#define Normal_Mode() EQ_Mode_Change(7, 7, NORMAL_MODE)
#define Bass_Up_Mode() EQ_Mode_Change(13, 5, BASS_UP_MODE)
#define Treble_Up_Mode() EQ_Mode_Change(5, 13, TREBLE_UP_MODE)
#define Bass_Treble_Up_Mode() EQ_Mode_Change(13, 13, BASS_TREBLE_UP_MODE)
*/
switch(mode)
{
case NORMAL_MODE:
Bass = 7; Treble = 7;
break;
case BASS_UP_MODE:
Bass = 13; Treble = 5;
break;
case TREBLE_UP_MODE:
Bass = 5; Treble = 13;
break;
case BASS_TREBLE_UP_MODE:
Bass = 13; Treble = 13;
break;
default: break;
}
Bass_Adj();
Treble_Adj();
EQ_Mode = mode;
}
void Init_IIC()
{
// VDD_On();
// Delay_100ms(5);
// while(!PUP_Check);
// while(!PUP_Check);
// while(!P13);
// Delay_Sec(1);
IicData = 1;
IicClk = 1;
Volume_Mute();
WSEN_Off();
Delay_100ms(1);
// Delay_Sec(2);
WSEN_On();
Delay_100ms(1);
// Delay_Sec(2);
// Green_Light(1,5);
/*
WSEN_Off();
Delay_10ms(2);
WSEN_On();
Delay_10ms(2);
*/
IicData = 1;
IicClk = 1;
IicDelay();
// DC-DC Control
do{
I2C_Error=0;
IicStart();
IicByte(0x3A);
IicByte(0x68);
IicByte(0x98); // Resister
IicByte(0xe0); //
// IicByte(0x03);
// IicByte(0xc0);
IicByte(0x00);
IicByte(0x00);
IicStop();
}while(I2C_Error);
//-------------------------
WSEN_Off();
Delay_100ms(1);
WSEN_On();
Delay_100ms(1);
// Mode2();
/*
IicStart();
IicByte(0x3A);
IicByte(0x68);
IicByte(0x9E); // 0x9 : write register
IicByte(0x60); // 0xe6 : Startup configration
IicByte(0x00);
IicByte(0x00);
IicStop();
IicStart();
IicByte(0x3A);
IicByte(0x68);
IicByte(0x9C); // 0x9 : write register
IicByte(0x50); // 0xc5 : Left chanel
IicByte(0x00); // PI5 -> 0 : 32bit
IicByte(0x00);
IicStop();
IicStart();
IicByte(0x3A);
IicByte(0x68);
IicByte(0x9C);
IicByte(0x60); // 0xc6 : Right chanel
IicByte(0x00);
IicByte(0x00);
IicStop();
IicStart(); // run
IicByte (0x3A);
IicByte (0x68);
IicByte (0x0F);
IicByte (0xCD);
IicStop();
//
IicStart();
IicByte (0x3A);
IicByte (0x68);
IicByte (0xA0); //write D0 memory
IicByte (0x00);
IicByte (0x00); // length
IicByte (0x01);
IicByte (0x03); // address : output configration
IicByte (0x2F);
IicByte (0x00); // data
IicByte (0x00); //
IicByte (0x00);
IicByte (0x00);
IicStop();
IicStart(); // run
IicByte (0x3A);
IicByte (0x68);
IicByte (0x04);
IicByte (0x75);
IicStop();
//
IicStart();
IicByte (0x3A);
IicByte (0x68);
IicByte (0xB0); // write D1 memory
IicByte (0x00);
IicByte (0x00); // length
IicByte (0x04);
IicByte (0x07); // address : bass-band Volume
IicByte (0xF8);
IicByte (0x00);
IicByte (0x00);
IicByte (0x00);
IicByte (0x08);
IicByte (0x00);
IicByte (0x00);
IicByte (0x00);
IicByte (0x00);
IicByte (0x00);
IicByte (0x00);
IicByte (0x00);
IicByte (0x00);
IicByte (0x00);
IicByte (0x00);
IicByte (0x00);
IicByte (0x08);
IicStop();
*/
/*
// Mute
IicStart();
IicByte(0x3A);
IicByte(0x68);
IicByte(0x9a); // 0x9 : write register
IicByte(0xa1); //
IicByte(0x00);
IicByte(0x00);
IicStop();
*/
}
void Init_EQ()
{
Volume_Mute();
MMU_Reset();
DMA_Mode_Off();
Flash_Mem_Read(0,0);
if(Read_MMU(0)==FORMAT_MARK)
{
Volume = Read_MMU(1);
if(Volume>MAX_VOLUME) Volume = DEFAULT_VOLUME;
EQ_Mode = Read_MMU(2);
if(EQ_Mode>BASS_TREBLE_UP_MODE) EQ_Mode = NORMAL_MODE;
}
else
{
Volume = DEFAULT_VOLUME;
EQ_Mode = NORMAL_MODE;
}
Set_EQ_Mode(EQ_Mode);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -