原创 Work notes about VS1063A

2012-3-5 18:40 2046 14 14 分类: MCU/ 嵌入式

  // register name;   adder ;      value ;
#define SPI_MODE        0x0  
#define SPI_STATUS      0x1  
#define SPI_BASS        0x2  
#define SPI_CLOCKF      0x3  
#define SPI_DECODE_TIME 0x4   //RW 解码时间寄存器,正常解码是 里面是解码所用的时间,单位秒。
#define SPI_AUDATA      0x5   //RW 采样率和通道数寄存器。当正常解码是,里面显示的是采样率和通道。
#define SPI_WRAM        0x6  
#define SPI_WRAMADDR    0x7  
#define SPI_HDAT0       0x8   //
#define SPI_HDAT1       0x9   //
#define SPI_AIADDR      0xa  
#define SPI_VOL         0xb   //音量控制寄存器  最大值 ==0
#define SPI_AICTRL0     0xc   // 编码用  采样率8K~48K
#define SPI_AICTRL1     0xd   //人工设定编码增益或者设定自动增益。语音编码推荐用自动增益
#define SPI_AICTRL2     0xe   //在设定自动增益的情况下 最大的增益 1024(1)~64
//spi_aictrl2控制最大的增益,这个功能可能用在没有信号时对放大增益的限制。
//这个意思是:如果没有信号,放大增益太大的话会有白噪声进入到编码通道。

#define SPI_AICTRL3     0xf

/****************************************************/

union
{
struct
 {
 unsigned sm_diff:1;         //0 正常的同相音频
 unsigned sm_layer12:1;      // 0 不允许
 unsigned sm_reset:1;   //软件复位  1 复位
 unsigned sm_cancel:1;   //取消当前的文件解码  1 取消
 unsigned :1; 
 unsigned sm_tests:1;     //0---no  test;  1---- into SDI test mode;
 unsigned :1;   
 unsigned :1; 

 unsigned sm_dact:1;       //dclk的有效边缘,0  上升沿  1  下降沿
 unsigned sm_sdiord :1;    // 0  Msb在前
 unsigned sm_sdishare:1;  //0  不共享SPI片选
 unsigned sm_sdinew:1;  //1  本机模式
 unsigned sm_encode:1;   //1 录音激活
 unsigned :1;     // NO USE
 unsigned sm_line1:1;   // 0  MIC
 unsigned sm_clk_range:1;  // 0  12..13MHZ
 }bits;
 unsigned char bt[2];
 unsigned int lt;
}Vs1063_MODE;

//----------------------------------------------------------------------------------------

/*SPI_AICTRL3
//15   编解码模式  包含编码和解码 此位不能被忽略  set 1
//14  AEC enable
//13   uart tx enable ;选择SCL 还是 UART 输出。
//12  set 0
//11  暂停enable
//10  No RIFF WAV header inserted (or expected in codec mode)
//9   set 0
//8   set 0
// 4:7        编码格式
               0=1 IMA ADPCM,PCM,
               2= G.711
               3= G.711 A律
               4=支持G.722协议的ADPCM
               5= Ogg Vorbis格式
               6=  MP3               110
// 3    SET 0
// 2:0            0 ----联合立体声  0 00 
                  1 ---- 双声道  001
     2 --- 左通道  010
     3 --- 右通道  011
                  4 --- 单声道缩混   100
*/

 

/*SPI_WRAMADDR
  bits: 15,14 比特率模式
               0 = Quality Mode,
               1 = VBR,
               2 = ABR,
               3 = CBR
  bits: 13,12   比特乘法器
  bits: 11   特别的编码     SET 0
  bits: 10   limited frame length 有限帧长度设置位。 当编码设置为MP3时,流媒体可以SET 1
  bits: 9    内部使用 SET 0
  bits: 8:0;  0到511比特率的基地(或质量0到9,如果质量模式选择
*/

解码时,  HDAT1

#define WAV   0x7665

#define ADTS 0x4154

#define ADIF 0x4144

#define MP4 0x4d34

#define WMA 0x574d

#define OGG 0x4f67

#define FLAC 0x664c

#define MP3 0XFFE0 ~ 0XFFFF;

//*********************************************

编码顺序

 1)  Load the VS1063a Patches package

WriteVS10xxRegister(SCI_WRAMADDR, 0x50); // Activation

Recommended: If you use the VS1063a Patches package, start encoding as
follows: set bit SM_ENCODE in SCI_MODE, then write 0x50 to AIADDR.
– If you do not use the VS1063a Patches package, start encoding mode by setting
SM_ENCODE and SM_SOFTRESET in register SCI_MODE.

2 )初始化下列寄存器

SCI_AICTRL0 for samplerate (SCI_WRAMADDR for bitrate/quality setting)
SCI_AICTRL1 for gain/AGC
SCI_AICTRL2 for AGC max gain
SCI_AICTRL3 for channel selection, encoding format and options

SCI_WRAMADDR to set bitrate/quality (mp3 and Ogg Vorbis only)

 

3)SCI_AICTRL3bits.13  可以选择是通过SPI 还是UART 来进行数据传输。

4)当要结束编码 ,设置SCI_MODEbits.SM_CANCEL = 1;

   SCI_MODEbits.SM_CANCEL 将会在100MS内被清除。

  当编码完成,SCI_MODEbits.SM_ENCODE = 0;

   SCI_HDAT1 SCI_HDAT0也会变成0;   

 

 

 

 

文章评论0条评论)

登录后参与讨论
我要评论
0
14
关闭 站长推荐上一条 /2 下一条