pcm1770-Low-Voltage and Low-Power Stereo Audio DAC w Headphone Amp .pdf
(612.17 KB)
最近在学习stm32f4(和朋友一起做的开发板),板载了pcm1770,当时看到一些开发板上带有pcm1770所以就选了这款芯片,这两天下班后就在公司玩会,结果看到其他开发板上并没有给出关于pcm1770的配置和控制,无奈只能自己探索了。。。
pcm1770 音频接口采用I2S ,控制接口采用spi。
学习板上SPI3作为I2S接口传输音频数据, SPI2控制pcm1770;
一开始没怎么看pcm1770的数据手册,直接配置spi去控制,结果。。。。结果都不知道怎么去测试是否控制,网上找资料没什么结果,只能去看英文数据手册。
下面是PCM1770的控制时序图
MS: 使能脚 低电平使能 MC:时钟 MD: 数据
看完时序图,我开始去修改spi2的配置
SPI_I2S_DeInit(SPI2);
SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;//全双工
SPI_InitStructure.SPI_DataSize = SPI_DataSize_16b;//16位数据模式
SPI_InitStructure.SPI_CPOL = SPI_CPOL_High;//空闲模式下SCK为1,看时序图 MC在空闲的时候是1
SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge;//数据采样从第2个时间边沿开始,MD信号 在MC=0的时候进行变化,在上升沿的情况下输出
//因为常态下MC=1,又是上升沿锁定数据输出,所以选择第二个时钟沿
SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;//NSS软件管理
SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_256;//波特率,
SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;//大端模式
SPI_InitStructure.SPI_CRCPolynomial = 0;//CRC多项式
SPI_InitStructure.SPI_Mode = SPI_Mode_Master;//主机模式
SPI_Init(SPI2, &SPI_InitStructure);
SPI_Cmd(SPI2, ENABLE);
下面是操作PCM1770的函数
void PCM1Writereg(u8 WriteAddr, u8 WriteData)
{
u16 WriteAddrData;
WriteAddrData = (0x00FF & WriteAddr);
WriteAddrData = WriteAddrData << 8;
WriteAddrData = WriteAddrData | WriteData;
GPIO_ResetBits(GPIOB,GPIO_Pin_11);//MS 使能
delay_us(100);
SPI2_RWByte(WriteAddrData);
GPIO_SetBits(GPIOB,GPIO_Pin_11);//MS 失能
delay_us(100);
}
这样配置之后 我又开始去控制,还是不知道是不是正确控制了,后来我看了下pcm1770的寄存器
MUTx: Soft Mute Control
Where, x = L or R, corresponding to the headphone output HOUTL or HOUTR.
我试着去控制静音,但是还没设置I2S接口,没送数据,也不知道是不是设置正确了。。。。
我看到了器件第10脚是个音频输入脚,之后pcm1770的03寄存器bit4,发现这个AIN是可以通过寄存器控制的
我是做安防的,身边的音频视频源比较多,直接接上,使能03寄存器的bit4 将音频信号接到第10脚 耳机听到了声音,之后失能03寄存器的bit4 接上音频信号源 耳机没声音了。。。控制总算正确了。。。。
另外 pcm1770的04寄存器bit0位是来控制掉电和正常模式的,一共4个寄存器比较简单。
回过头来看pcm1770的控制,发现本人过分依赖网上的资料,看,懒得去看数据手册,懒得去探索,其实静下心来去自己摸索,往往并没有自己想想的那么难,反而能收获一定的能力和成功的喜悦。。。希望有和我一样毛病的技术员能够吸取教训。
今天用了st官方提供的i2s的例程中的音频数据C文件进行播放测试,效果还行接下来会继续本人在调试I2S接口中的问题和收获。。
|