• 沒有找到結果。

串行外设接口 (SPI)

在文檔中 的 64/80/100 引脚 (頁 171-181)

串行外设接口(Serial Peripheral Interface,SPI)模块 是用于同其他外设或单片机器件进行通信的同步串行接 口。这些外设器件可以是串行EEPROM、移位寄存器、

显示驱动器和A/D 转换器等。 SPI 模块与 Motorola 的 SPI 和 SIOP 接口兼容。 PIC24FJ256GB110 系列的所 有器件都包含3 个 SPI 模块。

该模块支持在两种缓冲模式下工作。在标准模式下,数 据通过单个串行缓冲器移动。在增强型缓冲模式下,数 据通过一个8 级深 FIFO 缓冲器移动。

工作于主或从模式时,模块还支持基本的帧SPI 协议。

共支持4 种帧 SPI 配置。

SPI 串行接口由 4 个引脚组成:

• SDIx:串行数据输入

• SDOx:串行数据输出

• SCKx:移位时钟输入或输出

• SSx:低电平有效从选择或帧同步 I/O 脉冲

SPI 模块可以配置为使用 2、3 或 4 个引脚工作。在 3 引 脚模式下,SSx 不使用。在 2 引脚模式下, SDOx 和 SSx 均不使用。

标准和增强型模式下的模块框图如图14-1 和图 14-2 所 示。

注: 本数据手册总结了PIC24F 器件的功能。但 是不应把本手册当作无所不包的参考手册 来使用。更多信息,请参见《PIC24F 系列 参考手册》的 “第

23 章 串行外设接口

(SPI)”(DS39699A_CN)。

注: 在 标 准 或 增 强 型 缓 冲模 式 下,都 不 要 在 SPIxBUF 寄存器上执行读 - 修改 - 写操作

(如针对位的指令)。

注: 在本章中,SPI 模块统称为 SPIx,或分别 称为SPI1、 SPI2 或 SPI3。特殊功能寄存 器 也 使 用 类 似 的 符 号 表 示。例 如,

SPIxCON1 和 SPIxCON2 指 3 个 SPI 模块 中任何一个的控制寄存器。

PIC24FJ256GB110 系列

DS39897B_CN 第 170 页

初稿

 2009 Microchip Technology Inc.

要将SPI 模块设置为工作于标准主模式:

1. 如果使用中断:

a) 将相应 IFS 寄存器中的 SPIxIF 位清零。

b) 将相应 IEC 寄存器中的 SPIxIE 位置 1。

c) 通过写相应IPC 寄存器中的 SPIxIP 位来设 置中断优先级。

2. 将所需的设置写入SPIxCON1 和 SPIxCON2 寄 存器,且MSTEN (SPIxCON1<5>) = 1。

3. 将SPIROV 位 (SPIxSTAT<6>)清零。

4. 通过将SPIEN 位 (SPIxSTAT<15>)置 1 使能 SPI 工作。

5. 将待发送数据写入SPIxBUF 寄存器。发送 (和 接收)在数据写入SPIxBUF 寄存器时立即开始。

要将SPI 模块设置为工作于标准从模式:

1. 将SPIxBUF 寄存器清零。

2. 如果使用中断:

a) 将相应 IFS 寄存器中的 SPIxIF 位清零。

b) 将相应 IEC 寄存器中的 SPIxIE 位置 1。

c) 通过写相应IPC 寄存器中的 SPIxIP 位来设 置中断优先级。

3. 将所需的设置写入SPIxCON1 和 SPIxCON2 寄 存器,且MSTEN (SPIxCON1<5>) = 0。

4. 将SMP 位清零。

5. 如果CKE 位 (SPIxCON1<8>)置 1,则必须将 SSEN位(SPIxCON1<7>)置1来使能SSx引脚。

6. 将SPIROV 位 (SPIxSTAT<6>)清零。

7. 通过将SPIEN 位 (SPIxSTAT<15>)置 1 使能 SPI 工作。

14-1: SPIx 模块框图 (标准模式)

内部数据总线 SDIx

SDOx SSx/FSYNCx

SCKx

SPIxSR bit 0

移位控制

边沿 选择

FCY

1:1/4/16/64

使能主时钟 预分频器

同步

时钟 控制

SPIxBUF 控制

传输 传输

写SPIxBUF 读SPIxBUF

16

SPIxCON1<1:0>

SPIxCON1<4:2>

