HD Audio驱动开发求助
平台:南桥(BD82QM67_SLJ4M)HD Audio接一块CODEC芯片( Realtek_ALC662GR)
操作系统:vxWorks6.8
问题描述:进行音频驱动开发,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:
ADDRESS_LOWER:0x07FB8000
ADDRESS_UPPER: 0x00000000
LENGTH:0x1000
IOC:1
BDLE1
ADDRESS_LOWER:0x07FB9000
ADDRESS_UPPER:0x00000000
LENGTH:0x1000
IOC: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
打开输出缓冲区,设置音量等。
PS:我在Linux系统下进行同样原理的配置,输出音频流功能是正常的,并成功发声。
这个问题卡了我好久了,希望得到各位的指导,万分感谢!