再上一篇:5.6.4 LCD 外部调色板和帧缓冲器
上一篇:5.6.5 寄存器
主页
下一篇:5.7.2 I2C 总线接口单元
再下一篇:5.7.3 UART
文章列表

5.7 串行口

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

PXA250/210 有多种串行口,包括同步串行口、异步串行口、IC、USB、红外通道口等。

5.7.1 同步串行口控制器(SSPC)

一、简介

SSPC 是全双工同步串行接口,可与各种使用串行方式的外部A/D 转接器、声音和 远程通讯编码解码器(CODEC)和其他器件接口。SSPC 支持 National 的 Microwire、 Texas、Instruments 的同步串行规程(SSP)和Motorla 的串行外围接口(SPI)规程。

SSPC 工作于主机方式(外部器件为从机),支持的位速率从7.2KHz 至1.84MHz, 串行数据格式为4 至16 位。SSPC 具有16×16 位发送和接收数据FIFO。FIFO 可由CPU 使用程控I/O、DMA 每次四或八个半字成批方式装入或读出。

二、引脚

SSPC 有以下引脚,在禁止SSP 时,它们可用作GPIO。

1.SSPSCLK:输出,串行位速率时钟。

2.SSPSFRM:输出,帧指示标志。

3.SSPTXD:输出,发送数据(串行数据输出)。

4.SSPRXD:输出,接收数据(串行数据输入)。

5.SSPEXTCLK:输入,外部时钟,可选择来驱动串行时钟(SSPCCLK)。

三、功能
可在应用处理机和外部设备之间通过SSPC 的FIFO 缓冲器进行串行数据交换。CPU 可使用程控I/O 或DMA 来启动把数据传至系统存储器。操作位全双工,有分开的缓冲 器和串行数据通道,允许同时向和从外设传送数据。
程控I/O 直接在CPU、发送/接受FIFO 和外设之间发送和接收数据。而DMA 控制 器在存储器、FIFO 和外设之间发送和接收数据。
发送的数据由CPU 或DMA 写入SSPC 的发送FIFO,后者为4 或8 个半字一次。 然后SSPC 从FIFO 中取出数据,转换成串行形式,从SSPTXD 脚发送至外设。从SSPRXD 脚接收来自外设的数据,转换成并行字,存放至接收 FIFO。读操作自动从接收 FIFO 读出,而写操作写入发送FIFO。发送和接收FIFO 缓冲器均为16×16 位。
当接收数据装入接收FIFO 至程控阀值时,触发产生中断。如允许,中断服务程序 从接收FIFO 缓冲器中读出数据。
四、数据格式

SSPC 使用串行数据格式来发送和接收数据。每一个数据帧可设置为 4 至 16 位, 先发送最高位(MSB)。对FIFO,每个单元(16 位)只存放一帧,每帧的最低位在位0, 如少于16 位,则高位补0。

SSPC 支持三种格式:Motorola 的SPI,TI 的SSP 和National 的Micrawire。

1.SSP 格式

在 SSP 格式中,SSPSFRM 在每帧的开始变高一位时间。以后开始发送和接收 数据,它在SSPSCLK 的上升沿发送和接收数据,在下降沿采样输入数据。

2.SPI 格式

在 SPI 格式中,SSPSFRM 用作允许外部器件的片选信号,在数据传送期间为 低。SPI 由四种方式,可选择SSPSCLK 输出数据和采样处处数据的跳变和相位。
在空闲状态或禁止SSP 时,SSPSCLK 和SSPTXD 为低,SSPSFRM 为高。

3.Microwire 格式

在Microwire 格式中,SSPSFRM 用作允许外部器件的片选信号。它与SPI 相似, 只是它采用半双工方式工作。它在SSPSCLK 的下降输出数据,上升沿采样输入数 据。
每次 Microwire 发送从 SSPSFRM 变低开始,后面为从控制器至外设的一个 8 或 16 位命令字。命令数据大小由 SSP 控制器的 MWDS 位选择。SSPRXD 由外设 控制,保持为三态。在发完最后一个命令后的一位时间,外设必须像 SSPRXD 返 回要求的串行位。
五.FIFO 操作和数据传送
发送和接收串行数据使用独立的 FIFO。FIFO 由程控 I/O 或 DMA 批操作所装入或 读出。每批为8 个半字。

1. 程控 I/O

数据字为32 位,但只传送低16 位,高16 位不传,应扔掉。 应用处理机可响应 FIFO 逻辑产生的中断来装入或读出 FIFO。每个 FIFO 有可
程控的中断阀值。超过阀值且允许中断,可产生中断,以要求CPU 去读出接收FIFO
或装入FIFO。
用户也可查询SSP 状态寄存器来决定FIFO 中有多少数据,或FIFO 为满或空。

2. DMA

可使用DMA 控制器来把数据写入FIFO 或从FIFO 中读出。编程的步骤如下:

1) 编程发送/接收字节计数(缓冲器大小)和批大小。

2) 为SSP 编程DMA 请求至映象寄存器。

3) 置位DMA 控制寄存器的RUN 位。

4) 把需要的值设置至SSP 控制寄存器。

5) 通过置位SSP 控制寄存器0 的SSE 位允许SSP。

6) 等待DMA 发送和接收中断请求。