辅助 预分频器 1:1 至 1:8

 2009 Microchip Technology Inc.

初稿

DS39897B_CN 第 171 页

PIC24FJ256GB110 系列

要将SPI 模块设置为工作于增强型缓冲主模式:

1. 如果使用中断:

a) 将相应 IFS 寄存器中的 SPIxIF 位清零。

b) 将相应 IEC 寄存器中的 SPIxIE 位置 1。

c) 写入相应IPC 寄存器中的 SPIxIP 位。

2. 将所需的设置写入SPIxCON1 和 SPIxCON2 寄 存器,且MSTEN (SPIxCON1<5>) = 1。 3. 将SPIROV 位 (SPIxSTAT<6>)清零。

4. 通过将SPIBEN 位 (SPIxCON2<0>)置 1 选择 增强型缓冲模式。

5. 通过将SPIEN 位 (SPIxSTAT<15>)置 1 使能 SPI 工作。

6. 将待发送数据写入SPIxBUF 寄存器。发送 (和 接收)在数据写入SPIxBUF 寄存器时立即开始。

要将SPI 模块设置为工作于增强型缓冲从模式:

1. 将SPIxBUF 寄存器清零。

2. 如果使用中断:

a) 将相应 IFS 寄存器中的 SPIxIF 位清零。

b) 将相应 IEC 寄存器中的 SPIxIE 位置 1。

c) 通过写相应IPC 寄存器中的 SPIxIP 位来设 置中断优先级。

3. 将所需的设置写入SPIxCON1 和 SPIxCON2 寄 存器,且MSTEN (SPIxCON1<5>) = 0。 4. 将SMP 位清零。

5. 如果CKE 位置 1,则必须将 SSEN 位置 1 来使 能SSx 引脚。

6. 将SPIROV 位 (SPIxSTAT<6>)清零。

7. 通过将SPIBEN 位 (SPIxCON2<0>)置 1 选择 增强型缓冲模式。

8. 通过将SPIEN 位 (SPIxSTAT<15>)置 1 使能 SPI 工作。

14-2: SPIx 模块框图 (增强型模式)

内部数据总线 SDIx

SDOx SSx/FSYNCx

SCKx

SPIxSR bit0

移位控制

边沿 选择

FCY

1:1/4/16/64

使能主时钟 预分频器

辅助 预分频器 1:1 至 1:8

同步

时钟 控制

SPIxBUF 控制

传输 传输

写SPIxBUF 读SPIxBUF

16

SPIxCON1<1:0>

SPIxCON1<4:2>

8 级深 FIFO 发送缓冲器 8 级深 FIFO

接收缓冲器

PIC24FJ256GB110 系列

DS39897B_CN 第 172 页

初稿

 2009 Microchip Technology Inc.

寄存器

14-1: SPIxSTAT:SPIx 状态和控制寄存器

R/W-0 U-0 R/W-0 U-0 U-0 R-0 R-0 R-0

SPIEN(1) — SPISIDL — — SPIBEC2 SPIBEC1 SPIBEC0

bit 15 bit 8

R-0 R/C-0 R/W-0 R/W-0 R/W-0 R/W-0 R-0 R-0 SRMPT SPIROV SRXMPT SISEL2 SISEL1 SISEL0 SPITBF SPIRBF

bit 7 bit 0

图注: C = 可清零位

R = 可读位 W = 可写位 U = 未实现位,读为 0

-n = POR 时的值 1 = 置 1 0 = 清零 x = 未知

bit 15

SPIEN:SPIx 使能位

(1)

1 = 使能模块并将 SCKx、 SDOx、 SDIx 和 SSx 配置为串口引脚 0 = 禁止模块

bit 14 未实现:读为

0

bit 13

SPISIDL:空闲模式停止位

1 = 当器件进入空闲模式时,模块停止工作 0 = 在空闲模式下模块继续工作

bit 12-11 未实现:读为

0

bit 10-8

SPIBEC2:SPIBEC0:SPIx 缓冲器计数位 (在增强型缓冲模式下有效)

主模式:

SPI 传输等待的数目。

从模式:

SPI 传输未读的数目。

bit 7

SRMPT: 移位寄存器 (SPIxSR)空位 (在增强型缓冲模式下有效)

1 = SPIx 移位寄存器为空,等待发送或接收 0 = SPIx 移位寄存器非空

bit 6

SPIROV:接收溢出标志位

