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

5.7.5 USB 器件控制器

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

一、简介
应用处理机有一个通用串行总线器件控制器(UDC)。它支持16 个端点(endpoint), 能以 12Mbs 工作于半双工方式(仅为从机,不能作主机或 Hub 控制器)。UDC 支持四 种器件设置。设置 1、2 和 3 每种支持两个接口。这允许主机对物理总线结构进行动态
修改。一个设置是器件中有的 USB 资源的特定组合。一个接口对主机来说是代表器件 特性或功能的相关端点的集合。

USB 按通讯规程的层次来传送传行信息。场是最基本的规程。UDC 场包括:同步、 包标识(PID)、地址、端点、帧序号、数据和 CRC。场合并为包。一个包的功能决定 组成包的场的组合和数目。包类型包括:令牌、帧开头、数据和握手。包汇集成组进行 传送。传送包括四种组:成批、控制、中断和定时(isochronous)。端点 0 仅用于进行 设置UDC 的控制传送。端点0 的任务包括:连接、地址赋值、端点设置、总线枚举和 断开连接。

UDC 使用双口存储器支持FIFO 操作。每一个成批或定时端点FIFO 结构为双缓冲, 以允许端点在处理一个包时可接受另一个。DMA 和信号单元(Megacell)可装入和读 出 FIFO。在接收到一个包时可产生中断或 DMA 请求。UDC FIFO 的 DMA 服务以 32 字节增量。在 FIFO 遇到短包或零长度包时也产生中断。端点 0 有 16 单元深 8 位宽的 FIFO,它只能由处理机读出或写入。

对端点1~15,UDC 使用双口存储器在检查传送错误时存放成批OUT 传送的数据。 如成批OUT 传送数据不正确,UDC 发NAK 握手值以请求主机重发该数据。在接收并 检验成批OUT 数据前,软件不知道OUT 数据的正确性。如主机发出NAK 握手以响应 成批IN 数据传送,UDC 重发该数据。由于FIFO 包含数据的拷贝,重发时软件不需要 重装入数据。
专用于 UDC 接口的外部引脚为 UDC+和 UDC-。USB 规定使用两个脚的差分信号 进行半双工数据传送。必须在 USB 电源与 D+脚外加 1.5K 上拉电阻以在无驱动时置 UDC+脚为高。在UDC+无驱动时置高允许UDC 为高速12MHz 器件,并为数据传送提 供正确的极性。传行总线使用差分信号以同时发送多种状态。这些状态组合产生发送数 据和各种总线条件,包括:空闲、重执行、包开始、包结束、断开、连接和复位。
二、器件设置
表5-31 给出了器件的设置。
表 5-31 端点设置

端点号

类型

功能

FIFO 大小*FIFO 的个数

0

控制

IN/OUT

16

1

成批(Bulk)

IN

64*2

2

成批(Bulk)

OUT

64*2

3

定时(Isochronous)

IN

256*2

4

定时(Isochronous)

OUT

256*2

5

中断

IN

8

6

成批(Bulk)

IN

64*2

7

成批(Bulk)

OUT

64*2

8

定时(Isochronous)

IN

256*2

9

定时(Isochronous)

OUT

256*2

10

中断

IN

8

11

成批(Bulk)

IN

64*2

12

成批(Bulk)

OUT

64*2

13

定时(Isochronous)

IN

256*2

14

定时(Isochronous)

OUT

256*2

15

中断

IN

8

数据流相对于 USB 主机而言。IN 包表示数据从 UDC 至主机,OUT 位从主机至

UDC。

在 UDC 从某个端点发送 IN 包时,信号单元可为下一次帧传送装入同个站点。在 信号单元读入一个OUT 端点,UDC 能继续处理至该端点的下一个输入包。
三、USB 规程
在复位信号单元后,或在 USB 主机发出 USB 复位时,UDC 设置所有端点,并强制 使用USB 的缺省地址(0)。在UDC 设置端点后,主机赋予UDC 以一个唯一的地址。 这时UDC 处于主机控制下,响应使用至端点0 的控制传送命令。

1. 信号电平

通过解码UDC+和UDC-的极性和差分数据,可表示四种不同状态。两种用于表示 数据:UDC+高和 UDC-低表示 1;UDC+低和 UDC-高表示 0。剩下的两种状态用于 表示USB 的当前状态。表5-32 显示了如何差分信号表示8 种不同总线状态。
表 5-32 USB 状态

