©2008MicrochipTechnologyInc.DS70272A_CN第35-1页串行外设接口(SPI)35第35章串行外设接口(SPI)(第二部分)目录本章包括下列主题:35.1简介......................................................................35-235.2SPI寄存器................................................................35-335.3工作模式..................................................................35-835.4主模式时钟频率...........................................................35-2135.5节能模式下的工作.........................................................35-2235.6与SPI1模块相关的特殊功能寄存器.........................................35-2335.7相关应用笔记.............................................................35-2435.8版本历史.................................................................35-25dsPIC30F系列参考手册DS70272A_CN第35-2页©2008MicrochipTechnologyInc.35.1简介串行外设接口(SerialPeripheralInterface,SPI)模块是用于同其他外设或单片机器件进行通信的同步串行接口。这些外设可以是串行EEPROM、移位寄存器、显示驱动器和A/D转换器等。SPI模块与Motorola的SPI和SIOP接口兼容。dsPIC30FSMPS和数字电源转换器件系列的每种器件都提供一个SPI模块,称为SPI1。SPI1串行接口由4个引脚组成:•SDI1:串行数据输入•SDO1:串行数据输出•SCK1:移位时钟输入或输出•SS1:低电平有效从选择或帧同步I/O脉冲可将SPI1模块配置为使用2、3或4个引脚进行工作。在3引脚模式下,不使用SS1引脚。在2引脚模式下,不使用SDO1和SS1引脚。SPI1模块的框图如图35-1所示。图35-1:SPI1模块框图注:dsPIC30FSMPS和数字电源转换器件系列中的某些器件不包含SS1引脚,因而不支持帧SPI和从选择功能。关于可用的SPI引脚,请参考特定的器件数据手册。内部数据总线SDI1SDO1SS1SCK1SPI1SRbit0移位控制边沿选择FCY主1:1/4/16/64使能预分频器同步SPI1BUF控制传输传输写SPI1BUF读SPI1BUF16SPI1CON11:0SPI1CON14:2主时钟时钟控制辅助预分频器1:1至1:8SPI1RXBSPI1TXB©2008MicrochipTechnologyInc.DS70272A_CN第35-3页第35章串行外设接口(SPI)(第二部分)串行外设接口(SPI)3535.2SPI寄存器SPI模块由一个用于移入和移出数据的16位移位寄存器SPI1SR和一个缓冲寄存器SPI1BUF组成。控制寄存器SPI1CON1和SPI1CON2用于配置模块。另外,状态寄存器SPI1STAT用来表明各种状态条件。35.2.1状态和控制寄存器SPI1STAT、SPI1CON1和SPI1CON2寄存器提供了用于控制模块操作的接口。寄存器35-1、寄存器35-2和寄存器35-3中给出了这些寄存器的详细说明。•SPI1STAT:SPI1状态和控制寄存器此状态寄存器用来表明各种状态条件,如接收溢出、发送缓冲区满以及接收缓冲区满。此寄存器还可用于指定空闲模式下模块的工作,且包含一个可使能和禁止模块的位。•SPI1CON1:SPI1控制寄存器1此控制寄存器指定时钟预分频比、主/从模式、字/字节通信、时钟极性和时钟/数据引脚操作。•SPI1CON2:SPI1控制寄存器2此控制寄存器使能或禁止帧SPI操作。此寄存器还指定帧同步脉冲的方向、极性和边沿选择。35.2.2SPI1BUF寄存器SPI1BUF是SPI1的数据接收/发送寄存器。SPI1BUF寄存器实际上由两个独立的寄存器组成:发送缓冲寄存器SPI1TXB和接收缓冲寄存器SPI1RXB。这两个单向的16位寄存器共用SPI1BUF的SFR地址。如果用户应用程序将要发送的数据写入SPI1BUF地址,在内部该数据会被写入SPI1TXB寄存器。与此类似,当用户应用程序从SPI1BUF读取接收到的数据时,在内部会从SPI1RXB寄存器读取该数据。这种方法对接收和发送操作进行了双重缓冲,允许在后台连续传输数据。发送和接收可同时进行。此外,还有一个16位的移位寄存器SPI1SR,这个寄存器未被映射到存储空间。它用于将数据移入和移出SPI端口。dsPIC30F系列参考手册DS70272A_CN第35-4页©2008MicrochipTechnologyInc.寄存器35-1:SPI1STAT:SPI1状态和控制寄存器高字节:R/W-0U-0R/W-0U-0U-0U-0U-0U-0SPIEN—SPISIDL—————bit15bit8低字节:U-0R/C-0U-0U-0U-0U-0R-0R-0—SPIROV————SPITBFSPIRBFbit7bit0bit15SPIEN:SPI1使能位1=使能模块并将SCK1、SDO1、SDI1和SS1引脚配置为串行端口引脚0=禁止模块bit14未实现:读为0bit13SPISIDL:空闲模式停止位1=当器件进入空闲模式时,模块停止工作0=在空闲模式下模块继续工作bit12-7未实现:读为0bit6SPIROV:接收溢出标志位1=一个新字节/字已被完全接收并丢弃。用户应用程序没有读取先前保存在SPI1BUF寄存器中的数据。0=未发生溢出bit5-2未实现:读为0bit1SPITBF:SPI1发送缓冲区满状态位1=发送尚未开始,SPI1TXB为满0=发送已开始,SPI1TXB为空当CPU写SPI1BUF存储单元并装入SPI1TXB时,该位由硬件自动置1。当SPI1模块将数据从SPI1TXB传输到SPI1SR时,该位由硬件自动清零。bit0SPIRBF:SPI1接收缓冲区满状态位1=接收完成,SPI1RXB为满0=接收未完成,SPI1RXB为空当SPI1模块将数据从SPI1SR传输到SPI1RXB时,该位由硬件自动置1。当内核通过读取SPI1BUF存储单元读SPI1RXB时,该位由硬件自动清零。图注:C=可清零位R=可读位W=可写位U=未实现位,读为0-n=POR时的值1=置10=清零x=未知©2008MicrochipTechnologyInc.DS70272A_CN第35-5页第35章串行外设接口(SPI)(第二部分)串行外设接口(SPI)35寄存器35-2:SPI1CON1:SPI1控制寄存器1高字节:U-0U-0U-0R/W-0R/W-0R/W-0R/W-0R/W-0———DISSCKDISSDOMODE16SMPCKE(1)bit15bit8低字节:R/W-0R/W-0R/W-0R/W-0R/W-0R/W-0R/W-0R/W-0SSENCKPMSTENSPRE2:0PPRE1:0bit7bit0bit15-13未实现:读为0bit12DISSCK:禁止SCK1引脚的位(仅限SPI主模式)1=禁止内部SPI时钟,引脚用作I/O0=使能内部SPI时钟bit11DISSDO:禁止SDO1引脚的位1=模块不使用SDO1引脚,引脚用作I/O0=SDO1引脚由模块控制bit10MODE16:字/字节通信选择位1=采用字宽(16位)通信0=采用字节宽(8位)通信bit9SMP:SPI1数据输入采样阶段位主模式:1=在数据输出时间的末端采样输入数据0=在数据输出时间的中间采样输入数据从模式:当SPI1用于从模式时,必须将SMP清零bit8CKE:SPI1时钟边沿选择位(1)1=串行输出数据在时钟从工作状态转变为空闲状态时变化(见bit6)0=串行输出数据在时钟从空闲状态转变为工作状态时变化(见bit6)bit7SSEN:从选择使能位(从模式)1=SS1引脚用于从模式0=模块不使用SS1引脚,此引脚由端口功能控制bit6CKP:时钟极性选择位1=时钟信号的空闲状态为高电平;工作状态为低电平0=时钟信号的空闲状态为低电平;工作状态为高电平bit5MSTEN:主模式使能位1=主模式0=从模式bit4-2SPRE2:0:辅助预分频比位(主模式)111=辅助预分频比1:1110=辅助预分频比2:1•••000=辅助预分频比8:1dsPIC30F系列参考手册DS70272A_CN第35-6页©2008MicrochipTechnologyInc.寄存器35-2:SPI1CON1:SPI1控制寄存器1(续)bit1-0PPRE1:0:主预分频比位(主模式)11=主预分频比1:110=主预分频比4:101=主预分频比16:100=主预分频比64:1注1:在帧SPI模式下不使用CKE位。在帧SPI模式(FRMEN=1)下,用户应用程序应将该位编程为0。图注:R=可读位W=可写位U=未实现位,读为0-n=POR时的值1=置10=清零x=未知©2008MicrochipTechnologyInc.DS70272A_CN第35-7页第35章串行外设接口(SPI)(第二部分)串行外设接口(SPI)35寄存器35-3:SPI1CON2:SPI1控制寄存器2高字节:R/W-0R/W-0R/W-0U-0U-0U-0U-0U-0FRMENSPIFSDFRMPOL—————bit15bit8低字节:U-0U-0U-0U-0U-0U-0R/W-0U-0——————FRMDLY—bit7bit0bit15FRMEN:帧SPI1支持位1=使能帧SPI1支持(SS1引脚用作帧同步脉冲输入/输出)0=禁止帧SPI1支持bit14SPIFSD:帧同步脉冲方向控制位1=帧同步脉冲输入(从器件)0=帧同步脉冲输出(主器件)bit13FRMPOL:帧同步脉冲极性位1=帧同步脉冲为高电平有效0=帧同步脉冲为低电平有效bit12-2未实现:读为0bit1FRMDLY:帧同步脉冲边沿选择位1=帧同步脉冲与第一个位时钟一致0=帧同步脉冲超前第一个位时钟bit0未实现:用户应用程序不能将该位设置为1图注:R=可读位W=可写位U=未实现位,读为0-n=POR时的值1=置10=清零x=未知dsPIC30F系列参考手册DS70272A_CN第35-8页©2008MicrochipTechnologyInc.35.3工作模式以下各小节讨论了SPI模块灵活的工作模式:•8位和16位数据发送/接收•主模式和从模式•帧SPI模式•SPI1只接收操作•SPI1错误处理35.3.18位和16位数据发送/接收MODE16控制位(SPI1CON110)允许模块在8位或16位模式下进行通信。除了接收和发送的位数外,两种模式的功能是相同的。此外,在阅读本文时应注意以下各项:•当MODE16位的值发生变化时,模块会被复位。因此,在正常工作期间不应该改变该位。•8位工作模式下数据是从SPI1SR寄存器的bit7发送出去的,而在16位工作模式下,则是从SPI1SR的bit15发送出去的。在两种模式下,接收时数据都会移入SPI1SR的bit0。•在8位模式下发送或者接收数据时,需要SCK1引脚上出现8个时钟脉冲,而在16位模式下则需要16个时钟脉冲。35.3.2主模式和从模式数据的收发可看作在一个模块的移位寄存器的最高位(MSb)和