1 = 一个新字节 / 字已完全接收并丢弃。用户软件尚未读取 SPIxBUF 寄存器中的先前数据。

0 = 未发生溢出

bit 5

SRXMPT: 接收 FIFO 空位 (在增强型缓冲模式下有效)

1 = 接收 FIFO 为空 0 = 接收 FIFO 非空

bit 4-2

SISEL2:SISEL0:SPIx 缓冲器中断模式位 (在增强型缓冲模式下有效)

111 = 当 SPIx 发送缓冲器已满时产生中断 (SPITBF 位置 1)

110 = 当最后一位移入 SPIxSR,从而导致发送 FIFO 为空时产生中断 101 = 当最后一位移出 SPIxSR 时产生中断,此时发送完成

100 = 当一个数据移入 SPIxSR,从而发送 FIFO 至少有一个空位时产生中断 011 = 当 SPIx 接收缓冲器已满时产生中断 (SPIRBF 位置 1)

010 = 当 SPIx 接收缓冲器为 3/4 满或更满时产生中断 001 = 当接收缓冲器中有数据时产生中断 (SRMPT 位置 1)

000 = 当接收缓冲器中的最后数据被读取,从而导致缓冲器为空时产生中断 (SRXMPT 位置 1)

1: 如果 SPIEN = 1,这些功能必须在使用前分配给可用的

RPn 引脚。更多信息,请参见第 9.4 节 “外设引脚 选择”。

 2009 Microchip Technology Inc.

初稿

DS39897B_CN 第 173 页

PIC24FJ256GB110 系列

bit 1

SPITBF:SPIx 发送缓冲器满状态位 1 = 发送尚未开始, SPIxTXB 已满 0 = 发送开始, SPIxTXB 为空

在标准缓冲模式下:

当CPU 通过写 SPIxBUF 存储单元装入 SPIxTXB 时,该位由硬件自动置 1。

当SPIx 模块将数据从 SPIxTXB 传送到 SPIxSR 时,该位由硬件自动清零。

在增强型缓冲模式下:

当CPU 通过写 SPIxBUF 存储单元装入最后的可用缓冲单元时,该位由硬件自动置 1。

当有缓冲单元可用于CPU 写操作时,该位由硬件自动清零。

bit 0

SPIRBF:SPIx 接收缓冲器满状态位 1 = 接收完成, SPIxRXB 已满 0 = 接收未完成, SPIxRXB 为空

在标准缓冲模式下:

当SPIx 将数据从 SPIxSR 传送到 SPIxRXB 时,该位由硬件自动置 1。

当内核通过读SPIxBUF 存储单元读 SPIxRXB 时,该位由硬件自动清零。

在增强型缓冲模式下:

当SPIx 通过将数据从 SPIxSR 传送到缓冲器填充最后未读的缓冲单元时,该位由硬件自动置 1。

当有缓冲单元可用于从SPIxSR 进行传送时,该位由硬件自动清零。

寄存器

14-1: SPIxSTAT:SPIx 状态和控制寄存器 (续)

1: 如果 SPIEN = 1,这些功能必须在使用前分配给可用的

RPn 引脚。更多信息,请参见第 9.4 节 “外设引脚 选择”。

PIC24FJ256GB110 系列

DS39897B_CN 第 174 页

初稿

 2009 Microchip Technology Inc.

寄存器

14-2: SPI

X

CON1:SPIx 控制寄存器 1

U-0 U-0 U-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0

— — — DISSCK(1) DISSDO(2) MODE16 SMP CKE(3)

bit 15 bit 8

R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 SSEN(4) CKP MSTEN SPRE2 SPRE1 SPRE0 PPRE1 PPRE0

bit 7 bit 0

图注:

R = 可读位 W = 可写位 U = 未实现位,读为 0

-n = POR 时的值 1 = 置 1 0 = 清零 x = 未知

bit 15-13 未实现:读为

0

bit 12

DISSCK:禁止 SCKx 引脚位 (仅限 SPI 主模式)

(1)

1 = 禁止内部 SPI 时钟;引脚用作 I/O

0 = 使能内部 SPI 时钟

bit 11

DISSDO:禁止 SDOx 引脚位

(2)

1 = 模块不使用 SDOx 引脚;引脚用作 I/O 0 = SDOx 引脚由模块控制

bit 10

MODE16:字 / 字节通信选择位 1 = 采用字宽 (16 位)通信 0 = 采用字节宽 (8 位)通信

bit 9

SMP:SPIx 数据输入采样阶段位