总线状态

UDC+/UDC-引脚

空闲

UDC+高, UDC-低(和1 相同)

挂起

空闲状态持续3ms 以上

重新执行

UDC+低, UDC-高(和0 相同)

包开始

从空闲状态转到重新执行状态

包结束

拉低UDC+和UDC-持续2 位时间后接1 位时间的空闲状态

断开

UDC+和UDC-低于单端低电平阀值超过2.5us

(断开是一种静态总线状态,由于没有设备连接到Hub 端口)

连接

UDC+或UDC-高超过2.5us

重起

拉低UDC+和UDC-超过2.5us.

(重起被主机控制器促使,被设备控制器感应)

主机和 Hub 在 D+和 D-线上有下拉电阻。在器件没连至电缆,拉低电阻使 D+和

D-拉低于主机或Hub 的单端低电平阀值。这创建单端0(SE0)的状态。SE0 持续2.5us

(30 位时间)以上时,主机检测到断开。在UDC 接至USB 电缆,UDC+脚上的拉高 电阻D+拉高超过单端高电平阀值。在2.5us 后,主机检测到连接。
在主机检测到连接后,因为UDC+为高和UDC-为低,总线处于空闲状态。总线从 空闲状态转向重执状态(一个 1 至 0 的跳边)指出包开始(SOP)。每个包从开头的

1 至 0 跳变的同步场开始。在包数据传送完后,通过拉低 UDC+和 UDC-为低 2 位时 间后接 1 位时间的空闲状态表示包结束(EOF)状态。如空闲持续 3us 以上,UDC 进入挂起状态,转为低功耗方式。主机通过发出复位或开关总线至重执状态能把UDC 从挂起状态唤醒。在正常操作条件下,主机周期性地发出帧开始(SOF)以保证器件 不进入挂起状态。

2. 位编码

USB 使用反向非归零(NRZI)来编码每一个位。时钟和数据采用相同的编码和发 送方式。数据由跳变表示而不是信号状态。0 表示为一个跳变,而1 表示为无跳变。 每次发生0,接收器逻辑使波特时钟与输入数据同步。为保证接收器能周期性的同步, 串行位流中的6 个连续1 引起发送器自动插入一个0。这称为位填充。接收器逻辑检 测到位填充,把它从输入数据中删除。位填充使输入信号至少7 位时间内发生一次跳 变,以保证波特时钟能与输入信号同步。在整个包(从 SOP 只 EOF)期间均允许位 填充。

3. 场格式 若干位为一组,称为场。常用于组成包,包用于构成帧或进行传输。有七种 USB

场类型:同步、包标识(PID)、地址、端点、帧序号、数据和CRC。 同步(SYNC)是任何包的第一个场。同步场的第一位向 UDC 或主机指示 SOP。
同步为 8 位宽,由 7 位 0 后接一个 1(0X80)组成。除了 CRC 场外,所有场先发送 最低有效位。
包标识(PID)为一个字节,跟在SYNC 场后。前四位表示类型(令牌、数据、握 手和特殊),包格式和出错检测。后四位为检测场,它为前 4 位的反,用于保证 PID 发送的正确性。
地址和端点场用于访问UDC 的16 个端点。地址场为7 位,允许USB 有127 个唯 一地址。在 USB 主机发出复位后,UDC 和所有其它器件被赋予缺省地址——0。主 机然后为总线上的每一个器件赋予唯一的地址。地址用枚举过程赋值,一次一个器件。 在主机把地址赋予UDC 后,UDC 仅响应对该地址的传输。地址场位于发送的每一包 的 PID 后。在 UDC 检测到一个包为寻址它时,它使用端点场来决定访问 UDC 的那 一个端点。端点场为4 位,允许访问端点0 至15。端点场位于地址场后。
帧序号为11 位场,由主机在每发送一帧后加1。在它达到最大值2047(0X7FF), 从头开始计数。帧序号发送于 SOF 包中,它由主机以 1ms 间隔发生。器件控制器使 用帧序号场来控制定时传送。数据场用于在主机和UDC 间传送包数据。数据场包含

