再上一篇:5.7.4 高速红外通讯接口 FICP
上一篇:5.7.5 USB 器件控制器
主页
下一篇:5.8.2 内部集成电路声音(I2S)控制器
再下一篇:5.8.3 多媒体卡控制器
文章列表

5.8 多媒体通讯器单元

嵌入式系统(修订本)——Intel XScale 结构与开发 陈章龙 著

5.8.1 AC97 控制器

一、简介

PXA250/210 应用处理器的AC97 控制器单元(ACUNIT)支持AC97 V2.0。ACUNIT 也 支持声音控制器连接(AC-LINK)。AC-LINK 是一种用于传送数字声音、Modem、话筒输 入、Codec(编码解码器)寄存器控制和状态信息的串行接口。

AC97 Codec 发送数字化声音采样值,ACUNIT 接收存放于存贮器中。为重新或合成声 音作品,处理机读出存放的声音采样后,把它通过 AC-LINK 发送至 Codec。Codec 中的外 部D/A 转换器把声音采样值转换成模拟声音波形。

注:ACUNIT 和I2S 控制器不能同时使用。

二、功能

ACUNIT 支持以下AC97 特性:

z 具有独立的立体声脉冲编码调制(PCM)输入、立体声PCM 输出、Modem 输出、 Modem 输入和单声道话筒输入通道。它们仅支持 16 位硬件采样。低于 16 位的采 样由软件支持。

z 多重采样速率AC97 2.0 Codec(48KHZ 或更低)。ACUNIT 依赖于Codec 控制可变 速率。

z 读/写访问AC97 寄存器。

z 支持第二个Codec。

z 两个接收FIFO(32 位16 单元)。

z 三个发送FIFO(32 位16 单元)。

应用处理机的ACUNIT 不支持以下可选的AC97 特性:

z 双速率采样(PCM L、R&C 的n+1 采样)。

z 18 和20 位采样长度。

三、引脚和连接方法

AC97 信号形成 AC-LINK,它支持点至点的全双工同步串行互连。所有数字声音流、 Modem 线Codec 流和命令/状态信息通过AC-LINK 传送。AC-LINK 使用GPIO,见表5-35。 软件必须设置这些GPIO 用作AC-LINK。

表5-35 ACUNIT 外部接口

名称

方向

描述

nACRESET

O

低有效Codec 复位

GP28/BITCLK

I

12.288MHZ 位速率时钟

GP31/SYNC

O

48KHZ 帧指示和同步信号

GP30/SDATA_OUT

O

至Codec 的串行声音数据输出

GP29/SDATA_IN_0

I

从第一Codec 的串行声音数据输入

GP32/SDATA_IN_1

I

从第二Codec 的串行声音数据输入

四、AC-LINK 数字串行接口规程
每个AC97 Codec 通过5 个脚数字串行接口与ACUNIT 相连。AC-LINK 是全双工、固定 时钟、PCM 数字流。它使用时分多路(TCM)机制来处理访问控制寄存器和多路输入、输 出声音流。AC-LINK 结构把每个声音帧分为12 个输出和12 个输入数据流。每个流为20 位 采样分辨率,需要最少为16 位分辨率的DAC 和ADC。ACUNIT 支持的数据流见表5-36。
表5-36 ACUNIT 支持的数据流

通道

区段(SLOT)

注释

PCM 重放

两个输出段

两通道合成PCM 输出流

PCM 录音数据

两个输入段

两通道合成PCM 输入流

Codec 控制

两个输出段

控制寄存器写入口

Codec 状态

两个输入段

控制寄存器读出口

Modem 线Codec 输出

一个输出段

Modem 线Codec DAC 输入流

Modem 线Codec 输入

一个输入段

Modem 线Codec ADC 输出流

专用话筒输入

一个输入段

专用话筒输入流,支持立体声

ARC 和其他声音应用

I/O 控制

一个输出流

专用于Modem Codec 的GPO

I/O 状态

一个输入流

专用于Modem Codec 的GPI,每

帧返回数据

ACUNIT 提供 AC-LINK 数据传送的同步操作。一次数据传送由 256 个信息位组成,称

