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

📄 sta.c

📁 51控制STA013实现MP3音频解码
💻 C
📖 第 1 页 / 共 3 页
字号:
              //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 + -