0 至1023 字节。每个字节先发送低位。UDC 可产生中断指示发生帧开始。

CRC 场用于检查令牌和数据包发送时引入的错误,适用于包中除了 PID 场的所有 场。PID 包含它自己的4 位反码检验。令牌包使用5 位CRC(X5+X2+1),称为CRC5, 数据包使用16 位CRC(X16+X15+X2+1),称为CRC16。对两种CRC,检验在每个 包的开始复位为全1。

4. 包格式

USB 支持四种包类型:令牌、数据、握手和特殊。在低速(1.5Mbs)USB 传送中, 先发送一个引导(PRE)PID。UDC 仅支持高速(12Mbs)USB 传送。忽略表示低速 器件的PRE 包和在PRE 后的低速数据传送。

(1) 令牌包
令牌包位于一个帧的开头,用于标志 OUT、IN、SOF 和 SETUP 传送。OUT 和IN 帧用于传送数据,SOF 包用于定时,SETUP 包用于设置端点的控制传送。 IN|、OUT 和SETUP 令牌包格式如下:

8 位

8 位

7 位

4 位

5 位

SYNC

PID

地址

端点

CRC

SOF 位特殊的令牌包,主机每个1ms+/-0.0005ms 发送一次SOF。它可防止UDC

进入挂起状态。SOF 格式如下:

8 位

8 位

11 位

5 位

SYNC

PID

帧序号

CRC5

(2) 数据包
数据包在令牌包后,用于在主机与 UDC 间传送数据。PID 指定两种数据包: DATA0 和DATA1。这两种数据包用于提供在多重传送中在发送和接收器之间保持 数据顺序的同步性。在握手阶段,发送器和接收器决定先使用那一种数据包。对以 后的每次包发送,数据类型交替变化(DATA0、DATA1、DATA0、……)。数据包 格式如下:

8 位

8 位

1~1023 字节

16 位

SYNC

PID

数据

CRC16

对中断 IN 数据,UDC 支持最长 8 字节数据,对成批数据为 64 字节,对定时数据为

256 字节。

(3) 握手包
握手包只有 SYNC 和 PID。握手包没有 CRC,因为 PID 有自己的检验场。握手 包用于报告数据传送和阻塞条件。仅由数据流控制的传送才能返回握手。有三种握手 包:ACK、NAK 和 STALL。ACK 表示已正确收到数据包。NAK 表示 UDC 无法从 主机接收数据或无数据发送。STALL 指出UDC 无法发送或接收数据,需要主机清除 阻塞条件。发生接收出错时,接收单元不发握手包。

5. 传送格式

包装配成组进行传送。USB 规程使用四种不同的传送格式:成批、控制、中断 和定时。对某个端点只支持特定的传送格式。端点0 缺省为控制端点,只接收控制传 送。所有USB 传送由主机启动,在主机和UDC 之间一次一个方向传送。
(1) 成批传送类型
成批传送使用包错误检测和重发,保证在主机和UDC 之间的无错数据传送。主 机在总线有空时,规划成批包。成批传送由三种包组成:令牌、数据和握手。共有8 种成批传送,见图5-20。

动作

令牌包

数据包

握手包

主机成功的从UDC 接收到数据

IN

DATA0/DATA1

ACK

UDC 暂时不能传送数据

IN

None

NAK

UDC 端点需要主机干涉

IN

None

STALL

主机监测PID,CRC,或位填充出错

IN

DATA0/DATA1

None

UDC 成功的从主机接收数据

OUT

DATA0/DATA1

ACK

UDC 暂时不能接收数据

OUT

DATA0/DATA1

NAK

UDC 端点需要主机干涉

OUT

DATA0/DATA1

STALL

UDC 监测PID,CRC,或位填充出错

OUT

DATA0/DATA1

None

从UDC 到主机的包黑体显示

图 5-20 成批传送格式
(2) 定时传送类型
定时传送保证在主机和UDC 之间的固定速率、容错的数据传送。主机在每帧期
间规划定时包。USB 规程允许定时传送使用多达 90%USB 带宽。不象成批传送,如 收到有错的数据,UDC 将按现行帧指示器的开头继续处理有错的数据。定时传送只 有两种包:令牌和数据。令牌可为IN 或OUT,数据仅为DATA0。
(3) 控制传送类型
主机使用控制传送来设置端点和询问它们的状态。控制传送有SETUP 包、数据 包(DATA0)(可选)和握手包(ACK、NAK 和STALL)组成。
在控制时,主机先发一个控制传送告诉UDC 将执行控制读还是控制写,然后为 一或更多数据传送。SETUP 是控制的第一步,它使用DATA0。以后的数据传送交替 使用DATA1、DATA0。至端点的控制写使用OUT 传送,控制读使用IN 传送。最后 一次数据传送的方向与写、读相反,用于报告状态,用作握手。它总使用DATA1 传 送。
(4) 中断传送类型
主机使用中断传送来询问器件的状态。它由 IN 包、数据包(DATA0)(可选) 和握手包组成。

6. UDC 器件请求

UDC 使用它的控制、状态和数据寄存器来控制和监视端点 0~15 的发送和接收 FIFO。主机使用通过USB 发送向端点0 的控制传送的器件请求来控制所有其它UDC 设置和状态报告。

每个设置包为8 字节,指定:

z 数据传送方向:主机至器件,器件至主机。

z 数据传送类型:标准、典型、卖主(Vendor)。

z 数据接收器:器件、接口、端点、其他。

z 传送的字节数。

z 索引或偏移。

z 值:用于传送一个可变大小的数据参数。

z 器件请求。

表 5-33 主机器件请求

请求

描述

SET_FEATURE

允许特别的请求,如设备远程唤醒或端点堵塞

CLEAR_FEATURE

清除或禁止一个特别的请求

SET_CONFIGURATION

配置 UDC 用于操作,在 Megacell 的一个重起后,或通过

USB 一个重起被告知后被使用

GET_CONFIGURATION

返回UDC 的当前配置给主机

SET_DESCRIPTOR

设置存在的描述或添加新的描述.存在的描述包括:设备,

配置,字符串,接口,和端点

GET_DESCRIPTOR

如果存在,返回一个指定的描述

SET_INTERFACE

选择另外一个设置作为UDC 的接口

GET_INTERFACE

返回选择的另外一个设置作为一个指定的接口

GET_STATUS

返回 UDC 的状态,包括:远程唤醒,self-powered,数据方向,

端点号,和堵塞状态

SET_ADDRESS

设置UDC 的7 位地址值,用于所有将来设备存取

SYNCH_FRAME

设置一个端点的同步帧的报告

UDC 不需要用户干预,解码大多数标准器件命令,包括:SET_ADDRESS、

SET_FEATURE 、GET_CONFIGURATION 、GET_STATUS 、GET_INTERFACE 和 SYNC_FRAME。传递给用户以指出主机设置指定的设置或接口。软件必须执行必要 的操作。GET_DESCRIPTOR 和SET_DESCRIPTOR 命令传递给用户来解码。

由于SET_FEATURE 和CLEAR_FEATURE 命令没传递给用户,用户不能解码器 件远程唤醒特性命令。为解决此问题,UDCCD0 的DRWF 状态位指出是否允许器件 远程唤醒特性。它只可读出。它值为1 时,允许该特性;清0 时禁止该特性。
四、硬件连接
图 5-21 给出了用户供电的器件至 USB 连接方法。复位后,图中 GPIOx 设置为输 入,使UDC+线浮空。GPIOn 设置为输入和跳变中断。在发生中断时,软件读入GPIOn 决定是否已连接电缆。在GPIOn=1 时,已连接;GPIOn=0 时,为断开。如检测到连接, 软件应允许 UDC 设置,并置 GPIOx 为输出 1,以向主机指出已连接一个高速 USB 器 件。在检测到USB 断开时,软件应设置GPIOx 为低,设置GPIOn 脚为检测唤醒事件。

图 5-21 自我供电的器件 USB 连接方式 为节省GPIO,也可把GPIOn 和GPIOx 用一根GPIO 实现。
五、UDC 寄存器

UDC 共有41 个寄存器,见表5-34。所有的设置、请求/服务和状态报告由USB 主 机通过USB 与UDC 的通讯来控制。UDC 有控制UDC 与软件接口寄存器。有一个允许 UDC 和屏蔽中断的控制寄存器、一个指出中断源状态的状态寄存器。16 个端点(控制、 OUT 和 IN)每个有一个控制或状态寄存器。端点 0(控制)有一个可接收和发送数据 的16×8 的数据FIFO,它也有一个写计数寄存器,决定USB 主机发至端点0 的字节数。 端点1、6、11 为成批IN 端点,端点2、7、12 为成批OUT 端点,端点3、8、13 为定 时IN 端点,端点4、9、14 为定时OUT 端点,端点5、10、15 为中断IN 端点。

表 5-34 UDC 寄存器

地址

名称

描述

0h 4060 0000

UDCCR

UDC 控制寄存器

0h 4060 0004

保留

保留为将来使用

0h 4060 0008

保留

保留为将来使用

0h 4060 000C

保留

保留为将来使用

0h 4060 0010

UDCCS0

UDC 端点0 控制/状态寄存器

0h 4060 0014

UDCCS1

UDC 端点1(输入)控制/状态寄存器

0h 4060 0018

UDCCS2

UDC 端点2(输出)控制/状态寄存器

0h 4060 001C

UDCCS3

UDC 端点3(输入)控制/状态寄存器

0h 4060 0020

UDCCS4

UDC 端点4(输出)控制/状态寄存器

0h 4060 0024

UDCCS5

UDC 端点5(中断)控制/状态寄存器

0h 4060 0028

UDCCS6

UDC 端点6(输入)控制/状态寄存器

0h 4060 002C

UDCCS7

UDC 端点7(输出)控制/状态寄存器

0h 4060 0030

UDCCS8

UDC 端点8(输入)控制/状态寄存器

0h 4060 0034

UDCCS9

UDC 端点9(输出)控制/状态寄存器

0h 4060 0038

UDCCS10

UDC 端点10(中断)控制/状态寄存器

0h 4060 003C

UDCCS11

UDC 端点11(输入)控制/状态寄存器

0h 4060 0040

UDCCS12

UDC 端点12(输出)控制/状态寄存器

0h 4060 0044

UDCCS13

UDC 端点13(输入)控制/状态寄存器

0h 4060 0048

UDCCS14

UDC 端点14(输出)控制/状态寄存器

0h 4060 004C

UDCCS15

UDC 端点15(中断)控制/状态寄存器

0h 4060 0050

UICR0

UDC 中断控制寄存器0

0h 4060 0054

UICR1

UDC 中断控制寄存器1

0h 4060 0058

USIR0

UDC 状态/中断寄存器0

0h 4060 005C

USIR1

UDC 状态/中断寄存器1

0h 4060 0060

UFNHR

UDC 帧序号高位寄存器

0h 4060 0064

UFNLR

UDC 帧序号低位寄存器

0h 4060 0068

UBCR2

UDC 字节计数寄存器2

0h 4060 006C

UBCR4

UDC 字节计数寄存器4

0h 4060 0070

UBCR7

UDC 字节计数寄存器7

0h 4060 0074

UBCR9

UDC 字节计数寄存器9

0h 4060 0078

UBCR12

UDC 字节计数寄存器12

0h 4060 007C

UBCR14

UDC 字节计数寄存器14

0h 4060 0080

UDDR0

UDC 端点0 数据寄存器

0h 4060 0100

UDDR1

UDC 端点1 数据寄存器

0h 4060 0180

UDDR2

UDC 端点2 数据寄存器

0h 4060 0200

UDDR3

UDC 端点3 数据寄存器

0h 4060 0400

UDDR4

UDC 端点4 数据寄存器

0h 4060 00A0

UDDR5

UDC 端点5 数据寄存器

0h 4060 0600

UDDR6

UDC 端点6 数据寄存器

0h 4060 0680

UDDR7

UDC 端点7 数据寄存器

0h 4060 0700

UDDR8

UDC 端点8 数据寄存器

0h 4060 0900

UDDR9

UDC 端点9 数据寄存器

0h 4060 00C0

UDDR10

UDC 端点10 数据寄存器

0h 4060 0B00

UDDR11

UDC 端点11 数据寄存器

0h 4060 0B80

UDDR12

UDC 端点12 数据寄存器

0h 4060 0C00

UDDR13

UDC 端点13 数据寄存器

0h 4060 0E00

UDDR14

UDC 端点14 数据寄存器

0h 4060 00E0

UDDR15

UDC 端点15 数据寄存器

1. UDC 控制寄存器 UDCCR


位31~8:保留。
位7:REM——复位中断屏蔽(读/写)。

0=允许复位中断。

1=禁止复位中断。

位6:RSTIR——复位中断请求(读/写入/清0)。

1=UDC 由主机复位。

位5:SRM——挂起/重执中断屏蔽(读/写)。

0=允许挂起/重执中断。

1=禁止挂起/重执中断。

位4:SUSIR——挂起中断请求(读/写入1 清0)。

1=UDC 从主机收到挂起信号。

位3:RESIR——重执重端请求(读/写入1 清0)。

1=UDC 重主机收到重执信号。

位2:RSM——器件重执(读/写入1 置位)。

0=保持UDC 为挂起状态。

1=强制UDC 推出挂起状态。

位1:UDA——UDC 活动(只读)。

0=UDC 正收到USB 复位。

1=UDC 没收到USB 复位。

位0:UDE——UDC 允许(读/写)。

0=禁止UDC。

1=允许UDC。

2. UDC 端点 0 控制/状态寄存器 UDCCS0


位31~8:保留。
位7:SA——SETUP 活动(读/写入1 清0)。

1=USB 上SETUP 命令活动。

位6:RNE——接收FIFO 不空(只读)。

0=接收FIFO 空。

1=接收FIFO 不空。

位5:FST——强制STALL(读/写入1 置位)。

1=强制STALL 握手。

位4:SST——发送STALL(读/写入1 清0)。

1=UDC 发出STALL 握手。

位3:DRWF——器件远程唤醒特性(只读)。

0=禁止器件远程唤醒特性。

1=允许器件远程唤醒特性。

位2:FTF——清洗TXFIFO(读出为0/写入1 置位)。

1=清洗TXFIFO 内容。

位1:IPR——IN 包准备好(读出为0/写入1 置位)。

1=IN 包准备好。

位0:OPR——OUT 包准备好(读出为0/写入1 置位)。

1=OUT 包准备好。

3. UDC 断点 x 控制/状态寄存器 UDCCSx(x=1、6、11、3、8、13 或 5、10、15)


位31~8:保留。
位7:TSP——发送短包(读出为0/写入1 置位)。

1=准备发送短包。 位6:保留。

位5:FST——强制STALL(读/写)。(对x=3、8、13 为保留位)

1=向IN 令牌发STALL 握手。

位4:SST——发STALL(读/写入1 清0)(对x=3、8、13 为保留位)。

1=已发出STALL 握手。

位3:TUR——发送FIFO 下溢出(读/写入1 清0)。

1=发送FIFO 发生下以出。

位2:FTF——清洗TXFIFO(读出为0/写入1 置位)。

1=清洗TXFIFO 内容。

位1:TPC——发送包完成(读/写入1 清0)。

0=出错/状态位无效。

1=已发出发送包且出错/状态位有效。 位0:TFS——发送FIFO 服务(只读)。

0=发送FIFO 无法装入新数据。

1=发送FIFO 至少可装入一个完整的数据包。

4. UDC 端点 x 控制/状态寄存器 UDCCSx(x=2、7、12 或 4、9、14)。


位31~8:保留。
位7:RSP——收到短包(只读)。

1=收到短包,准备读出。

位6:RNE——接收FIFO 不空(只读)。

0=接收FIFO 空。

1=接收FIFO 不空。

位5:FST——强制STALL(读/写)。(仅x=2、7、12)

1=向OUT 令牌发STALL 握手。

位4:SST——发出STALL(读/写入1 清0)。(仅x=2、7、12)

1=已发送STALL 握手。

位3:DME——DMA 请求(读/写)。

0=在收到EOP 后发出数据接收中断。

1=在收到EOP 和接收FIFO 有少于32 字节数据后发出数据接收中断。 位2:保留。

位1:RPC——接收包完成(读/写入1 清0)。

0=出错/状态位无效。

1=已收到接收包且出错/状态位有效。 位0:RES——接收FIFO 服务(只读)。

0=接收FIFO 有少于一个数据包。

1=接收FIFO 有一个或以上数据包。

5. UDC 中断控制寄存器 0、1 UICR0 和 UICR1

UICR0 的位 7~0(IM7~0)为对应于端点 7~0 的中断屏读位,UICR1 的位 7~0