为一帧,可分为 13 个时间区段。时间段 0 称为标志段,为 16 位长。其他 12 个时间段称为 数据段。标志段包含一位定义它为有效帧,12 位定义数据段的12 个时间段的有效性。数据 段中的时间区段为20 位长。一帧从SYNC 变高开始。SYNC 变高的时间与标志段有关。AC97 帧在48KHZ 间隔发生,并与12.288MHZ 位速率时钟BITCLK 同步。
控制器和 Codec 使用 SYNC 和 BITCLK 决定何时发送数据和何时采样数据。发送器在 BITCLK 上升沿输出数据,接收器在BITCLK 下降沿采样数据。发送器必须设置串行数据流 中的有效区段标志(0 有效)。

AC-LINK 中的串行数据为MSB 至LSB。标志段的第一位为位15,数据流的每个区段的 第一位为位19。图5-22 为AC97 的帧格式。


图 5-22 AC97 标准双向声音帧
五、ACUNIT 操作
可通过处理机或 DMA 控制器来访问 ACUNIT。处理机使用程控 I/O 指令来访问

ACUNIT,可访问四类寄存器:

z ACUNIT 寄存器:它们为32 位寄存器。

z Codec 寄存器:一个声音或Modem Codec 可包含多至64 个16 位寄存器。它们映象 于 ACUNIT 的 32 位地址空间。写入或读出这些映象寄存器触发通过 AC-LINK 的 数据交换。

z Modem Codec GPIO 寄存器:如ACUNIT 连接至Modem Codec,可访问Codec 的 GPIO 寄存器。写入GPIO 的映象寄存器可触发数据传送至Codec,而读出则不触发。 寄存器内容在接收到Codec 的帧时自动更新。

z ACUNIT FIFO 数据:ACUNIT 有两个发送 FIFO,用于声音输出和 Modem 输出; 三个接收 FIFO,用于声音输入、Modem 输入和话筒输入。发送 FIFO 可通过 PCM 数据寄存器(PCDR)或Modem 数据寄存器(MODR)来写入。接收FIFO 可通过 PCDR、MODR 或话筒输入数据寄存器(MCDR)来读出。

注:在允许后,ACUNIT 请求DMA 立即装入发送FIFO。
注:ACUNIT 寄存器不存放与每个 FIFO 中数据采样数有关的信息。所以程控 I/O 不应 用于代替DMA 请求进行数据传送。
只有 DMA 才可访问 FIFO。DMA 控制器以 8、16 或 32 字节块访问 FIFO 数据。DMA 请求阀值不可程控。在发送 FIFO 有少于 32 字节时 ACUNIT 发出发送 DMA 请求。在接收 FIFO 有32 个或更多字节时ACUNIT 发出接收DMA 请求。

DMA 控制器需处理以下ACUNIT DMA 请求:

z 在PCM 发送和接收FIFO 一半满时产生PCM 发送和接收DMA 请求。

z 在Modem 发送和接收FIFO 一半满时产生Modem 发送和接收DMA 请求。

z 在话筒输入接收FIFO 一半满时产生话筒输入DMA 请求。

六、ACUNIT 寄存器

ACUNIT 和Codec 寄存器映象于0x4050 0000 至0x405F FFFF 地址空间。所有ACUNIT 寄存器为32 位可寻址。虽然Codec 有多至64 个16 位寄存器,它们映象于32 位地址空间, 仅低16 位有效,高16 位应为0。

表 5-37 ACUNIT 寄存器

地址

寄存器名称

描述

0x4050_0000

POCR

PCM 输出控制寄存器

0x4050_0004

PICR

PCM 输入控制寄存器

0x4050_0008

MCCR

话筒(Mic)输入控制寄存器

0x4050_000C

GCR

全局控制寄存器

0x4050_0010

POSR

PCM 输出状态寄存器

0x4050_0014

PISR

PCM 输入状态寄存器

0x4050_0018

MCSR

话筒(Mic)输入状态寄存器

0x4050_001C

GSR

全局状态寄存器

0x4050_0020

CAR

编码解码器访问寄存器

0x4050_0024 至0x4050_003C

-

保留

0x4050_0040

PCDR

PCM FIFO 数据寄存器

0x4050_0044 至 0x4050_005C

-

保留

0x4050_0060

MCDR

话筒(Mic)输入FIFO 数据寄存器

0x4050_0064 至0x4050_00FC

-

保留

0x4050_0100

