电气与信息工程学院第14讲281x串行外设接口SPI2电气与信息工程学院DSP技术及应用281x串行外设接口SPI14.1SPI概述•SPI是SerialPeripheralInterface的缩写,最早是由Freescale(原Motorola)公司在其MC68HCxx系列处理器上定义的一种高速同步串行通信接口,区别于SCI的异步通信接口。•同步通信:通信的双方必须使用相同的时钟脉冲,以相同的步调进行数据传输;•异步通信:通信双方可以拥有各自独立的时钟脉冲,可以独自进行数据传输。•SPI以主从方式进行工作,这种模式的通信系统中通常有一个主设备和多个从设备;•在一个基于SPI的系统中,必须至少有一个主控设备,向整个SPI系统提供时钟信号,系统内所有的设备都是基于这个时钟脉冲进行数据的接受或者发送。•SPI是一个环形总线结构。2电气与信息工程学院DSP技术及应用281x串行外设接口SPISPI结构框图2电气与信息工程学院DSP技术及应用281x串行外设接口SPI•4个外部引脚:SPISOMI/SPISIMO/SPISTE/SPICLK•2种工作模式:主工作模式、从工作模式•波特率:125种不同的可编程速率•16级发送和接受FIFO•4种时钟配置方法(由时钟极性和时钟相位控制)•不带相位延迟的下降沿:SPI在SPICLK高有效,SPI在SPICLK下降沿发送数据,上升沿接受数据•带有相位延迟的下降沿:SPICLK高有效,SPI在SPICLK的下降沿的前半周期发送数据,下降沿接受•不带相位延迟的上升沿:SPICLK低有效,SPI在SPICLK的上升沿发送数据,下降沿接受数据•带有相位延迟的上升沿:SPICLK低有效,SPI在SPICLK的下降沿的前半周期发送数据,下降沿接受数据14.2281xSPI模块特点2电气与信息工程学院DSP技术及应用281x串行外设接口SPISPI功能框图2电气与信息工程学院DSP技术及应用281x串行外设接口SPISPI模块信号2电气与信息工程学院DSP技术及应用281x串行外设接口SPI14.3串行外围接口SPI的工作流程SPIShiftRegisterSPIShiftRegisterSPIDevice#1-MasterSPIDevice#2-Slave•数据同步传输和接受•SPI主设备提供时钟shiftshiftclock2电气与信息工程学院DSP技术及应用281x串行外设接口SPISPI发送数据方式三种发送方法:•主控制器发送数据;从控制器发送伪数据;•主控制器发送数据;从控制器发送数据;•主控制器发送伪数据;从控制器发送数据;主控制器可在任何时刻启动数据传送,因为它控制着SPICLK信号,但软件决定了主控制器如何检测从控制器准备发送数据的时间。2电气与信息工程学院DSP技术及应用281x串行外设接口SPISPI主机与从机的连接SPI功能框图SPIRXBUF.15-0SPIDAT.15-0SPICLKSPISOMISPISIMOLSPCLKbaudrateclockpolarityclockphaseC28x-SPI主工作模式SPITXBUF.15-0LSBMSBTXFIFO_0TXFIFO_15RXFIFO_0RXFIFO_152电气与信息工程学院DSP技术及应用281x串行外设接口SPI主工作模式•在主工作模式中,MASTER/SLAVE=1,SPI通过SPCLK引脚为整个网络提供串行时钟。数据从SPISIMO引脚输出,从SPISOMI输入。•写入SPIDAT或SPITXBUF的数据启动SPISIMO引脚的数据发送,首先是最高有效位;同时,接收到的数据通过SPISOMI引脚移入SPIDAT的最低有效位。•当规定了一定数目的数据位通过SPIDAT进行转移时,将发生下面的事件:•SPIDAT中的内容传输到SPIRXBUF;•SPIINTFLAG位置1;•若发送缓冲器SPIXBUF中有有效数据,该情况由SPISTS中的TXBUFFULL位表示出来,这个数据被传送到SPIDAT并且被发送;所有的数据位移出SPIDAT后,SPICLK停止;•若SPIINTENA(SPICTL.0)被置位,可以确定中断。SPI功能框图SPIRXBUF.15-0SPIDAT.15-0SPICLKSPISOMISPISIMOclockphaseC28x-SPI从模式工作SPITXBUF.15-0MSBLSBTXFIFO_0TXFIFO_15RXFIFO_0RXFIFO_152电气与信息工程学院DSP技术及应用281x串行外设接口SPISPI从模式工作•在从工作模式中,MASTER/SLAVE=0,数据在引脚SPISIMO移入;SPICLK的输入频率应不大于CLKOUT的4分频。•当接收到主设备的SPICLK信号的适当边缘时,写入SPIDAT或SPITXBUF寄存器的数据被发送到网络。当要发送的所有字符都移出SPIDAT后,写入SPITXBUF的数据被传输到SPIDAT。•如果TALK位(SPICTL.1)被清除,则数据发送被禁止且输出线(SPISOMI)被置于高阻状态,这用于保证只有一个从属设备驱动SPISOMI线。•引脚SPISTE被用作从选择引脚。该引脚上的低有效信号允许从属SPI向串行数据线传送数据。2电气与信息工程学院DSP技术及应用281x串行外设接口SPI14.4SPI数据格式•可编程数据长度1~16•发送数据少于16位时需要左对齐•MSB先发送•接受数据少于16位时需要右对齐•用户程序屏蔽MSB11001001XXXXXXXXXXXXXXXX11001001SPIDAT-Processor#1SPIDAT-Processor#2•4个位(SPICCR.3~0)规定了数据字符中位的个数,当一个完整的字符被处理时,该信息控制状态控制逻辑去计算接收和发送的位的数目。2电气与信息工程学院DSP技术及应用281x串行外设接口SPI14.5SPIFIFO结构2电气与信息工程学院DSP技术及应用281x串行外设接口SPIFIFO说明•发送和接收FIFO都有状态位TXFFST或RXFFST,定义了任一时刻FIFO中可用的字的数目;•当复位位置为1时,可将FIFO的指针复位为0,FIFO将重新开始工作;•当发送FIFO状态位TXFFST与中断触发级位TXFFIL相匹配时,中断触发就会产生,这为SPI的发送和接收提供了一个可编程的中断触发;•SPI中断模式:•接收溢出:RXOVRN•数据接收:SPIINT•发送空:SPIINT•FIFO接收溢出:RXFFIL•FIFO发送空:TXFFIL2电气与信息工程学院DSP技术及应用281x串行外设接口SPI14.6SPI寄存器AddressRegisterName0x007040SPICCRSPI配置控制寄存器0x007041SPICTLSPI工作控制寄存器0x007042SPISTSSPI状态寄存器0x007044SPIBRRSPI波特率寄存器0x007046SPIEMUSPI仿真缓冲寄存器0x007047SPIRXBUFSPI串行接受寄存器0x007048SPITXBUFSPI串行发送寄存器0x007049SPIDATSPI串行数据寄存器0x00704ASPIFFTXSPIFIFO发送寄存器0x00704BSPIFFRXSPIFIFO接受寄存器0x00704CSPIFFCTSPIFIFO控制寄存器0x00704FSPIPRISPI-A极性控制寄存器2电气与信息工程学院DSP技术及应用281x串行外设接口SPISPI-A控制寄存器SPICCR@0x007040012765-4reservedSPICHAR.3-0字长控制位e.g.0000bÞlength=11111bÞlength=16SPISWRESET:在改变配置前清除此位在重新操作开始前设置此位0=SPIflagsreset1=normaloperationCLOCKPOLARITY0=上升沿输出/下降沿输入1=下降沿输入/上升沿输出reserved15-832电气与信息工程学院DSP技术及应用281x串行外设接口SPISPI时钟配置2电气与信息工程学院DSP技术及应用281x串行外设接口SPISPI-A工作控制寄存器SPICTL@0x00704101215-543reservedCLOCKPHASE0=noCLKdelay1=CLKdelayed1/2cycleOVERRUNINTENABLE0=禁止接受溢出中断(SPISTS.7)1=使能接受溢出中断(SPISTS.7)MASTER/SLAVE0=slave1=masterTALK0=transmissiondisabled,outputpinhi-Z’d1=transmissionenabledSPIINTENABLE0=disabled1=enabled2电气与信息工程学院DSP技术及应用281x串行外设接口SPISPI-A波特率寄存器SPIBRR@0x00704415-76-0reservedSPIBITRATESPICLKsignal=LSPCLK(SPIBRR+1)LSPCLK4,SPIBRR=3to127,SPIBRR=0,1,or22电气与信息工程学院DSP技术及应用281x串行外设接口SPISPI-A状态寄存器SPISTS@0x007042764-0SPIINTFLAG(readonly)•传输完成置1•如果SPIINTENA设置(SPICTL.0)则置位•读SPIBRXUF清零RECEIVEOVERRUNFLAG(read/clearonly)•在SPIRXBUF被读取之前下一次接受完成则置1•如果OVERRUNINTENA被设置(SPICTL.4)则中断请求•写1置0reservedreserved15-8TXBUFFULL(readonly)•写SPITXBUF置位•载入SPIDAT清零5SPI-AFIFO发送寄存器SPIFFTX@0x00704A0TXFFIL2SPIFFENATXFFST0TXFFST3TXFFIENA123456789101112131415TXFFIL0TXFFIL1TXFFIL4TXFFIL3TXFFST1TXFFINTCLRTXFFST2TXFFINTTXFFST4TXFIFOSPIRSTTXFIFOStatus(read-only)00000TXFIFOempty00001TXFIFOhas1word00010TXFIFOhas2words00011TXFIFOhas3words10000TXFIFOhas16words.........TXFIFOInterruptLevelInterruptwhenTXFFST4-0andTXFFIL4-0matchSPIFIFOEnhancements0=disable1=enableTXFIFOReset0=reset(pointerto0)1=enableoperationTXFIFOInterrupt(onmatch)Enable0=disable1=enableTXFIFOInterruptFlag(read-only)0=notoccurred1=occurredTXFIFOInterruptFlagClear0=noeffect1=clear.7SPIRESET0=复位1=无影响RXFIFOStatus(read-only)00000RXFIFOempty00001RXFIFOhas1word00010RXFIFOhas2words00011RXFIFOhas3words10000RXFIFOhas16words.........SPI-AFIFO接受寄存器SPIFFRX@0x00704B0RXFFIL2RXFF-OVFCLRRXFFST0RXFFST3RXFFIEN123456789101112131415RXFFIL0RXFFIL1RXFFIL4RXFFIL3RXFFST1RXFFINTCLRRXFFST2RXFFINTRXFFST4RXFIFORESET