📄 sta.c
字号:
//if(sta013_mode == ADPCMPLAY)
STA_WriteReg(STA_REG_BASS_ENHANCE,0);
break;
case STA_TIMBRE_SPEECH://语音
STA_WriteReg(STA_REG_TREBLE_FREQUENCY_LOW, 0x40);
STA_WriteReg(STA_REG_TREBLE_FREQUENCY_HIGH,0x1f); //4khz
//if(STA013_Mode == CHIP_ADPCMPLAY)
STA_WriteReg(STA_REG_TREBLE_ENHANCE,0);
STA_WriteReg(STA_REG_BASS_FREQUENCY_LOW, 0x7d); //125hz
STA_WriteReg(STA_REG_BASS_FREQUENCY_HIGH, 0);
//if(sta013_mode == ADPCMPLAY)
STA_WriteReg(STA_REG_BASS_ENHANCE,-8);
break;
case STA_TIMBRE_NORMAL://普通
default:
STA_WriteReg(STA_REG_TREBLE_FREQUENCY_LOW, 0x70);
STA_WriteReg(STA_REG_TREBLE_FREQUENCY_HIGH,0x17); //16khz
//if(STA013_Mode == CHIP_ADPCMPLAY)
STA_WriteReg(STA_REG_TREBLE_ENHANCE,0);
STA_WriteReg(STA_REG_BASS_FREQUENCY_LOW, 0x1f); //31hz
STA_WriteReg(STA_REG_BASS_FREQUENCY_HIGH, 0);
//if(sta013_mode == ADPCMPLAY)
STA_WriteReg(STA_REG_BASS_ENHANCE,0);
break;
}
} */
/***********************************************************************************
函数:STA_StopDecoder()
功能:停止解压
参数:
返回:
************************************************************************************/
void STA_StopDecoder()
{
//静音
STA_WriteReg(STA_REG_MUTE, 0x01);
//软件复位
STA_WriteReg(STA_REG_SOFT_RESET, 0x01);
STA_WriteReg(STA_REG_SOFT_RESET, 0x00);
}
/***********************************************************************************
函数:STA_PauseDecoder()
功能:暂停解压
参数:
返回:
************************************************************************************/
void STA_PauseDecoder()
{
//静音
STA_WriteReg(STA_REG_MUTE, 0x01);
//停止
STA_WriteReg(STA_REG_PLAY, 0x00);
}
/***********************************************************************************
函数:STA_ResumeDecoder()
功能:恢复解压
参数:
返回:
************************************************************************************/
void STA_ResumeDecoder()
{
//开始解压
STA_WriteReg(STA_REG_PLAY, 0x01);
//放音
STA_WriteReg(STA_REG_MUTE, 0x00);
}
/***********************************************************************************
函数:STA_SetHead()
功能:设置MP3 Header的相关寄存器
参数:
uchH:
uchM:
uchL:
返回:
************************************************************************************/
void STA_SetHead(unsigned char uchH,unsigned char uchM,unsigned char uchL)
{
//HEAD_H
STA_WriteReg(0x43,uchH);
//HEAD_M
STA_WriteReg(0x44,uchM);
//HEAD_L
STA_WriteReg(0x45,uchL);
}
/************************************************************************************
函数:STA_SetChannel()
功能:进行声道设置
参数:
uchChannel:声道参数
返回:
*************************************************************************************/
void STA_SetChannel(unsigned char uchChannel)
{
switch(uchChannel)
{
case STA_CHANNEL_LEFT: //左声道
STA_WriteReg(STA_REG_DRA,0xff);
STA_WriteReg(STA_REG_DLA,0);
STA_WriteReg(STA_REG_DRB,0xff);
STA_WriteReg(STA_REG_DLB,0);
break;
case STA_CHANNEL_RIGHT: //右声道
STA_WriteReg(STA_REG_DRA,0);
STA_WriteReg(STA_REG_DLA,0xff);
STA_WriteReg(STA_REG_DRB,0);
STA_WriteReg(STA_REG_DLB,0xff);
break;
case STA_CHANNEL_MIX: //混合声道
STA_WriteReg(STA_REG_DRA,0x0f);
STA_WriteReg(STA_REG_DLA,0x0f);
STA_WriteReg(STA_REG_DRB,0x0f);
STA_WriteReg(STA_REG_DLB,0x0f);
break;
case STA_CHANNEL_STEREO: //立体声
default:
STA_WriteReg(STA_REG_DRA,0);
STA_WriteReg(STA_REG_DLA,0);
STA_WriteReg(STA_REG_DRB,0xff);
STA_WriteReg(STA_REG_DLB,0xff);
break;
}
}
/************************************************************************************
函数:
功能:
参数:
返回:
*************************************************************************************/
unsigned char swapbits(unsigned char uchValue)
{
return uchValue >> 7
| (uchValue & 0x40) >> 5
| (uchValue & 0x20) >> 3
| (uchValue & 0x10) >> 1
| (uchValue & 0x08) >> 1
| (uchValue & 0x04) >> 3
| (uchValue & 0x02) >> 5
| uchValue << 7;
}
/************************************************************************************
函数:STA_SendToDecoder()
功能:向STA013发送MP3数据
参数:
pMp3Data:指向外部RAM的MP3数据指针
uiLen: MP3数据的长度
返回:
*************************************************************************************/
void STA_SendToDecoder(unsigned char xdata * pMp3Data,unsigned int uiLen)
{
unsigned int mp3ptr = 0;
short j = 0;
//设置MP3 Header相关的寄存器
//STA_SetHead(0x0b,0x42,0x40);
//方法1:直接通过SDI,SCKR传输
while(DATA_REQ && mp3ptr < uiLen)
{
for(j = 7;j >= 0;j--)
{
SCKR = 0;
SDI = (pMp3Data[mp3ptr] >> j) & 1;
SCKR = 1;
}
mp3ptr++;
}
/*
//方法2:通过的串口的模式0
SCON = 0;
for(;;)
{
while(DATA_REQ && TI)
{
TI = 0;
SBUF = swapbits(pMp3Data[mp3ptr++]);
}
//do anything others
}*/
}
/************************************************************************************
函数:sta_GetMP3Info()
功能:获取MP3的信息
参数:
puiBitrate:
puchSampFreq:
puchMode:
返回:
*************************************************************************************/
void sta_GetMP3Info(unsigned int *puiBitrate, unsigned char *puchSampFreq, unsigned char *puchMode)
{
unsigned char uchHeadL, uchHeadM, uchHeadH;
unsigned char uchMpegID, uchBitrateIndex, uchSampFreqIndex;
// get the MP3 header info
uchHeadH = STA_ReadReg(STA_REG_HEAD_H);
uchHeadM = STA_ReadReg(STA_REG_HEAD_M);
uchHeadL = STA_ReadReg(STA_REG_HEAD_L);
// IDex:ID is in head[20:19]
// 00 - MPEG2.5
// 01 - reserved
// 10 - MPEG2
// 11 - MPEG1
uchMpegID = (uchHeadH & 0x18) >> 3;
// sampling frequency is in head[11:10]
uchSampFreqIndex = ((uchHeadM & 0x0C)>>2) | (uchMpegID<<2);
// bitrate index is in head[15:12]
uchBitrateIndex = ((uchHeadM & 0xF0)>>4) | ((uchMpegID & 0x01)<<4);
//uchBitrateIndex = ((uchHeadM & 0xF0)>>4) | (1<<4);
// mode is in head[7:6]
// 00 - stereo
// 01 - joint stereo
// 10 - dual channel
// 11 - single channel (mono)
*puchMode = (uchHeadL & 0xC0)>>6;
// *puiBitrate = 2 * PRG_RDB( MP3_Bitrates + uchBitrateIndex );
// *puchSampFreq = PRG_RDB( MP3_SamplingFrequencies + uchSampFreqIndex );
/*
header = (unsigned long)sta_ReadReg(STA_REG_HEAD_H) << 16 |
(unsigned long)sta_ReadReg(STA_REG_HEAD_M) << 8 |
(unsigned long)sta_ReadReg(STA_REG_HEAD_L);
// hdr->word = l;
// hdr->emphasis = l & 0x03;
// hdr->isOriginal = (l >> 2) & 0x01;
// hdr->isCopyrighted = (l >> 3) & 0x01;
// hdr->modeExtension = (l >> 4) & 0x03;
// hdr->mode = (l >> 6) & 0x03;
// hdr->private = (l >> 8) & 0x01;
// hdr->padding = (l >> 9) & 0x01;
// hdr->frequencyIndex = (l >> 10) & 0x03;
// hdr->bitrateIndex = (l >> 12) & 0x0f;
// hdr->protection = (l >> 16) & 0x01;
// hdr->layer = (l >> 17) & 0x03;
// hdr->ID = (l >> 19) & 0x01;
// hdr->ID_ex = (l >> 20) & 0x01;
*/
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -