串行外设接口(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
XCON1: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 9SMP: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 6CKP:时钟极性选择位
1 = 空闲状态时时钟信号为高电平;工作状态时为低电平 0 = 空闲状态时时钟信号为低电平;工作状态时为高电平
bit 5MSTEN: 主模式使能位
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
XCON1: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