// 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条评论)
登录后参与讨论