六、波特率
波特率(或位速率时钟)由内部时钟(3.6864MHz)分频得到。内部时钟先两分频, 再通过一个可程控分频器产生7.2Kbs 至1.8432Mbs 波特率。置位外部时钟选择(ECS) 位允许使用外部时钟(SSPEXTCLK)代替3.6864MHz 标准内部时钟。外部时钟也先两
分频;再加至可程控分频器。
七、SSP 串行口寄存器

SSPC 有四个寄存器,见表5-25。

表 5-25 SSPC 寄存器

地址

记忆符号

全名

0x4100 0000

SSCR0

SSP 控制寄存器0

0x4100 0004

SSCR1

SSP 控制寄存器1

0x4100 0008

SSSR

SSP 状态寄存器

0x4100 000C

--

保留

0x4100 0010

SSDR (写/读)

SSP 写数据寄存器/SSP 读数据寄存器

1. SSP 控制寄存器 0(SSCR0)


位31~36:保留

位15~8:SCR——串行时钟速率 值(0~255)用于产生SSP 的传送位速率。 位速率=3.6864*106/(2*(SCR+1))或SSPEXTCLK/(2*(SCR+1))

位2:SSE——允许SSP

0=禁止SSP 操作(引脚用作GPIO)

1=允许SSP 操作

位6:ECS——外部时钟选择

0=使用片内时钟产生SSPCCLK

1=使用SSPEXTCLK 产生SSPSCLK

位5、4:FRF——帧格式

00=Motorola SPI

01=TI SSP

10=Nntional Microwire

11=保留

位3~0:DSS——数据位选择

0000~0010:保留

0011~1111:分别选择4~16 位数据

2. SSP 控制寄存器 1


位31~14:保留
位13~10:RFT——接收FIFO 阀值
设置接收FIFO 产生中断或DMA 请求的阀值(即FIFO 已接收数据单元数), 它等于所需阀值减一。
位9~6:TFT——发送FIFO 阀值
设置发送FIFO 产生中断或DMA 请求的阀值(即FIFO 有数据单元数),它等 于所需阀值减一。
位5:MWDS——Microwire 发送数据大小

0=发送8 位命令字

1=发送16 位命令字

位4:SPH——MotorolaSPI SSPSCLK 相位设置。

0=SSPSCLK 在帧开始的一个周期和帧结束的1/2 周期内为非有效

1=SSPSCLK 在帧开始的1/2 周期和帧结束的一个周期内为非有效 位3:SPO——Motorola SPI SSPSCLK 相位选择。

0=SSPSCLK 的非有效或空闲状态为低

1=SSPSCLK 的非有效或空闲状态为高 位2:LBM——反馈方式

0=允许正常串行口操作

1=发送串行移位器输出内部接至接收串行移位器输入 位1:TIE——发送FIFO 中断允许

0=禁止发送FIFO 中断

1=允许发送FIFO 中断 位0:接收FIFO 中断允许

0=禁止接收FIFO 中断

1=允许接收FIFO 中断

3. SSP 数据寄存器(SSDR)

SSDR 为单一地址单元,它仅为低 16 位有效,可由读/写数据传送所访问。传 送可为单个传送、4 个半字批或 8 个半字批传送。当系统访问该寄存器,FIFO 控 制逻辑自动在寄存器与 FIFO 之间与系统数据传送相同的速度传送数据。SSDR 有 标志位, 指示FIFO 为满、大于/低于程控阀值或位空。

对SSPC 向SSP 设备发送数据,在FIFO 数据单元数低于阀值时,CPU 可使用 程控I/O 方式向寄存器写入数据。
在数据位数少于 16 位时,写入发送 FIFO 时不要左调整数据。发送逻辑自动 左调整数据,忽略不使用的位。接收数据少于 16 位时,接收 FIFO 的数据自动右 调整。
在SSPC 设置为National Microwire 格式,由SSCR1 的MWDS 位选择发送数 据为8 位时,忽略高位字节。SSCR0 的DSS 控制接收数据大小。

4. SSP 状态寄存器(SSSR)


位31~16:保留
位15~12:RFL——接收FIFO 单元数

RFL 等于接收FIFO 单元数减1。注意:读出值为0Xf 时,FIFO 为空或满,软 件必须参看RNE 位。

位11~8:TFL——发送FIFO 单元数

TFL 等于发送FIFO 单元数减1。注意:读出值为0Xf 时,FIFO 为空或满,软 件必须参看TNF 位。

位7:ROR——接收FIFO 溢出(读/写)

0=接收FIFO 没发生溢出

1=试图向满的接收FIFO 写入数据,请求中断 位6:RFS——接收FIFO 服务请求(只读)

0=接收FIFO 单元数少于RFT 阀值,或禁止SSP

1=接收FIFO 单元数等于或多于RFT 阀值,产生中断或DMA 请求 位5:TFS——发送FIFO 服务请求(只读)

0=发送FIFO 单元数超过TFT 阀值,或禁止SSP

1=发送FIFO 单元数等于或低于TFT 阀值,产生中断或DMA 请求 位4:BSY——SSP 忙(只读)

0=SSP 空闲或禁止

1=SSP 正在发送或接收数据

位3:RUN——接收FIFO 不空(只读)

0=接收FIFO 空

1=接收FIFO 不空

位2:TNF——发送FIFO 不满(只读)

0=发送FIFO 满

1=发送FIFO 不满 位1、0:保留。