77范文网 - 专业文章范例文档资料分享平台

音频的构架以及原理(3)

来源:网络收集 时间:2019-03-03 下载这篇文档 手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:或QQ: 处理(尽可能给您提供完整文档),感谢您的支持与谅解。点击这里给我发消息

2.3codec地址分配和握手方式

我们已经有谈到流的传输与格式。那么device如何辨认SDOUT上传输的

流哪个是给自己哪个给别的设备的,controller又如何判断SDIN上输入的信号是由哪个设备发出的呢。Controller会对HAD LINK上的设备进行地址分配,最多支持15个设备。Controller分配给device地址方式:设备在reser#无效以后第二个帧同步信号SYNC的下降沿采样SDIN信号,SDIN信号维持高电平的时间来决定设备的ID。采样到高电平后由BITCLK计数,有多少个BITCLK的高电平即表示设备的ID是多少(0-14)。所以说codec的热插拔是不支持的。其地址分配情况如图2-6所示。

图2-6

道了地址分配那么我们就不难明白像stream tap这些4位的流码头的作用

了。对于SDOUT由于一个信号线上并行传输多个流给不同的设别所以在每个流信息之前SYNC信号上都有一个相应流的stream tap来同志设备接下来的流信号由哪个设备接受。而对于每个流信号其中又包含许多块,比如音频

信号的左右声道,低音跑SPIDIF那么codec又如何对此区分。这就需要谈到在每个流开头还有一段命令包(40bit,其中8bit预留bit)这个命令包就是用来告诉codc数据流信息和控制codec工作的。而对于SDIN上没根信号只能接一个外设传输一个流信号因此在每个流信号传输前SDIN信号现上都有一个stream tap来告诉controller是由哪个外设传过来的信号。HDA controller中的DMA引擎把接受到流中的频道(比如左右声道)组合再由DMAA传输到达存储器指定位置。当每一个DMA引擎使能时,它都要查阅存储器缓冲区描述队列,其中每一个都定义了不同长度的缓冲区。它指挥缓冲区按照顺序从codec和向codec传输数据。对于DMA引擎的控制器寄存器空间包括了一个指针指向缓冲区描述队列的头,同样的也有一个识别队尾的指针。

第三章 HDA controller和codec的初始化

3.1controller初始化

HDA控制器是连接系统和codec的枢纽。上层他是通过系统总线(一般为PCI总线)与系统进行交易,下层他又通过HDA Link与codec进行交易。当HDA控制器在上电后进行重置时,所有的控制寄存器将处于它们的上电默认状态,HAD链路是不激活的。

启动控制器的第一步是适当的配置PCI/PCIE或者其他系统总线的接口。这一步的作用主要是激活PCI以及其他系统总线,使挂在系统总线上的设备被识别并能与系统进行交易,让HDA控制器在系统上做好传输的准备。比如,当利用PCI时,中断线,基地址和其他PCI配置空间寄存器应该被适当的设计。这时候HAD controller还没进行配置,只是使其上层总线激活。

接下来是控制器的配置。首先CRST位(偏移量08h,位0)将是0,这意味着控制器正处在reset状态。控制器处于reset状态的时候唯一能够接受的操作是CRST位使其结束reset状态,其他寄存器都是处于其默认值,写他们都是不起作用。当CRST为1控制器按照一定的步骤使其结束reset状态。链路开始工作开始初始化自己

当controller初始化完毕链路被激活开始初始化。Codec将检测到RESET#信号由控制器请求状态的改变和列举。 然后控制器通过SDIN信号来提供codec唯一的地址(上文已有说道地址的分配原理),并设置控制器STATESTS位来表明

状态改变事件在适当的SDATA_INx信号被检测到。软件可以利用这些位来决定连接在链路上的codec。在给定的位置上的1表明响应位置的codec是有效的,比如,05h意味着地址0和2有codec连在链路上。如果当新的codec连接上时软件希望得到一个中断,比如移动入坞事件,软件可以在INTCTL寄存器中设置CIE位为1来使控制器中断使能,其中包括状态改变事件。当中断被接收时,可以检测STATESTS位来决定没有预先定义的codec是否发出了状态改变的请求。

3.2 codec的配置

Codec其实在开始RESET#有效的时候就已经初始化自己了。RESET#必须至少有效250μs的时间来保证codec有足够的时间来进行这已初始化。初始化完成以后由于controller初始化也已经初始化完成LINK已经准备好传输数据。接下来命令就可以送往codec来配置其内部寄存器决定他们的能力。首先了解一下为什么我们需要在codec初始化结束后配置codec。以audio codec为例,ALC662是5.1声道的codec,我们设计电路时外部的功能不一定都用到即5.1声道不一定都有用,还有spidif之类的也是可用可不用的,还有一些带有复用功能的,对于这些系统要和codec要如何知道我们是怎么用的这就需要由我们来更具自己的设计配置codec。从而也就有了我么所说的verb table。我们使用厂商提供的应用软件选择我们所使用的配置。然后会生成配置文件。BIOS负责把配置文件加载到codec中。

