热度 14
2012-3-5 18:40
2048 次阅读|
0 个评论
// 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 ; 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;