平台:南桥(BD82QM67_SLJ4M)HD Audio接一块CODEC芯片( Realtek_ALC662GR)
操作系统:vxWorks
问题描述:进行音频驱动开发,HDA自身寄存器读写功能正确。CORB、RIRB功能正常,即HDA能读写CODEC寄存器。但HDA向CODEC发送音频流OSD0(Output Stream Descriptor 0) 不成功,不成功表现为启动DMA后OSD0SDLPIB寄存器的值循环变化,但OSD0STS寄存器bit2(Buffer Completion Interrupt Status)不置位(BDLE中的IOC已设置),使用示波器观察SDO发现每个frame输出32bits高电平,与数据缓冲区的数据不一致(无论数据缓冲区的值为何值,SDO上输出的一直是高电平)。
参数设置情况:
音频PCM数据格式为: 44.1k、16bit、2通道
BDL设置2个BDLE,每个entry的参数分别为:
| BDLE0 | BDLE1 |
ADDRESS_LOWER | 0x07FB8000 | 0x07FB9000 |
ADDRESS_UPPER | 0x00000000 | 0x00000000 |
LENGTH | 0x1000 | 0x1000 |
IOC | 1 | 1 |
Stream Num设置为1
注:BDL及BDLE内存都是申请的连续内存空间。
HDA的设置为:
OSD0CTL: 0x14001C
OSD0CBL: 0x2000
OSD0LVI: 1
OSD0FIFOW: 0x0004
OSD0FIFOS: 0x00C0
OSD0FMT: 0x4011
OSD0BDPL: 0x07E49000
OSD0BDPU: 0x00000000
CODEC使用FRONT DAC设置以下参数:
设置Converter Format为0x4011
设置Converter Stream,Channel为0x10