📄 sta013.c
字号:
unsigned char Iic_Read(void)
{
unsigned char a;
unsigned char b;
for(a=8;a!=0;a--)
{
b<<=1;
IIC_SCL_HIG();
DELAY1();
if(IIC_SDA){b|=1;}
IIC_SCL_LOW();
DELAY1();
}
return(b);
}
void Iic_Byte_Write(unsigned char address,unsigned char dat)
{
Iic_Star();
Iic_Write(0x86); //选中设备地址
Iic_Write(address); //选择寄存器地址
Iic_Write(dat); //写入数据
Iic_Stop();
}
unsigned char Iic_Byte_Read(unsigned char address)
{
unsigned char dat;
Iic_Star();
Iic_Write(0x86);
Iic_Write(address);
Iic_Star();
Iic_Write(0x87);
DDRD&=0xdf;
dat=Iic_Read();
DDRD|=0x20;
Iic_Stop();
return dat;
}
//*************************************************************
//串行数据流出
//
void STA013DownloadSetUp(void)
{
unsigned int i;
unsigned char reg, dat;
i=0;
do
{
reg = STA013_SetUp[i++];
dat = STA013_SetUp[i++];
Iic_Byte_Write(reg, dat); //下载配置
}while(reg != 0xff); //寄存器地址为0xff则为结束
}
unsigned char STA013Init(void)
{
DDRD|=0xe0;
DDRA|=0x80;
DDRB&=0xef; //STA_REQ IIC_SDA_R
PORTB|=0x8;
pBuf=0;
F_DEC=0;
VOL=0x012;
Iic_Stop();
DELAY1();DELAY1();DELAY1();DELAY1();DELAY1();
if(Iic_Byte_Read(STA_REG_IDENT) != STA_IDENT)
{
if(Iic_Byte_Read(STA_REG_IDENT) != STA_IDENT)
{
return 1;
}
//return(Iic_Byte_Read(STA_REG_IDENT));
}
STA013DownloadSetUp(); //set config
STA013SetDec(); // sta Dec
STA013SetTone(0x0);
STA013SetBass(0);
STA013SetTrenb(0);
Iic_Byte_Write(STA_REG_RUN, 0x00);
Iic_Byte_Write(STA_REG_PLAY, 0x00);
Iic_Byte_Write(STA_REG_SOFT_RESET, 0x01);
return 0;
}
//
void STA013SetDec(void)
{
// Soft reset
Iic_Byte_Write(STA_REG_SOFT_RESET, 0x01);
Iic_Byte_Write(STA_REG_SOFT_RESET, 0x00);
// Mute and configure DAC output
Iic_Byte_Write(STA_REG_MUTE, 0x01);
Iic_Byte_Write(STA_REG_PCMDIVIDER, 0x01); // 32-bit mode, O_FAC = 256
Iic_Byte_Write(STA_REG_PCMCONF, 0x31); // 18-bit mode & more
// Configure PLL for MP3 rates
Iic_Byte_Write(STA_REG_PLLFRAC_441_H, 0x67);
Iic_Byte_Write(STA_REG_PLLFRAC_441_L, 0x77);
Iic_Byte_Write(STA_REG_PLLFRAC_H, 0xbb);
Iic_Byte_Write(STA_REG_PLLFRAC_L, 0x3a);
Iic_Byte_Write(STA_REG_MFSDF_441, 0x10);
Iic_Byte_Write(STA_REG_MFSDF, 0x0F);
// Configure interface polarities, etc
Iic_Byte_Write(STA_REG_PLLCTL_2, 0x0C);
Iic_Byte_Write(STA_REG_PLLCTL_3, 0x00);
Iic_Byte_Write(STA_REG_PLLCTL_1, 0xA1);
Iic_Byte_Write(STA_REG_SCLK_POL, 0x00); // data sampled on rising edge
Iic_Byte_Write(STA_REG_REQ_POL, 0x01); // REQ line active high
Iic_Byte_Write(STA_REG_DATA_REQ_ENABLE, 0x04);
Iic_Byte_Write(STA_REG_PLLCTL_1, 0xA1);
//设置低音增益
//Iic_Byte_Write(STA_REG_BASS_FREQUENCY_LOW, 200&256);
//Iic_Byte_Write(STA_REG_BASS_FREQUENCY_HIGH, 200/256);
//设置高音增益
//Iic_Byte_Write(STA_REG_TREBLE_FREQUENCY_LOW, 3000&256);
//Iic_Byte_Write(STA_REG_TREBLE_FREQUENCY_HIGH, 3000/256);
//Iic_Byte_Write(STA_REG_BASS_ENHANCE,0);
//Iic_Byte_Write(STA_REG_TREBLE_ENHANCE,0);
}
void STA013StopDec(void)
{
// mute output
Iic_Byte_Write(STA_REG_RUN, 0x00);
Iic_Byte_Write(STA_REG_PLAY, 0x01);
Iic_Byte_Write(STA_REG_MUTE, 0x01);
// soft reset
Iic_Byte_Write(STA_REG_SOFT_RESET, 0x01);
Iic_Byte_Write(STA_REG_SOFT_RESET, 0x00);
Mp3Start=0;
}
void STA013StarDec(void)
{
STA013SetDec();
Iic_Byte_Write(STA_REG_RUN, 0x01);
Iic_Byte_Write(STA_REG_PLAY, 0x01);
Iic_Byte_Write(STA_REG_MUTE, 0x00);
STA013SetTone(VOL); //设置默认音量
Mp3Start=1;
}
void STA013VOL(void)
{
STA013SetTone(VOL);
}
void STA013PauseDec(void)
{
Iic_Byte_Write(STA_REG_MUTE, 0x01);
Iic_Byte_Write(STA_REG_PLAY, 0x00);
Mp3Start=0;
}
void STA013ResumeDec(void)
{
Iic_Byte_Write(STA_REG_PLAY, 0x01);
Iic_Byte_Write(STA_REG_MUTE, 0x00);
}
void STA013SetTone(unsigned char ToneAtten)
{
Iic_Byte_Write(STA_REG_TONE_ATTEN,ToneAtten);
}
void STA013SetBass(unsigned char BassEnhance)
{
Iic_Byte_Write(STA_REG_BASS_ENHANCE,BassEnhance);
}
void STA013SetTrenb(unsigned char TrenbleEnhance)
{
Iic_Byte_Write(STA_REG_TREBLE_ENHANCE,TrenbleEnhance);
}
//*********************************************************MP3流 输出
unsigned char DataStrBit( void) //串行数据流 SPI
{
unsigned char as;
unsigned char bs;
if(!STA_REQ){return(0);}
while(STA_REQ)
{
if(!F_DEC){as=FILE_DATA_BUF[pBuf]; }
else {as=FILE_DATA_BUF1[pBuf];}
//Out Mp3 8 Bit
for(bs=8;bs!=0;bs--)
{
//8
if(as&0x80){STA_SDI_HIG();}
else {STA_SDI_LOW();}
STA_SCL_HIG();
STA_SCL_LOW();
as<<=1;
}
//Out Mp3 8 Bit
pBuf++;
if(pBuf&0xfe00)
{
pBuf=0;
F_Read=1;
if(F_DEC){F_DEC=0;}//缓冲区切换
else {F_DEC=1;}
return(2); //数据请求
}
}
return(1);
}
//*****************************************************
unsigned char StrBitFlash( void) //串行数据流 Flash SPI
{
unsigned char a;
unsigned char b;
if(!STA_REQ){return(0);}
while(STA_REQ)
{
//LcdOFF();
a=Mp3[pBuf];
for(b=8;b!=0;b--)
{
if(a&0x80){STA_SDI_HIG();}
else {STA_SDI_LOW();}
STA_SCL_HIG();
STA_SCL_LOW();
a<<=1;
}
pBuf++;
if(pBuf>550*16){pBuf=0;}
}
return(1);
}
//******************************************************************************
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -