第11章STC单片机SPI原理及实现何宾2015.02STCSPI模块结构及功能SPI模块寄存器组SPI模块配置及时序SPI模块设计实例本章主要内容使用SPI进行数据的传输,不但需要有源方(发送数据的一方)提供的时钟信号。而且,还需要有源方(发送数据的一方)提供的同步信号。基于SPI的通信方式是典型的高速同步双向数据传输方式。这种通信方式在工业界应用非常广泛。典型地,SPI接口主要用于在EEPROM、FLASH、实时时钟、AD转换器、数字信号处理器和数字信号解码器之间的数据传输。STCSPI模块结构及功能--SPI传输特点STC公司系列单片机提供了另一种高速串行通信接口——SPI接口。SPI接口为数据传输提供了主模式和从模式两种工作模式。在主模式下,支持高达3MHzbps的数据传输率。如果单片机的主频在20~36MHz,工作频率为12MHz时,可以提供更高的工作速度。在从模式下,速度受限,STC推荐数据率在SYSclk/4内的数据传输率。此外,SPI接口提供了完成标志和写冲突标志保护。STCSPI模块结构及功能--STC单片机SPI模块功能在SPI接口中,提供了4个信号用于进行高速同步数据传输。包括:MOSI主设备输出和从设备输入信号,实现主设备(发出数据)到从设备(接收数据)的数据传输。当STC的SPI接口作为主设备传输数据时,该信号方向为输出,指向从设备;当STC的SPI接口作为从设备接收数据时,该信号方向为输入,由从设备指向STC单片机的SPI接口。STCSPI模块结构及功能---SPI接口信号MISO主设备输入和从设备输出信号,实现从设备(发出数据)到主设备(接收数据)的数据传输。当STC的SPI接口作为主设备传输数据时,该信号方向为输入,由从设备指向STC单片机的SPI接口;当STC的SPI接口作为从设备接收数据时,该信号方向为输出,指向从设备。注:不管单片机的SPI接口是作为主设备还是从设备,MOSI和MISO传输方向都是相反的。STCSPI模块结构及功能---SPI接口信号SCLK串行时钟信号,它由主设备发出,指向从设备。在串行时钟的控制下,用于同步主设备和从设备之间MISO和MOSI信号线上数据的传输过程。当主设备启动一次数据传输过程时,自动产生8个SCLK信号给从设备。在SCLK信号的上升沿或者下降沿到来的时候,移出一位数据。一次传输可以传输一个字节的数据。注:(1)在一些应用中,将多个设备SPI接口的SCLK、MOSI、MISO信号连接在一起。通过MOSI信号,将数据从主设备发送到从设备。(2)如果将SPCTL寄存器的SPEN位设置为0(复位值为0),则禁止SPI接口,分配给这些信号的引脚可以当作普通I/O引脚使用。STCSPI模块结构及功能---SPI接口信号SS从设备选择信号。通过该信号,主设备用于选择处于从模式的SPI设备。在主模式和从模式下,SS信号的用法不同。在主模式下,SPI接口只能有一个主设备,不存在选择主机的问题,在该模式下,该位不是必须的。在主模式下,将主设备的SS引脚通过10KΩ电阻上拉到高电平。每一个从设备的SS信号与主设备的SS信号连接,由主设备控制电平的高低,以便主设备选择从设备。在从模式下,不管接收还是发送该信号必须有效。因此,在一次数据开始传输之前必须将SS信号拉低。STCSPI模块结构及功能---SPI接口信号通过SS信号,SPI从设备确认是否被选中。如果满足下面的其中一个条件,则忽略该信号:如果禁止SPI接口。如果配置为SPI主设备,即SPCTL寄存器的MSTR位置为1,并且P1.2/SS配置为输出。如果SPCTL寄存器的SSIG位置为高,该引脚用作普通I/O功能。注:即使STC单片机的SPI接口配置为主设备,但是仍然可以通过拉低SS引脚,将其配置为从设备。通过设置寄存器相应的位使能该特性。STCSPI模块结构及功能---SPI接口信号STC15系列单片机的SPI接口提供的三种数据通信方式。单一主设备和单一从设备方式STCSPI模块结构及功能--SPI接口的数据通信方式在这种通信配置模式中,从设备的SSIG位设置为0,SS用于选择从设备。SPI主设备可以使用任何引脚,包括P1.2/SS引脚来驱动SS信号。主设备的SPI接口和从设备的SPI的8位移位寄存器构成一个循环的16位移位寄存器。在该模式下,主设备既可以向从设备发送数据,又可以读取从设备发来的数据。STCSPI模块结构及功能--SPI接口的数据通信方式双设备方式设备可以互为主设备和从设备STCSPI模块结构及功能--SPI接口的数据通信方式在该配置模式中,当没有SPI数据传输时,两个设备均可作为主机,将SSIG清零并将P1.2/SS引脚配置为准双向模式。当其中一个器件启动传输时,它将P1.2/SS配置为输出并驱动为低电平,这样就将另一个设备变成从设备。双方初始化时,将自己配置成忽略SS引脚的从模式。当一方要主动发送数据时,先检测SS引脚的电平。如果SS引脚为高,就将自己设置为忽略SS引脚的主模式。在平时,通信双方将自己配置成没有选中的从模式。在该模式下,MISO、MOSI、SCLK信号均为输入。当多个单片机的SPI接口以该模式并联时不会发生总线冲突。STCSPI模块结构及功能--SPI接口的数据通信方式单一主设备和多个从设备方式在该配置中,从设备的SSIG位置为0,通过SS信号,选择对应的从设备。主设备的SPI接口可以使用任何端口来驱动SS引脚。STCSPI模块结构及功能--SPI接口的数据通信方式SPI模块核心是一个8位的移位寄存器和数据缓冲器,可以同时接收和发送数据。在数据传输的过程中,将接收和发送的数据保存在数据缓冲器。STCSPI模块结构及功能--SPI模块内部结构对于主模式来说,如果要发送一个字节的数据,只需要将该数据写到SPDAT寄存器中。在该模式下,SS信号不是必需的;在从模式下,必须在SS信号变为有效并接收到合适的时钟信号后,才可以开始进行数据传输。在从模式下,如果完成一个字节的数据传输,则SS信号变高,这个字节立刻被硬件逻辑标记为接收完成。随后,SPI接口准备接收下一个数据。STCSPI模块结构及功能--SPI模块内部结构SPI控制寄存器SPCTL该寄存器位于STC单片机特殊功能寄存器地址为0xCE的位置。当复位后,该寄存器的值为“00000100”。SSIGSS引脚忽略控制位。当该位为1时,MSTR位确定单片机是主设备还是从设备;当该位为0时,SS引脚用于确定单片机是主设备还是从设备。SS引脚可作为普通I/O。SPI模块寄存器组--SPI控制寄存器SPI控制寄存器SPCTL各位的含义比特B7B6B5B4B3B2B1B0名字SSIGSPENDORDMSTRCPOLCPHASPR1SPR0SPENSPI使能控制位。当该位为1时,使能SPI接口;当该位为0时,禁止SPI接口,此时所有SPI接口的信号引脚都可以作为普通I/O。DORD设定SPI数据发送和接收的位顺序。当该位为1时,先发送数据字的最低有效位(LSB);当该位为0时,先发送数据字的最高有效位(MSB)。MSTR主从模式选择位。当该位为1时,主模式;当该位为0时,从模式。SPI模块寄存器组--SPI控制寄存器SPI模块寄存器组--SPI控制寄存器CPOL:SPI时钟极性选择位。当该位为1时,空闲情况下,SCLK为高电平。SCLK的前一个时钟沿为下降沿,而后一个时钟沿为上升沿。当该位为0时,空闲情况下,SCLK为低电平。SCLK的前一个时钟沿为上升沿,而后一个时钟沿为下降沿。CPHA:SPI时钟相位选择位。当该位为1时,在SCLK的前时钟沿驱动数据,并在后时钟沿采样;当该位为0时,在SS为低时驱动数据,在SCLK的后时钟沿改变数据,并在前时钟沿采样。SPR1和SPR0时钟速率选择位SPI模块寄存器组--SPI控制寄存器组SPR1和SPR0位的含义SPR1SPR0时钟(SCLK)00CPU_CLK/401CPU_CLK/810CPU_CLK/1611CPU_CLK/32SPI状态寄存器SPSTAT该寄存器位于STC单片机特殊功能寄存器地址为0xCD的位置。当复位后,该寄存器的值为“00xxxxxx”。SPI模块寄存器组--SPI状态寄存器SPI状态寄存器SPSTAT各位的含义比特B7B6B5B4B3B2B1B0名字SPIFWCOL------------SPIFSPI传输完成标志。当完成一次SPI数据传输后,硬件将该位设置为1。此时,如果允许SPI中断,则产生中断。当SPI处于主模式,且SSIG为0时,如果SS引脚为输入并驱动为低电平时,硬件也将该标志置为1,表示改变模式WCOLSPI写冲突标志。在数据传输的过程中,如果对SPI数据寄存器SPDAT进行写操作,硬件将该标志置1。SPI模块寄存器组--SPI状态寄存器SPI数据寄存器SPDAT该寄存器位于STC单片机特殊功能寄存器地址为0xCF的位置。当复位后,该寄存器的值为“00000000”。SPI模块寄存器组--SPI数据寄存器SPI数据寄存器SPDAT各位的含义比特B7B6B5B4B3B2B1B0名字8位数据中断优先级寄存器2该寄存器位于STC单片机特殊功能寄存器地址为0xB5的位置。当复位后,该寄存器的值为“xxx00000”。PSPISPI中断优先级控制位。当该位为0时,SPI中断为最低优先级中断(优先级为0);当该位为1时,SPI中断为最高优先级中断(优先级1)。SPI模块寄存器组--中断优先级寄存器2中断优先级控制寄存器IP2各位的含义比特B7B6B5B4B3B2B1B0名字------PX4PPWMFDPPWMPSPIPS2中断允许寄存器IE2该寄存器位于STC单片机特殊功能寄存器地址为0xAF的位置。当复位后,该寄存器的值为“x000000”。ESPISPI中断允许位。当该位为1时,允许SPI中断;当该位为0时,禁止SPI中断。SPI模块寄存器组--中断允许寄存器2中断允许寄存器IE2各位的含义比特B7B6B5B4B3B2B1B0名字--ET4ET3ES4ES3ET2ESPIES2PCA模块引脚切换寄存器AUXR1(P_SW1)该寄存器位于STC单片机特殊功能寄存器地址为0xA2的位置。当复位后,该寄存器的值为“00000000”。SPI模块寄存器组--控制SPI引脚位置寄存器PCA模块引脚切换寄存器AUXR1(P_SW1)各位的含义比特B7B6B5B4B3B2B1B0名字S1_S1S1_S0CCP_S1CCP_S0SPI_S1SPI_S00DPSSPI_S1和SPI_S0确定SPI接口在单片机上引脚的位置SPI模块寄存器组--控制SPI引脚位置寄存器SPI_S1和SPI_S0各位的含义SPI_S1SPI_S0功能00选择SPI接口分别对应于单片机P1.2/SS、P1.3/MOSI、P1.4/MISO、P1.5/SCLK引脚01选择SPI接口分别对应于单片机P2.4/SS_2、P2.3/MOSI_2、P2.2/MISO_2、P2.1/SCLK_2引脚10选择SPI接口分别对应于单片机P5.4/SS_3、P4.0/MOSI_3、P4.1/MISO_3、P4.3/SCLK_3引脚11无效SPI模块配置及时序--SPI配置模式STC15系列单片机进行SPI通信时,通过SPEN位、SSIG位、SS引脚和MSTR位,控制其工作模式SPI模块配置及时序--SPI配置模式SPENSSIGSS引脚/P1.2MSTR主/从模式MISO/P1.4MOSI/P1.3SCLK/P1.5功能0XP1.2/SSX禁止SPIMISOP1.4MOSI/P1.3SCLK/P1.5禁止SPI1000从模式输出输入输入选择作为从设备1010从模式,未选中高阻输入输入未被选中。MISO为高阻状态,以避免总线冲突1001-0从模式输出输入输入