主模式:

1 = 在数据输出时间的末端采样输入数据 0 = 在数据输出时间的中间采样输入数据

从模式:

当在从模式下使用SPIx 时,必须将 SMP 清零。

bit 8

CKE:SPIx 时钟边沿选择位

(3)

1 = 串行输出数据在时钟从工作状态转变为空闲状态时变化 (见 bit 6)

0 = 串行输出数据在时钟从空闲状态转变为工作状态时变化 (见 bit 6)

bit 7

SSEN:从选择使能 (从模式)位

(4)

1 = SSx 引脚用于从模式

0 = 模块不使用 SSx 引脚;引脚由端口功能控制

bit 6

CKP:时钟极性选择位

1 = 空闲状态时时钟信号为高电平;工作状态时为低电平 0 = 空闲状态时时钟信号为低电平;工作状态时为高电平

bit 5

MSTEN: 主模式使能位

1 = 主模式 0 = 从模式

1: 如果 DISSCK = 0

SCKx 必须配置为可用的 RPn 引脚。更多信息,请参见第 9.4 节 “外设引脚选择”。

2: 如果 DISSDO = 0,

SDOx 必须配置为可用的 RPn 引脚。更多信息,请参见第 9.4 节 “外设引脚选择”。

3: 在帧 SPI 模式下不使用 CKE 位。在帧 SPI 模式 (FRMEN = 1

)下,用户应将该位编程为

0

4: 如果 SSEN = 1,

SSx 必须配置为可用的 RPn 引脚。更多信息,请参见第 9.4 节 “外设引脚选择”。

 2009 Microchip Technology Inc.

初稿

DS39897B_CN 第 175 页

PIC24FJ256GB110 系列

bit 4-2

SPRE2:SPRE0:辅助预分频比位 (主模式)

111 = 辅助预分频比 1:1 110 = 辅助预分频比 2:1 ...

000 = 辅助预分频比 8:1

bit 1-0

PPRE1:PPRE0:主预分频比位 (主模式)

11 = 主预分频比 1:1 10 = 主预分频比 4:1 01 = 主预分频比 16:1 00 = 主预分频比 64:1

寄存器

14-2: SPI

X

CON1:SPIx 控制寄存器 1 (续)

1: 如果 DISSCK = 0,

SCKx 必须配置为可用的 RPn 引脚。更多信息,请参见第 9.4 节 “外设引脚选择”。

2: 如果 DISSDO = 0,

SDOx 必须配置为可用的 RPn 引脚。更多信息,请参见第 9.4 节 “外设引脚选择”。

3: 在帧 SPI 模式下不使用 CKE 位。在帧 SPI 模式 (FRMEN = 1)下,用户应将该位编程为 0。

4: 如果 SSEN = 1,

SSx 必须配置为可用的 RPn 引脚。更多信息,请参见第 9.4 节 “外设引脚选择”。

寄存器

14-3: SPIxCON2:SPIx 控制寄存器 2

R/W-0 R/W-0 R/W-0 U-0 U-0 U-0 U-0 U-0

FRMEN SPIFSD SPIFPOL — — — — —

bit 15 bit 8

U-0 U-0 U-0 U-0 U-0 U-0 R/W-0 R/W-0

— — — — — — SPIFE SPIBEN

bit 7 bit 0

图注:

R = 可读位 W = 可写位 U = 未实现位,读为 0

-n = POR 时的值 1 = 置 1 0 = 清零 x = 未知

bit 15

FRMEN:帧 SPIx 支持位 1 = 使能帧 SPIx 支持 0 = 禁止帧 SPIx 支持

bit 14

SPIFSD:SSx 引脚帧同步脉冲方向控制位 1 = 帧同步脉冲输入 (从模式)

0 = 帧同步脉冲输出 (主模式)

bit 13

SPIFPOL:帧同步脉冲极性位 (仅限帧模式)

1 = 帧同步脉冲高电平有效 0 = 帧同步脉冲低电平有效

bit 12-2 未实现:读为

0

bit 1

SPIFE: 帧同步脉冲边沿选择位

1 = 帧同步脉冲与第一个位时钟同时发生 0 = 帧同步脉冲先于第一个位时钟

bit 0

SPIBEN: 增强型缓冲器使能位

1 = 使能增强型缓冲器

0 = 禁止增强型缓冲器 (传统模式)

在文檔中 的 64/80/100 引脚 (頁 171-181)