logo资料库

spi文档下载(文档(MOTOROLA)的具体实现文档).pdf

第1页 / 共24页
第2页 / 共24页
第3页 / 共24页
第4页 / 共24页
第5页 / 共24页
第6页 / 共24页
第7页 / 共24页
第8页 / 共24页
资料共24页,剩余部分请下载后查看
第20章 串行外设接口(SPITM)
20.1 简介
20.2 状态和控制寄存器
20.3 工作模式
20.3.1 8位与16位工作模式
20.3.2 主控模式和从动模式
20.3.3 SPI错误处理
20.3.4 SPI仅启用接收功能的工作原理
20.3.5 帧SPI模式
20.4 SPI主控模式时钟频率
20.5 低功耗模式下的工作
20.5.1 休眠模式
20.5.2 空闲模式
20.6 与SPI模块相关的特殊功能寄存器
20.7 相关应用笔记
20.8 版本历史
第 20 章 串行外设接口 (SPITM) 目录 本章包括下列主题: 20.1 简介 ............................................................................................................................. 20-2 20.2 状态和控制寄存器 ....................................................................................................... 20-4 20.3 工作模式 ...................................................................................................................... 20-7 20.4 SPI 主控模式时钟频率 .............................................................................................. 20-19 20.5 低功耗模式下的工作 .................................................................................................. 20-20 20.6 与 SPI 模块相关的特殊功能寄存器 ............................................................................ 20-22 20.7 相关应用笔记 ............................................................................................................ 20-23 20.8 版本历史 .................................................................................................................... 20-24 20 接 口 ( S P ) I 串 行 外 设 © 2005 Microchip Technology Inc. DS70067C_CN 第 20-1 页
dsPIC30F 系列参考手册 20.1 简介 串行外设接口(Serial Peripheral Interface,SPI)模块是一个同步串行接口,可用于与其他外设 或者单片机进行通信。这些外设可以是串行 EEPROM、移位寄存器、显示驱动器和 A/D 转换器 等。 SPI 模块与 Motorola 的 SPI 和 SIOP 接口兼容。 dsPIC30F 系列器件在单个器件上提供一个或两个 SPI 模块,具体取决于具体不同的器件。SPI1 和 SPI2 功能相同。很多高引脚数 (64 引脚或更多)封装的器件具有 SPI2 模块,而 SPI1 模块 则是所有的器件都具有的。 注: 在本章中, SPI 模块统称为 SPIx,或分别称为 SPI1 和 SPI2。特殊功能寄存器也使 用类似的符号表示上述类似的意思。例如,SPIxCON 指 SPI1 或 SPI2 模块的控制寄 存器。 SPI 串口包含下列特殊功能寄存器 (SFR): • SPIxBUF:地址位于 SFR 空间,用于缓冲待发送数据和已接收数据。此地址由 SPIxTXB 和 SPIxRXB 寄存器共享。 • SPIxCON:配置模块各种操作模式的控制寄存器。 • SPIxSTAT:显示各种状态条件的状态寄存器。 此外,还有一个 16 位移位寄存器 SPIxSR,此寄存器不映射到存储器空间。该寄存器可用于将数 据移入和移出 SPI 端口。 存储器映射的 SFR (SPIxBUF)是 SPI 数据接收 / 发送寄存器。在内部, SPIxBUF 寄存器实际 上由两个独立的寄存器 (SPIxTXB 和 SPIxRXB)组成。接收缓冲寄存器 SPIxRXB 和发送缓冲 寄存器 SPIxTXB 是两个单向 16 位寄存器。这两个寄存器共享名为 SPIxBUF 的 SFR 地址单元。 如果用户将需要发送的数据写入了 SPIxBUF 地址单元,该数据会在内部写入 SPIxTXB 寄存器。 与此类似,当用户从 SPIxBUF 读取已接收到的数据时,该数据在内部是从 SPIxRXB 寄存器读取 的。这种接收和发送操作的双缓冲可以使数据在后台连续传输。发送和接收可同时进行。 注: 用户无法直接写入 SPIxTXB 寄存器或读取 SPIxRXB 寄存器。所有的读写操作都是 在 SPIxBUF 寄存器中进行的。 SPI 串行接口由以下四个引脚组成: • SDIx:串行数据输入 • SDOx:串行数据输出 • SCKx:移位时钟输入或输出 • SSx:低电平有效从动选择或者帧同步 I/O 脉冲 注: SPI 模块可以配置为使用 3 个或 4 个引脚工作。在 3 引脚模式下,不使用 SSx 引脚。 DS70067C_CN 第 20-2 页 © 2005 Microchip Technology Inc.
第 20 章 串行外设接口 (SPI) 图 20-1: SPI 模块框图 内部 数据总线 寄存器共享地址单元 SPIxBUF SPIxBUF SPIxRXB SPIxTXB 发送 接收 SPIxSR bit 0 从动模式选择 和帧 同步控制 fff 移位 控制 时钟 控制 边沿 选择 辅助 预分频器 1:1 → 1:8 主 预分频器 1, 4, 16, 64 FCY 使能主控时钟 SDIx SDOx SSx SCKx 注:SPIxTXB 和 SPIxRXB 寄存器通过存储器映射到 SPIxBUF 寄存器。 20 接 口 ( S P ) I 串 行 外 设 © 2005 Microchip Technology Inc. DS70067C_CN 第 20-3 页
dsPIC30F 系列参考手册 20.2 状态和控制寄存器 寄存器 20-2: SPIxSTAT:SPI 状态和控制寄存器 高字节: R/W-0 SPIEN bit 15 bit 15 bit 14 bit 13 U-0 - R/W-0 SPISIDL U-0 - U-0 - U-0 - U-0 - U-0 - bit 8 低字节: U-0 - bit 7 R/W-0 HS SPIROV U-0 - U-0 - U-0 - U-0 - R-0 R-0 SPITBF SPIRBF bit 0 SPIEN:SPI 使能位 1 = 使能模块并将 SCKx、 SDOx、 SDIx 和 SSx 配置为串口引脚 0 = 禁止模块 未用:读作 0 SPISIDL:在空闲模式停止位 1 = 当器件进入空闲模式时模块不继续工作 0 = 在空闲模式下模块继续工作 bit 12-7 未用:读作 0 bit 6 bit 5-2 未用:读作 0 bit 1 SPIROV:接收溢出标志位 1= 一个新字节 / 字已完全接收并丢弃。用户软件未读取 SPIxBUF 寄存器中原先的数据。 0 = 没有发生溢出 bit 0 SPITBF:SPI 发送缓冲器满状态位 1 = 未开始发送, SPIxTXB 满 0 = 发送开始, SPIxTXB 空 当 CPU 写 SPIxBUF 地址单元并装载 SPIxTXB 时,该位由硬件自动置位。 当 SPIx 模块将数据从 SPIxTXB 传输到 SPIxSR 时,该位由硬件自动清零。 SPIRBF:SPI 接收缓冲器满状态位 1 = 接收完成, SPIxRXB 满 0 = 接收未完成, SPIxRXB 空 当 SPIx 将数据从 SPIxSR 传输到 SPIxRXB 时,该位由硬件自动置位。 当内核通过读 SPIxBUF 地址单元读 SPIxRXB 时,该位由硬件自动清零。 图注: R = 可读位 HC = 由硬件清零 -n = 复位时的值 W = 可写位 HS = 由硬件置位 1 = 置位 U = 未用位,读作 0 0 = 清零 x = 未知 DS70067C_CN 第 20-4 页 © 2005 Microchip Technology Inc.
第 20 章 串行外设接口 (SPI) 寄存器 20-2: SPIXCON:SPIx 控制寄存器 高字节: U-0 - bit 15 R/W-0 FRMEN R/W-0 SPIFSD U-0 - R/W-0 R/W-0 DISSDO MODE16 R/W-0 SMP R/W-0 CKE bit 8 低字节: R/W-0 SSEN bit 7 R/W-0 CKP R/W-0 MSTEN R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 SPRE<2:0> PPRE<1:0> bit 0 bit 15 bit 14 bit 13 bit 12 bit 11 bit 10 bit 9 bit 8 bit 7 bit 6 bit 5 未用:读作 0 FRMEN: 帧 SPI 支持位 1 = 使能帧 SPI 支持 0 = 禁止帧 SPI 支持 SPIFSD:SSx 引脚上的帧同步脉冲方向控制位 1 = 帧同步脉冲输入 (从动模式) 0 = 帧同步脉冲输出 (主控模式) 未用:读作 0 DISSDO:SDOx 引脚禁止位 1 = 模块不使用 SDOx 引脚。该引脚由相关端口寄存器控制。 0 = SDOx 引脚由模块控制 MODE16:字 / 字节通信选择位 1 = 通信为字宽 (16 位) 0 = 通信为字节宽 (8 位) SMP:SPI 数据输入采样相位位 主控模式: 1 = 输入数据在数据输出时间末尾采样 0 = 输入数据在数据输出时间中间采样 从动模式: 当 SPI 在从动模式下使用时,必须将 SMP 清零。 CKE:SPI 时钟沿选择位 1 = 串行输出数据在有效时钟状态转变为空闲时钟状态时变化 (参见 bit 6) 0 = 串行输出数据在空闲时钟状态转变为有效时钟状态时变化 (参见 bit 6) 注: 在帧 SPI 模式下未使用 CKE 位。在帧 SPI 模式下 (FRMEN = 1),用户应将该位编程为 0。 SSEN:从动选择使能 (从动模式)位 1 = SS 引脚用于从动模式 0 = 模块不使用 SS 引脚。引脚由端口功能控制。 CKP:时钟极性选择位 1 = 空闲状态时钟信号为高电平;有效状态为低电平 0 = 空闲状态时钟信号为低电平;有效状态为高电平 MSTEN:主控模式使能位 1 = 主控模式 0 = 从动模式 20 接 口 ( S P ) I 串 行 外 设 © 2005 Microchip Technology Inc. DS70067C_CN 第 20-5 页
dsPIC30F 系列参考手册 寄存器 20-2: SPIXCON:SPIx 控制寄存器 (续) bit 4-2 bit 1-0 SPRE<2:0>:辅预分频比 (主控模式)位 (支持设置:1:1、 2:1 到 8:1 全部支持) 111 = 辅预分频比 1:1 110 = 辅预分频比 2:1 …… 000 = 辅预分频比 8:1 PPRE<1:0>:主预分频比 (主控模式)位 11 = 主预分频比 1:1 10 = 主预分频比 4:1 01 = 主预分频比 16:1 00 = 主预分频比 64:1 图注: R = 可读位 -n = POR 值 W = 可写位 1 = 置位 U = 未用位,读作 0 0 = 清零 x = 未知 DS70067C_CN 第 20-6 页 © 2005 Microchip Technology Inc.
第 20 章 串行外设接口 (SPI) 20.3 工作模式 以下各节讨论了 SPI 模块灵活的工作模式: • 8 位和 16 位数据发送 / 接收 • 主控模式和从动模式 • 帧 SPI 模式 20.3.1 8 位与 16 位工作模式 控制位 MODE16 (SPIxCON<10>)允许模块在 8 位或 16 位模式下通信。除了接收和发送的位 数外,两种模式的功能是相同的。此外,在阅读本文时还应注意以下各项: • 当 MODE16 (SPIxCON<10>)位的值变化时,模块会复位。因此,在正常工作过程中不应 该改变该位。 • 8 位工作模式下数据是从 SPIxSR 的 bit 7 发送的,而在 16 位工作模式下,则是从 SPIxSR 的 bit 15 发送的。在两种模式下,数据都会移入 SPIxSR 的 bit 0。 • 在 8 位模式下移入 / 移出数据需要 SCKx 引脚上出现 8 个时钟脉冲,而在 16 位模式下则需 要 16 个时钟脉冲。 20.3.2 主控模式和从动模式 图 20-2: SPI 主 / 从连接 处理器 1 [SPI 主机 ] 处理器 2 [SPI 从机 ] SDOx SDIx SDIx SDOx 串行接收缓冲器 (SPIxRXB) 移位寄存器 (SPIxSR) 串行接收缓冲器 (SPIxRXB) 移位寄存器 (SPIxSR) 最高位 最低位 最高位 最低位 串行发送缓冲器 (SPIxTXB) SPI 缓冲器 (SPIxBUF) 串行发送缓冲器 (SPIxTXB) SPI 缓冲器 (SPIxBUF) 串行时钟 SCKx SSx . SCKx SSx (MSTEN(SPIxCON<5> = 1)) (SSEN(SPIxCON<7>)= 1 且 MSTEN(SPIxCON<5> = 0)) 20 注 1: 在从动模式使用 SSx 引脚是可选的。 2: 用户写发送数据和读接收数据都必须通过 SPIxBUF。 SPIxTXB 和 SPIxRXB 寄存器是通过存储器映射到 SPIxBUF 的。 接 口 ( S P ) I 串 行 外 设 © 2005 Microchip Technology Inc. DS70067C_CN 第 20-7 页
dsPIC30F 系列参考手册 20.3.2.1 主控模式 遵循以下步骤将 SPI 模块设置为工作在主控模式: 1. 如果使用中断: • 清零相应 IFSn 寄存器中的 SPIxIF 位。 • 置位相应 IECn 寄存器中的 SPIxIE 位。 • 向相应的 IPCn 寄存器设置 SPIxIP 位。 2. 将所需设置写入 SPIxCON 寄存器,同时 MSTEN (SPIxCON<5>) = 1。 3. 将 SPIROV 位 (SPIxSTAT<6>)清零。 4. 通过将 SPIEN 位 (SPIxSTAT<15>)置位使能 SPI 工作。 5. 将待发送数据写入 SPIxBUF 寄存器。数据一写入 SPIxBUF 寄存器,发送(以及接收)就 会立即开始。 PPRE<1:0> 在主控模式下,系统 时钟 被预分 频,然后作 为串 行时钟 使用。预 分频基于 (SPIxCON<1:0>)和 SPRE<1:0> (SPIxCON<4:2>)位的设置。串行时钟通过 SCKx 引脚输出 到从动器件。仅当有待发送数据时才会产生时钟脉冲。如需了解更多信息,请参阅第 20.4 节“SPI 主控模式时钟频率”。 CKP 和 CKE 位确定在哪个时钟沿发送数据。 待发送数据和已接收数据都分别向 SPIxBUF 寄存器写入和从该寄存器读取。 以下内容描述了主控模式下 SPI 模块的工作原理。 1. 一旦模块被设置为主控工作模式并使能,待发送数据就会写入 SPIxBUF 寄存器。SPITBF (SPIxSTAT<1>)位置位。 2. SPIxTXB 的内容移到移位寄存器 SPIxSR,并且模块将 SPITBF 位清零。 3. 一组 8/16 个时钟脉冲将 8/16 位发送数据从 SPIxSR 移出到 SDOx 引脚,同时将 SDIx 引 脚的数据移入 SPIxSR。 4. 当传输结束后,会发生以下事件: • 中断标志位 SPIxIF 置位。通过将中断使能位 SPIxIE 置位可以允许 SPI 中断。 SPIxIF 标志不会被硬件自动清零。 • 另外,当正在进行的发送和接收操作结束后, SPIxSR 的内容会移到 SPIxRXB 寄存 器。 • SPIRBF (SPIxSTAT<0>)位由模块置位,表明接收缓冲器满。一旦用户代码读 SPIxBUF 寄存器,硬件就会将 SPIRBF 位清零。 5. 当 SPI 模块需要从 SPIxSR 传输数据到 SPIxRXB 时,如果 SPIRBF 位置位 (接收缓冲器 满),模块会将 SPIROV (SPIxSTAT<6>)位置位,表明产生了溢出条件。 6. 只要 SPITBF (SPIxSTAT<1>)清零,用户软件就可以在任何时候将待发送数据写入 SPIxBUF。写入可以与 SPIxSR 移出前面写入的数据同时发生,因此可以允许连续发送。 注: 用户不能直接写 SPIxSR 寄存器。对 SPIxSR 寄存器的所有写入都是通过 SPIxBUF 寄存器进行的。 DS70067C_CN 第 20-8 页 © 2005 Microchip Technology Inc.
分享到:
收藏