MOCR

Modem 输出控制寄存器

0x4050_0104

-

保留

0x4050_0108

MICR

Modem 输入控制寄存器

0x4050_010C

-

保留

0x4050_0110

MOSR

Modem 输出状态寄存器

0x4050_0114

-

保留

0x4050_0118

MISR

Modem 输入状态寄存器

0x4050_011C 至 0x4050_013C

-

保留

0x4050_0140

MODR

Modem FIFO 数据寄存器

0x4050_0144 至0x4050_01FC

-

保留

(0x4050_0200 至 0x4050_02FC)

每个以0x00004 递增

-

主声音编码解码器寄存器

(0x4050_0300 至 0x4050_03FC)

每个以0x00004 递增

-

从声音编码解码器寄存器

(0x4050_0400 至 0x4050_04FC)

每个以0x00004 递增

-

主Modem 编码解码器寄存器

(0x4050_0500 至 0x4050_05FC)

每个以0x00004 递增

-

从Modem 编码解码器寄存器

1、全局控制寄存器 GCR


位31~20:保留。
位19:CDONE_IE——命令完成中断允许

0=禁止中断

1=在向Codec 发送命令地址和数据后产生中断 位18:SDONE_IE——状态完成中断允许。

0=禁止中断

1=在从Codec 接收到状态的地址和数据后产生中断 位17~10:保留

位9:SECRDY_IEN——第二准备中断允许

0=禁止中断

1=在第二Codec 在SDATA_IN_1 脚上发送Codec 准备好时产生中断 位8:PRIRDY_IEN——第一准备中断允许

0=禁止中断

1=在第一Codec 在SDATA_IN_0 脚上发送Codec 准备好时产生中断

位7、6:保留
位5:SECRES_IEN——第二重执中断允许

0=禁止中断

1=在第二Codec 在AC-LINK 上产生重执事件时发生中断 位4:PRIRES_IEN——第一重执中断允许

0=禁止中断

1=在第一Codec 在AC-LINK 上产生重执事件时发生中断 位3:ACLINK_OFF——关闭AC-LINK

0=如AC-LINK 关闭,把它打开,否则无影响。

1=控制器驱动 SDATA_OUT 和 SYNC 输出为低,关闭输入缓冲器允许,

RESET 输出仍为高。AC-LINK 不允许访问任何FIFO。 位2:WARM_RST——AC97 热复位

0=不发生热复位

1= AC-LINK 热复位,它将唤醒挂起的Codec,而不清除它的内部寄存器。 位1:COLD_RST——AC97 冷复位

0=引起AC97 电路冷复位,将丢失控制器和Codec 的所有数据。

1=不发生冷复位。工作前软件应置它为1。 位0:GIE——Codec GPI 中断允许。

0=禁止中断

1=允许GPI 的值的改变产生中断。

2、全局状态寄存器 GSR


位31~20:保留。
位19:CDONE——命令完成(只读,写入1 清0)

0=ACUINT 没向Codec 发送命令地址和数据。

1= ACUINT 已向Codec 发送命令地址和数据。 位18:SDONE——状态完成(只读,写入1 清0)

0= ACUINT 没从Codec 收到状态地址和数据。

1= ACUINT 已从Codec 收到状态地址和数据。 位17~16:保留

位15:RDCS——读完成标志(只读,写入1 清0)

0=Codec 读正常完成

1=Codec 读发生超时

位14:BIT3SLT12——区段12 的位3 位13:BIT2SLT12——区段12 的位2 位12:BIT1SLT12——区段12 的位1
位11:SECRES——第二重执中断(只读,写入1 清0)

0=SDATA_IN_1 上没发生重执事件。

1= SDATA_IN_1 上发生重执事件。

位10:PRIRES——第一重执中断(只读,写入1 清0)

0=SDATA_IN_0 上没发生重执事件。

1= SDATA_IN_0 上发生重执事件。 位9:SCR——第二Codec 准备好

反映SDATA_IN_1 上的Codec 准备好位的状态。 位8:PCR——第一Codec 准备好
反映SDATA_IN_0 上的Codec 准备好位的状态。 位7:MINT——话筒输入中断标志

0=没发生话筒输入通道中断

1=发生话筒输入通道中断 在清零指定的中断后,这位将被清0(下同)。