BIOS在PCI/PCIE bus,controller,link,codec都初始化完成后才会对codec进行配置。BIOS通过两种方式:PIO和DMA来把配置信息写到codec中去。PIO方式是通过访问IO口。通过Immediate Command Input and Output Registers。HDA_Bar offset: 60h(ICW),64h(IRR)和68h(ICS)(IRV,ICB)来进行配置写。DMA方式就是CORB和RIRB这中方式以命令的形式写到codec中,下面会讲到CORB RIRB这种传输机制。在速度上PIO方式要块一些,而DMA方式则是会占用比较多的内存资源。我们现在一般是采用PIO的方式来配置codec的。

3.3CORB与RIRB

Codec命令和控制描述了一种机制,利用这种机制就可以控制送往codec或由codec发出的信息。命令和控制数据是低带宽的异步数据,并在链路上一次只传

输一个命令。时序是不确定的,或者是送往控制器或者是从控制器发出。Codec命令和控制由控制器通过两种机制管理,它们是命令输出缓冲区和响应输入缓冲区。软件通过CORB和RIRB控制器负责配置控制器的CORB和RIRB。

CORB是命令输出缓冲区。它是由软件在存储器中开辟出来的一块空间用来存放需要传输到codec的命令。控制器利用DMA获取CORB中的输出命令,并将它们放在每一帧开始的Command/Control位。CORB的大小由CORBSIZE控制寄存器设计为2个entry(8字节),16个entry(64字节)或256个entry(1024字节)。软件负责基于CORBSZCAP域选择CORB大小和系统的容量。总之,如果系统容量不小于正常情况时,软件应选择256个entry。硬件掌握两个指针,写指针(WP)和读指针(RP)。WP被软件使用来向硬件指出在CORB中的最后有效命令,而硬件使用RP向软件指出最后一个被取走的有效命令。WP和RP均是按照命令格式相对于缓冲区的偏移。由于每个命令是4个字节,由WP和RP描述的相对于CORB缓冲区的字节偏移是WP×4和RP×4。为了向CORB中增加命令,软件把命令放置在命令队列的末尾,它的字节偏移是(WP+1)×(4字节)。当软件完成写命令后,WP将被更新,并使其等于最后有效命令的偏移。当CORB被第一次初始化后,WP等于0,所以第一个命令将被放在4字节偏移的地方,而WP将被更新为1。当CORB的RUN位被置1后,控制器中的DMA引擎将不断的比较RP和WP来决定是否有新的命令需要传送。当读指针不等于写指针时,DMA引擎将不停的运转直到两个指针相等,在链路上的命令被传送完。DMA引擎从CORB中读取命令并将它们通过链路送往codec。如图3-1

图3-1

通过CORB传输命令要从检查CORB中是否有足够的空间。CORBWP和CORBRP的不等意味着在CORB中有可以得到的空间。如果命令的块比规定的大,就要将其拆成许多小块来传送。

命令由CORBWP+1指定偏移被写进CORB中,这是命令的第一块位置。注意到第一块命令,这意味着第一个命令被放在CORB中偏移为4字节的地方。由于CORBWP为0,那么CORBWP+1将意味着4字节的偏移。

CORBWP被软件改变来反映最后一个写进CORB的命令。硬件将开始通过链路传送命令,每从存储器中取走一个命令,CORBRP就会被改变。当CORBRP等于CORBWP时,所有的命令都被送出。这时控制器就停止传送动词直到软件重复这个操作,并给CORBWP一个不同的值。图3-2即表示命令的传输过程

图3-2

当硬件在传送命令的同时(CORBRP不等于CORBWP,CORB RUN位被置1),软件可以在CORBWP指定的指针后添加新命令,然后更新CORBWP。硬件必须继续传送新增加的命令。软件必须保证新增的命令对于缓冲区来说不溢出。比如,当命令没有被送出时,新增的命令将会覆盖原有的命令,当前读指针的值由CORBRP给出。

RIRB也是一存储器缓冲区,codec通过RIRB机制实现codec对controller的一个响应。一条响应从一个codec中发出送往控制器,在控制器中的DMA引擎将响应写入RIRB。被动响应在后来的一帧由单个codec应答,按照这样的顺序下一帧命令送往codec。主动应答由codec插入帧队列,当被动应答不占用链路时。控制器将响应流写入RIRB缓冲区。软件负责把不同codec发出的响应信号分开,包括主动响应和被动响应。

和CORB一样,在RIRB中用到了读指针和写指针。在RIRB中,RP是由软件控制的,它记录了软件从响应缓冲区中读出的最后一个响应,硬件不掌握RP。硬件控制着WP,表明写进响应缓冲区中的最后一个响应的偏移。控制器将应答信号(主动和被动)写进RIRB中,而不管它的内容。和CORB一样,WP表明了以一个响应为

百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库音频的构架以及原理(3)在线全文阅读。

音频的构架以及原理(3).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印 下载失败或者文档不完整,请联系客服人员解决!
本文链接:https://www.77cn.com.cn/wenku/zonghe/488880.html(转载请注明文章来源)
Copyright © 2008-2022 免费范文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ: 邮箱:tiandhx2@hotmail.com
苏ICP备16052595号-18
× 注册会员免费下载(下载后可以自由复制和排版)
注册会员下载
全站内容免费自由复制
注册会员下载
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: