《东北林业大学dsp原理课件第十章spi接口及其应用》由会员分享,可在线阅读,更多相关《东北林业大学dsp原理课件第十章spi接口及其应用(50页珍藏版)》请在金锄头文库上搜索。
1、第十章 SPI接口及其应用,C28x处理器提供的串行外设接口(SPI)是一个高速同步的串行输入输出口。SPI的通信速率和通信数据长度都是可编程的。SPI通常用于DSP处理器和外部外设以及其它处理器之间进行通信。主要应用于:显示驱动器、ADC以及日历时钟等器件间接口,也可以采用主从模式实现多处理器间的通信。 F2812处理器的SPl接口有一个16级的接收和传输FIFO,这样可以减少CPU的开销。,在采用SPI实现数据通信的过程中,多个SPI器件互联的系统中的一个设备必须设置成Master模式,其他设置为Slave模式。 主设备驱动总线上的时钟信号为其他从设备提供通信时钟。,串行外围接口SPI的工
2、作流程,数据同步传输和接受 SPI主设备提供时钟,10.1 SPI模块功能概述,SPI 模块特点,4个外部引脚:SPISOMI:SPI从输出/主输入引脚;SPISIMO:SPI从输入/主输出引脚;SPISTE:SPI从发送使能引脚;SPICLK:SPI串行时钟引脚。 2种工作模式:主工作模式、从工作模式 波特率:125种不同的可编程速率 数据字长:可编程116个数据长度 4种时钟模式(由时钟极性和时钟相位控制) 无相位延迟的下降沿:SPICLK高有效,SPI在SPICLK下降沿发送数据,上升沿接受数据。 有相位延迟的下降沿:SPICLK高有效,SPI在SPICLK的下降沿之前半个周期发送数据,
3、下降沿接受数据。 无相位延迟的上升沿:SPICLK低有效,SPI在SPICLK的上升沿发送数据,下降沿接受数据 带有相位延迟的上升沿:SPICLK低有效,SPI在SPICLK的下降沿之前半个周期发送数据,下降沿接受数据。,接收和发送可同时操作(可以通过软件屏蔽发送功能)。 通过中断或查询方式实现发送和接收操作。 9个SPI模块控制寄存器。 增强特点: 延时发送控制 16级发送/接受FIFO,SPI 模块特点,10.2 SPI的数据传输,SPI主设备负责产生系统时钟,并决定整个SPI网络的通信速率。所有的SPI设备都采用相同的接口方式,可以通过调整处理器内部寄存器改变时钟的极性和相位。SPI设备
4、传输数据过程中总是先发送或接收高字节数据,每个时钟周期接收器或收发器左移一位数据,对于小于16位的数据在发送之前必须左对齐,如果接收的数据小于16位则采用软件将无效的数据位屏蔽。如下图所示。,SPI 数据格式的调整,可编程数据长度116 发送数据少于16位时需要左对齐 MSB (高字节)先发送接受数据小于16位时必须右对齐 用户程序屏蔽无效的高字节,11001001XXXXXXXX,XXXXXXXX11001001,SPIDAT - Processor #1,SPIDAT - Processor #2,C28x - SPI 主模式,SPI接口有主和从两种操作模式,MASTER/SLAVE位(S
5、PICTL2)选择操作模式以及SPICLK信号的来源。,SPI 功能框图,SPICLK,SPISOMI,SPISIMO,clock phase,C28x - SPI 从模式,MSB,LSB,10.2.1 主控制器模式,工作在主模式下(MASTE/SLAVE1),SPI在SPICLK引脚为整个串行通信网络提供时钟。数据从SPISIMO引脚输出,并锁存SPISOMI引脚上输入的数据。SPIBRR寄存器确定通信网络的数据传输的速率,通过SPIBRR寄存器可以配置126种不同的数据传输率。写数据到SPIDAT或SPITXBUF寄存器,启动SPISOMI引脚上的数据发送,首先发送的是最高有效位(MSB)
6、。同时,接收的数据通过SPISOMI引脚移入SPIDAT的最低有效位。当传输完特定的位数后,接收到的数据被发送到SPIRXBUF寄存器,以备CPU读取。数据存放在SPIRXBUF寄存器中,采用右对齐的方式存储。,当指定数量的数据位已经通过SPIDAT位移位后,则会发生下列事件:SPIDAT中的内容发送到SPlRXBUF寄存器中; SPI INT FLAG位(SPISTS.6)置1; 如果在发送缓冲器SPIRTXBUF中还有有效的数据(SPISTS寄存器中的TXBUF FULL位标志是否存在有效数据),则这个数据将被传送到SPIDAT寄存器并被发送出去。否则所有位从SPIDAT寄存器移出后,SP
7、ICLC时钟立即停止;如果SPI INT ENA位(SPICTL.0)置1,则产生中断。在典型应用中,SPISET引脚作为从SPI控制器的片选控制信号,在主SPI设备同从SPI设备之间传送信息的过程中, SPISET置成低电平;当数据传送完毕后,该引脚置高。,10.2.2 从设备模式,在从模式中(MASTER/SLAVE0),SPISOMI引脚为数据输出引脚,SPISIMO引脚为数据输入引脚。SPICLK引脚为串行移位时钟的输入,该时钟由网络主控制器提供,传输率也由该时钟决定。SPICLK输入频率应不超过CLKOUT频率的四分之。当从SPI设备检测到来自网络主控制器的SPICLK信号的合适时钟
8、边沿时,已经写入SPIDAT或SPITXBUF寄存器的数据被发送到网络上。要发送字符的所有位移出SPIDAT寄存器后,写入到SPITXBUF寄存器的数据将会传送到SPIDAT寄存器。如果向SPITXBUF写入数据时没有数据发送,数据将立即传送到SPIDAT 寄存器。为了能够接收数据,从SPI设备等待网络主控制器发送SPICLK信号,然后将SPISIMO引脚上的数据移入到SPIDAT寄存器中。如果从控制器同时也发送数据,而且SPITXBUF还没有装载数据,则必须在SPICLK开始之前把数据写入到SPITXBUF或SPIDAT寄存器。,当TALK位(SPICTL.1)清零,数据发送被禁止,输出引脚
9、(SPISOMl)处于高阻状态。如果在发送数据期间将TALK位(SPICTL.1)清零,即使SPISOMl引脚被强制置成高阻状态,也要完成当前的字符传输,这样可以保证SPI设备能够正确的接收数据。这个TALK位允许在网络上有多个从SPI设备,但在某一时刻只能有一个从设备来驱动SPISOMI。SPISTE引脚用做从动选择引脚时,如果该引脚为低,允许从SPI设备向串行总线发送数据;当SPISTE为高电平时,从SPI串行移位寄存器停止工作,串行输出引脚被置成高阻状态。在同一网络上可以连接多个从SPI设备,但同一时刻只能有一个设备起作用。,10.2.3 FIFO操作,系统在上电复位时,SPI工作在标准
10、SPI模式,禁止FIFO功能。FIFO的寄存器SPIFFTX ,SPIFFRX,SPIFFCT不起作用。通过将SPIFFTX寄存器中的SPIFFEN的位置为1,使能FIFO模式。SPIRST能在操作的任一阶段复位FIFO模式。FIFO模式有两个中断,一个用于发送FIFO,SPITXINT,另一个用于接收FIFO,SPIINT/SPIRXINT。对于标准SPI FIFO接收,产生接收错误或者接收FIFO溢出都会产生SPIINT/SPIRXINT中断。对于标准SPI的接收和发送来说,唯一的SPIINT将被禁止且这个中断将服务于SPI接收FIFO中断。,发送和接收都能产生CPU中断。一旦发送FIFO
11、状态位TXFFST(位128)和中断触发级别位TXFFIL(位40)匹配,就会触发中断。这给SPI的发送和接收提供了一个可编程的中断触发器。接收FIFO的触发级别位的默认值是0x11111,发送FIFO的触发级别位的默认值是0x00000。发送和接收缓冲器使用2个16*16 FIFO,标准SPI功能的一个字的发送缓冲器作为在发送FIFO和移位寄存器间的一个发送缓冲器。移位寄存器的最后一位被移出后,发送缓冲器将从发送FIFO装载。,延时的发送: FIFO 中的发送字发送到发送移位寄存器的速率是可编程的。SPIFFCT寄存器位FFTXDLY7FFTXDLY0定义了在两个字发送间的延时。这个延时以S
12、PI串行时钟周期的数量来定义。该8位寄存器可以定义最小0个串行时钟周期的延迟和最大256个串行时钟周期的延时。0时钟周期延时的SPI模块能将FIFO字一位紧接一位地移位,连续发送数据。256个时钟周期延迟的SPI模块能在最大延迟模式下发送数据,每个FIFO字的移位间隔256个SPI时钟周期的延时。该可编程延时的特点,使得SPI接口可以与许多速率较慢的SPI外设如EEPROM、ADC、DAC等方便地直接连接。,(8)FIFO状态位:发送和接收FIFO都有状态位TXFFST或RXFFST(位120),状态位定义任何时刻在FIFO中可获得的字的数量。当发送FIFO复位位TXFIFO和接收复位位RXF
13、IFO被设置为1时,将使FIFO指针指向0。一旦这两个复位位被清除为0,则FIFO将重新开始操作。,10.3 SPI-A 寄存器,10.3.1 SPI-A 控制寄存器 SPICCR 0x007040,0,1,2,7,6,5-4,reserved,SPI CHAR.3-0,字长控制位 字符长度number+1 e.g. 0000b length = 11111b length = 16,SPI SW RESET:在改变配置前清除此位 在重新操作开始前设置此位0 = SPI 复位1 = 正常操作,CLOCK POLARITY0 = 上升沿输出/下降沿输入1 = 下降沿输入/上升沿输出,reserv
14、ed,15-8,3,10.3.2 SPI-A 工作控制寄存器 SPICTL 0x007041,0,1,2,15-5,4,3,reserved,CLOCK PHASE 0 = 无时钟延时 1 = CLK 延时 周期,OVERRUN INT ENABLE 0 = 禁止接受溢出中断(SPISTS.7) 1 = 使能接受溢出中断(SPISTS.7),MASTER/SLAVE0 = 从1 = 主,TALK 0 = 禁止发送,引脚输出高阻状态 1 = 使能发送,SPI INT ENABLE0 = disabled1 = enabled,10.3.3 SPI-A 状态寄存器 SPISTS 0x007042,
15、SPI INT FLAG (只读) 传输完成后置1 如果 SPI INT ENA位 (SPICTL.0)置位,使能中断 读 SPIBRXUF清除该位,SPI模块支持125种不同的波特率和4种不同的时钟方式。当SPI工作在主模式时,SPICLK引脚为通信网络提供时钟;当SPI工作在从模式时,SPICLK引脚接收外部时钟信号。在从模式下,SPI时钟的SPICLK引脚使用外部时钟源,而且要求该时钟信号的频率不能大于CPU时钟的1/4; 在主动模式下,SPICLK引脚向网络输出时钟,且该时钟频率不能大于LSPCLK频率的1/4。,10.3.4 SPI-A 波特率寄存器 SPIBRR 0x007044,
16、SPI波特率的计算方法:,下式中,LSPCLK是DSP的低速外设时钟频率;SPIBRR是主动SPI模块SPIBRR的值。 要确定SPIBRR需要设置的值,用户必须知道DSP的系统时钟(LSPCLK)频率和用户希望使用的通信波特率。,10.3.4 SPI-A 波特率寄存器 SPIBRR 0x007044,10.3.5 SPI仿真缓冲寄存器(SPIRXEMU),10.3.6 SPI串行接收缓冲寄存器(SPIRXBUF),10.3.7 SPI串行发送缓冲寄存器(SPITXBUF),10.3.8 SPI串行数据寄存器(SPIDAT),10.3.9 SPI-A FIFO 发送寄存器 SPIFFTX 0x00704A,10.3.10 SPI-A FIFO 接收寄存器 SPIFFRX 0x00704B,10.3.11 SPIFFCT寄存器,10.3.12 SPI优先级控制寄存器(SPIPRI704Fh),