位6:POINT——PCM 输出中断

0=没发生PCM 输出通道中断

1=发生PCM 输出通道中断 位5:PIINT——PCM 输入中断

0=没发生PCM 输入通道中断

1=发生PCM 输入通道中断

位4、3:保留
位2:MOINT——Modem 输出中断

0=没发生Modem 输出通道中断

1=发生Modem 输出通道中断

位1:MIINT——Modem 输入中断

0=没发生Modem 输入通道中断

1=发生Modem 输入通道中断

位0:GSCI——Codec GPI 状态改变中断(只读,写入1 清0)

0=区段12 的位0 为0

1=区段12 的位0 置位,这表示一个GPI 改变了状态,新的值在区段12 中

3、PCM 寄存器

(1)PCM 输出控制寄存器POCR

POCR 仅有一位,其他均为保留位。 位3:FEIE——FIFO 出错中断允许

0=禁止中断

1=在PCM 发送FIFO 出错时产生中断

(2)PCM 输入控制寄存器PICR

PICR 仅有一位,其他均为保留位 位3:FEIE——FIFO 出错中断允许

0=禁止中断

1=在PCM 接收FIFO 出错时产生中断

(3)PCM 输出状态寄存器POSR

POSR 仅有一位,其他均为保留位。

位4:FIFOE——FIFO 出错标志(写入1 清0)

0=没发生发送FIFO 错

1=发生发送FIFO 错,在发送FIFO 不溢出时置位

(4)PCM 输入状态寄存器POSR

POSR 仅有一位,其他均为保留位。

位4:FIFOE——FIFO 出错标志(写入1 清0)

0=没发生接收FIFO 错

1=发生接收FIFO 错,在接收FIFO 不溢出时置位

(5)PCM 数据寄存器PCDR

PCDR 为32 位寄存器。它的高16 位为PCM 右通道数据,低16 位为PCM 左通道。 写入 32 位值,把数据写入 PCM 发送 FIFO。读出该寄存器,从 PCM 接收 FIFO 中读出数据。

4、Codec 访问寄存器 CAR

CAR 仅有一位(位0):CAIF,它为Codec 访问正在进行标志。

0=没进行访问。读出该寄存器,置该位为1。这允许访问者可访问Codec。 访问后,这位自动清0,软件可向它写入0 来清0。

1=有另一个驱动程序正通过 AC-LINK 访问 Codec,现行驱动程序必须等

待。

5、话筒输入寄存器

(1)话筒输入控制寄存器MCCR

MCCR 仅有一位,其他为保留位。 位3:FEIE——允许FIFO 出错中断

0=不产生中断

1=在接收FIFO 出错时将产生中断

(2)话筒输入状态寄存器MCSR

MCSR 仅有一位,其他为保留位。

位4:FIFOE——FIFO 出错(写入1 清0)

0=没发生接收FIFO 错

1=发生接收FIFO 错,在接收FIFO 溢出时置位

(3)话筒输入数据寄存器MCDR

MCDR 的低16 位为话筒输入数据,它只可读出,执行从话筒输入接收FIFO 中读 出数据

6、Modem 寄存器

(1)Modem 输出控制寄存器MOCR MOCR 仅有一位,其他为保留位
位3:FEIE——FIFO 出错中断允许

0=禁止中断

1=在Modem 发送FIFO 出错时产生中断

(2)Modem 输出控制寄存器MICR MICR 仅有一位,其他为保留位
位3:FEIE——FIFO 出错中断允许

0=禁止中断

1=在Modem 接收FIFO 出错时产生中断

(3)Modem 输出状态寄存器MOSR MOSR 仅有一位,其他为保留位
位4:FIFOE——FIFO 出错标志(写入1 清0)

0=没发生发送FIFO 错

1=发生发送FIFO 错,在发送FIFO 下溢出时置位

(4)Modem 输入状态寄存器MISR MISR 仅有一位,其他为保留位
位4:FIFOE——FIFO 出错标志(写入1 清0)

0=没发生发送FIFO 错

1=发生发送FIFO 错,在发送FIFO 下溢出时置位

(5)Modem 数据寄存器MODR

MODR 的低16 位为Modem 输入、输出数据。写入把数据写入Modem 发送FIFO。 读出时从Modem 接收FIFO 中读出数据。