(IM15~8)为对应于端点15~8 的中断屏蔽位。等于0,允许对应端点的中断;等于1, 禁止中断。复位后为1。

6. UDC 状态/中断寄存器 0、1 USIR0 和 USIR1

USIR0 的位7~0(IR7~0)对应于端点7~0 的中断请求,USIR1 的位7~0(IR15~8) 对应于端点15~8 的中断请求。它们可读出,写入1 清0。在允许对应端点中断时;

(1) 对端点 0:如 OUT 包准备好置位,IN 包准备好位清 0,或发送 STALL 位 置位,置位IR 位。
(2) 对OUT 端点:如OUT 包准备好位(RFC)置位,置位对应IR 位。
(3) 对IN 端点:如IN 包完成位(TPC)置位,置位对应IR 位。

7. UDC 帧序号高位寄存器 UFNHR


位31~8:保留。
位7:SIR——SOF 中断请求(读/写入1 清0)。

1=已收到SOF。

位6:SIM——SOF 中断屏蔽。

0=允许SOF 中断。

1=禁止SOF 中断。

位5:IPE14——端点14 定时包出错(读/写入1 清0)。

1=指示端点FIFO 中数据有错。

位4:IPE9——端点9 定时包出错(读/写入1 清0)。

1=指示端点FIFO 中数据有错。

位3:IPE4——端点4 定时包出错(读/写入1 清0)。

1=指示端点FIFO 中数据有错。

位 2~0:FNMSB——帧序号 MSB,它存放与最新收到 SOF 有关的 11 位帧序号的高 3
位。

8. UDC 帧序号低位寄存器 UFNLR

UFNLR 的位 7~0 为帧序号 LSB,它存放与最新收到 SOF 有关的 11 位帧序号的低

8 位。

9. UDC 字节计数寄存器 x UBCRx(x=2、4、7、9、12 或 14)

UBCRx 的低8 位分别为端点2、4、7、9、12、14 的字节计数。它们只可读出。

10. UDC 端点 0 数据寄存器 UDDR0

UDDR0 是一个16×8 双向FIFO。在主机向端点0 发送数据时,宏单元读出UDDR0 以访问数据。在 UDC 向主机发数据,宏单元把发送数据写入 UDDR0。宏单元只能在 控制过程的特定时可读和写FIFO。FIFO 的方向由UDC 所控制。一般情况,UDC 在空 闲状态,等待主机发送命令。在主机发命令时,UDC 的FIFO 装入来自主机的命令,宏 单元从 FIFO 中读出命令。仅在收到主机的命令且需要回答时,宏单元才能写入端点 0 的FIFO。

11. UDC 数据寄存器 x UDDRx(x=1、6 或 11)

端点x 是双缓冲成批IN 端点,为64 字节深。数据可通过DMA 或直接宏单元写入。 由于它是双缓冲器,最多可写入用于发送的两组数据包。

12. UDC 数据寄存器 x UDDRx(x=2、7 或 12)

端点x 是双缓冲成批OUT 端点,为64 字节深。在收到EOP 时,UDC 可产生中断
或DMA 请求。由于它为双缓冲,最多可同时接收两组数据包。

13. UDC 数据寄存器 x UDDRx(x=3、8 或 13)

端点 x 是双缓冲器定时 IN 端点,为 256 字节深。数据可通过 DMA 或直接宏单元 写入。由于它是双缓冲,最多可写入用于发送的两组数据包。

14. UDC 数据寄存器 x UDDRx(x=4、9 或 14)

端点x 是双缓冲器定时OUT 端点,为256 字节深。在收到EOP 时UDC 可产生中 断或DMA 请求。由于它是双缓冲,最多可同时接收两组数据。通过DMA 或直接从宏 单元读出可从UDC 移出数据。在一个包正在移出,而后一个包已经接收完毕,UDC 将 在主机下次向端点 x 发OUT 包时发 NAK 握手。这个 NAK 条件将持续到 UDC 有一整 个包空闲。

15. UDC 数据寄存器 x UDDRx(x=5、10 或 15)

端点 x 是中断 IN 端点,为 8 字节深。数据可通过 DMA 或直接宏单元写入。因为

USB 系统为主机主动方式,主机必须查询端点x 以决定中断条件。USB 不能启动传送。