1、第9章 同步通信1单片机原理及应用系统设计SPI接口I2C通信技术9.1 SPI9.1 SPI接口接口3 IAP15W4K58S4IAP15W4K58S4单片单片机集成了同步串行外设机集成了同步串行外设接口(接口(Serial Serial PeriphralPeriphral InterfaceInterface),),SPISPI)。)。SPISPI接口是一种接口是一种全双工、高全双工、高速、同步的通信总线速、同步的通信总线,有两种操作模式:有两种操作模式:主模主模式和从模式式和从模式。在主模式。在主模式中支持高达中支持高达3 Mbps3 Mbps的速的速度,还具有传输完成标度,还具有传输
2、完成标志和写冲突标志保护。志和写冲突标志保护。4 当前常用的单片机与外设之间进行数据传输的串行总当前常用的单片机与外设之间进行数据传输的串行总线主要有线主要有SPISPI和和I I2 2C C总线总线。SPISPI总线是以总线是以同步串行三线同步串行三线方式进行通信(一条串行时方式进行通信(一条串行时钟线钟线SCLKSCLK,一条主出从线,一条主出从线MOSIMOSI,一条主入从出线,一条主入从出线MISOMISO)I I2 2C C总线以总线以同步串行二线同步串行二线方式进行通信(一条时钟线方式进行通信(一条时钟线CLKCLK,一条数据线,一条数据线DATADATA)9.1 SPI9.1 S
3、PI接口接口5 IAP15W4K58S4IAP15W4K58S4单片机集成了同步串行外设接口(单片机集成了同步串行外设接口(Serial Serial PeriphralPeriphral Interface Interface),),SPISPI)。)。SPISPI接口接口是是 Motorola Motorola 公司推出的一公司推出的一 种同步串行接口技术,种同步串行接口技术,是一种是一种全双工、高速、同步的通信总线。全双工、高速、同步的通信总线。有两种操作模式:有两种操作模式:主模式和从模式主模式和从模式。在主模式中支持高。在主模式中支持高达达3 Mbps3 Mbps的速度,还具有传输完
4、成标志和写冲突标志保的速度,还具有传输完成标志和写冲突标志保护。护。9.1.1 SPI9.1.1 SPI的的结构结构69.1.1 SPI9.1.1 SPI的的结构结构7 SPISPI的核心是一个的核心是一个8 8位移位寄存器和数据缓冲器,数据可位移位寄存器和数据缓冲器,数据可以同时发送和接收以同时发送和接收。在在SPISPI数据的传输过程中,发送和接数据的传输过程中,发送和接收的数据都存储在数据缓冲器中。收的数据都存储在数据缓冲器中。对于对于主模式主模式,若要发送一字节数据,只需将这个数据写,若要发送一字节数据,只需将这个数据写到到SPDATSPDAT寄存器中。主模式下寄存器中。主模式下 信号
5、不是必需的信号不是必需的;但是在;但是在从模式从模式下,必须在下,必须在 信号变为信号变为有效并接收到合适时钟信号有效并接收到合适时钟信号后,方可进行数据传输后,方可进行数据传输。在从模式下,如果一个字节传。在从模式下,如果一个字节传输完成后,输完成后,信号变为高电平,这个字节立即被硬性逻辑信号变为高电平,这个字节立即被硬性逻辑标志为接收完成,标志为接收完成,SPISPI接口准备接收下一个数据。接口准备接收下一个数据。9.1.2 9.1.2 SPISPI接口的接口的引脚引脚8MOSIMOSI(Master Out Slave In(Master Out Slave In,主出从入主出从入):主
6、器件的输出和从:主器件的输出和从器件的输入,用于主器件到从器件的串行数据传输。当器件的输入,用于主器件到从器件的串行数据传输。当SPISPI作为主器件时,该信号是输出;当作为主器件时,该信号是输出;当SPISPI作为从器件时,该信作为从器件时,该信号是输入。数据传输时最高位在先,低位在后。根据号是输入。数据传输时最高位在先,低位在后。根据SPISPI规规范,多个从机共享一根范,多个从机共享一根MOSIMOSI信号线。在时钟边界的前半周信号线。在时钟边界的前半周期,主机将数据放在期,主机将数据放在MOSIMOSI信号线上,从机在该边界处获取信号线上,从机在该边界处获取该数据。该数据。MISOMI
7、SO(Master In Slave Out(Master In Slave Out,主入从出主入从出):从器件的输出和主:从器件的输出和主器件的输入,用于实现从器件到主器件的数据传输。器件的输入,用于实现从器件到主器件的数据传输。SPISPI规规范中,一个主机可连接多个从机,因此,主机的范中,一个主机可连接多个从机,因此,主机的MISOMISO信号信号线会连接到多个从机上,或者说,多个从机共享一根线会连接到多个从机上,或者说,多个从机共享一根MISOMISO信号线。当主机与一个从机通信时,其他从机应将其信号线。当主机与一个从机通信时,其他从机应将其MISOMISO引脚驱动置为高阻状态。引脚驱
8、动置为高阻状态。9.1.2 9.1.2 SPISPI接口的接口的引脚引脚9 SCLKSCLK(SPI ClockSPI Clock,串行时钟信号串行时钟信号):串行时钟信号是主):串行时钟信号是主器件的输出和从器件的输入,用于同步主器件和从器件之器件的输出和从器件的输入,用于同步主器件和从器件之间在间在MOSIMOSI和和MOSOMOSO线上的串行数据传输。当主器件启动线上的串行数据传输。当主器件启动一次数据传输时,自动产生一次数据传输时,自动产生8 8个个SCLKSCLK时钟周期信号给从机。时钟周期信号给从机。在在SCLKSCLK的每个跳变处(上升沿或下降沿)移出一位数据。的每个跳变处(上升
9、沿或下降沿)移出一位数据。所以,一次数据传输可以传输一个字节的数据。所以,一次数据传输可以传输一个字节的数据。SCLKSCLK、MOSIMOSI和和MISOMISO通常用于将两个或更多个通常用于将两个或更多个SPISPI器件连器件连接在一起。数据通过接在一起。数据通过MOSIMOSI由主机传送到从机,通过由主机传送到从机,通过MISOMISO由从机传送到主机。由从机传送到主机。SCLKSCLK信号在主模式时为输出,在从信号在主模式时为输出,在从模式时为输入。如果模式时为输入。如果SPISPI接口被禁止,则这些引脚都可作接口被禁止,则这些引脚都可作为为I/OI/O使用。使用。9.1.2 9.1.
10、2 SPISPI接口的接口的引脚引脚10 SS(Slave SelectSlave Select,从机选择信号):这是一个输入信号,主器件用,从机选择信号):这是一个输入信号,主器件用它来选择处于从模式的它来选择处于从模式的SPISPI模块。主模式和从模式下,模块。主模式和从模式下,的使用方法的使用方法不同。在主模式下,不同。在主模式下,SPISPI接口只能有一个主机,不存在主机选择问接口只能有一个主机,不存在主机选择问题。在该模式下题。在该模式下 不是必需的。主模式下通常将主机的不是必需的。主模式下通常将主机的 引脚通引脚通过过10k10k的电阻上拉高电平。每一个从机的的电阻上拉高电平。每一
11、个从机的 接主机的接主机的I/OI/O口,由主口,由主机控制电平高低,以便主机选择从机。在从模式下,不论发送还机控制电平高低,以便主机选择从机。在从模式下,不论发送还是接收,是接收,信号必须有效。因此,在一次数据传输开始之前必须将信号必须有效。因此,在一次数据传输开始之前必须将 下拉为低电平。下拉为低电平。SPISPI主机可以使用主机可以使用I/OI/O口选择一个口选择一个SPISPI器件作为当前器件作为当前的从机。的从机。SPISPI从器件通过其从器件通过其SSSS引脚确定是否被选择。如果满足下面的条件之引脚确定是否被选择。如果满足下面的条件之一,一,就被忽略:就被忽略:(1 1)如果)如果
12、SPISPI功能被禁止,即功能被禁止,即SPENSPEN位为位为0 0(复位值)。(复位值)。(2 2)如果)如果SPISPI配置为主机,即配置为主机,即MSTRMSTR位为位为1 1,并且,并且P1.2P1.2配置为输出配置为输出(P1M0.2=0,P1M1.2=1P1M0.2=0,P1M1.2=1)。)。(3 3)如果)如果 引脚被忽略,即引脚被忽略,即SSIGSSIG位为位为1 1,该引脚配置用于,该引脚配置用于I/OI/O端口功端口功能。能。SS9.1.3 SPI9.1.3 SPI接口的相关特殊功能寄存器接口的相关特殊功能寄存器11 与与SPISPI接口有关的特殊功能寄存器有接口有关的
13、特殊功能寄存器有SPISPI控制寄存器控制寄存器SPCTLSPCTL、SPISPI状态寄存器状态寄存器SPSTATSPSTAT和和SPISPI数据寄存器数据寄存器SPDATSPDAT。SS(1)SPISPI控制寄存器控制寄存器SPCTLSPCTL。SPISPI控制寄存器控制寄存器SPCTLSPCTL的每一位都有控制的每一位都有控制含义,地址为含义,地址为CEHCEH,复位值为,复位值为0000 0000B0000 0000B,各位定义如表各位定义如表9.19.1所示。所示。位号B7B6B5B4B3B2B1B0位名称SSIGSPENDORDMSTR CPOL CPHASPRISPRO表表9.1
14、SPI9.1 SPI控制寄存器控制寄存器SPCTLSPCTL各位定义各位定义9.1.3 SPI9.1.3 SPI接口的相关特殊功能寄存器接口的相关特殊功能寄存器12 SSIGSSIG:引脚忽略控制位。若(:引脚忽略控制位。若(SSIGSSIG)=1=1,由,由MSTRMSTR确定器件为主机还是从机,引确定器件为主机还是从机,引脚被忽略,并可配置为脚被忽略,并可配置为I/OI/O功能;若(功能;若(SSIGSSIG)功能)功能=0=0,由,由 引脚的输入信号确定器引脚的输入信号确定器件为主机还是从机。件为主机还是从机。SPEN SPEN:SPISPI使能位。若(使能位。若(SPENSPEN)=1
15、=1,SPISPI使能;若(使能;若(SPENSPEN)=0,SPI=0,SPI被禁止,所被禁止,所有有SPISPI信号引脚用作信号引脚用作I/OI/O功能。功能。DORD DORD:SPISPI数据发送与接收顺序的控制位。若(数据发送与接收顺序的控制位。若(DORDDORD)=1=1,SPISPI数据的传送顺数据的传送顺序为由低到高;若(序为由低到高;若(DORDDORD)=0=0,SPISPI数据的传送顺序为由高到低。数据的传送顺序为由高到低。MSTR MSTR:SPISPI主主/从模式位。若(从模式位。若(MSTRMSTR)=1=1,主机模式;若(,主机模式;若(MSTRMSTR)=0=
16、0,从机模,从机模式。式。SPISPI接口的工作状态还与其他控制位有关,具体选择方法见表接口的工作状态还与其他控制位有关,具体选择方法见表9.29.2所示。所示。CPOL CPOL:SPISPI时钟信号极性选择位。若时钟信号极性选择位。若CPOL=1CPOL=1,SPISPI空闲时空闲时SCLKSCLK为高电平,为高电平,SCLKSCLK的前跳变沿为下降沿,后跳变沿为上升沿;若的前跳变沿为下降沿,后跳变沿为上升沿;若CPOL=0CPOL=0,SPISPI空闲时空闲时SCLKSCLK为低电平,为低电平,SCLKSCLK的前跳变沿为上升沿,后跳变沿为下降沿。的前跳变沿为上升沿,后跳变沿为下降沿。C
17、PHA CPHA:SPISPI时钟信号相位选择位。若时钟信号相位选择位。若CPHA=1CPHA=1,SPISPI数据由前跳变沿驱动到口线,数据由前跳变沿驱动到口线,后跳变沿采样;若后跳变沿采样;若CPHA=0CPHA=0,当,当 引脚为低电平(且引脚为低电平(且SSIGSSIG为为0 0)时数据被驱动到口线,)时数据被驱动到口线,并在并在SCLKSCLK的后跳变沿被改变,在的后跳变沿被改变,在SCLKSCLK的前跳变沿被采样。注意:的前跳变沿被采样。注意:SSIGSSIG为为1 1时操作时操作未定义。未定义。SPR1 SPR1、SPR0SPR0:主模式时:主模式时SPISPI时钟速率选择位。时
18、钟速率选择位。0000表示表示fSYSfSYS/4/4;0101表示表示fSYSfSYS/16/16;1010表示表示fsysfsys/64/64,1111表示表示fsysfsys/128/128。9.1.3 SPI9.1.3 SPI接口的相关特殊功能寄存器接口的相关特殊功能寄存器13SPENSSIG/ssMSTRSPI模式MISOMOSISCLK备注0XP1.2X禁止P1.4P1.3P1.5SPI信号引脚作普通I/O使用1000从机输出输入输入选择为从机1010从机(未选中)高阻输入输入未被选中,MISO引脚处于高阻状态,以避免总线冲突10010从机输出输入输入配置为输入或准双向口,SSIG
19、为0,如果选择 为低电平,则被选择为从机;当 变为低电平时,会自动将MSTR控制位清0。1011主机(空闲)输入高阻高阻当主机空闲时,MOSI和SCLK为高阻状态以避免总线冲突。用户必须将SCLK上拉或下拉(根据CPOL确定)以避免SCLK出现悬浮状态从机(激活)输出输出主机激活时,MOSI和SCLK为强退挽输出11P1.20从机输出输入输入 1主机输入输出输出 SSSSSSSS表表9.2 SPI接口的主从工作模式选择接口的主从工作模式选择9.1.3 SPI接口的相关特殊功能寄存器接口的相关特殊功能寄存器14(2 2)SPISPI状态寄存器状态寄存器SPSTATSPSTAT。SPISPI状态寄
20、存器状态寄存器SPSTATSPSTAT记录了记录了SPISPI接口的接口的传输完成标志与写冲突标志,地址为传输完成标志与写冲突标志,地址为CDHCDH,复位值为,复位值为00 xx 00 xx xxxxBxxxxB,各位,各位定义如表定义如表9.39.3所示。所示。位号B7B6B5B4B3B2B1B0位名称SPIFWCOL-表表9.3 SPI9.3 SPI状态寄存器状态寄存器SPSTATSPSTAT各位定义各位定义 SPIF:SPISPIF:SPI传输完成标志。当一次传输完成时,传输完成标志。当一次传输完成时,SPIFSPIF置位。此时,如置位。此时,如果果SPISPI中断允许,则向中断允许,
21、则向CPUCPU申请中断。当申请中断。当SPISPI处于主模式且(处于主模式且(SSIGSSIG)=0=0时,如果时,如果 为输入且为低电平,则为输入且为低电平,则SPIFSPIF也将置位,表示也将置位,表示“模式改模式改变变”(由主机模式变为从机模式由主机模式变为从机模式)。SPIFSPIF标志通过软件向其写标志通过软件向其写“1”1”而清零。而清零。WCOLWCOL:SPISPI写冲突标志。当写冲突标志。当1 1个数据还在传输,又向数据寄存器个数据还在传输,又向数据寄存器SPDATSPDAT写入数据时,写入数据时,WCOLWCOL被置位以指示数据冲突。在这种情况被置位以指示数据冲突。在这种
22、情况下,当前发送的数据继续发送,而新写入的数据将丢失。下,当前发送的数据继续发送,而新写入的数据将丢失。WCOLWCOL标志通过软件向其写标志通过软件向其写“1”1”而清零而清零.。9.1.3 SPI9.1.3 SPI接口的相关特殊功能寄存器接口的相关特殊功能寄存器15(2 2)SPISPI状态寄存器状态寄存器SPSTATSPSTAT。SPISPI状态寄存器状态寄存器SPSTATSPSTAT记录了记录了SPISPI接口的接口的传输完成标志与写冲突标志,地址为传输完成标志与写冲突标志,地址为CDHCDH,复位值为,复位值为00 xx 00 xx xxxxBxxxxB,各位,各位定义如表定义如表9
23、.39.3所示。所示。位号B7B6B5B4B3B2B1B0位名称SPIFWCOL-表表9.3 SPI9.3 SPI状态寄存器状态寄存器SPSTATSPSTAT各位定义各位定义 SPIF:SPISPIF:SPI传输完成标志。当一次传输完成时,传输完成标志。当一次传输完成时,SPIFSPIF置位。此时,如果置位。此时,如果SPISPI中中断允许,则向断允许,则向CPUCPU申请中断。当申请中断。当SPISPI处于主模式且(处于主模式且(SSIGSSIG)=0=0时,如果时,如果 为为输入且为低电平,则输入且为低电平,则SPIFSPIF也将置位,表示也将置位,表示“模式改变模式改变”(由主机模式变为
24、从由主机模式变为从机模式机模式)。SPIFSPIF标志通过软件向其写标志通过软件向其写“1”1”而清零。而清零。WCOL WCOL:SPISPI写冲突标志。当写冲突标志。当1 1个数据还在传输,又向数据寄存器个数据还在传输,又向数据寄存器SPDATSPDAT写写入数据时,入数据时,WCOLWCOL被置位以指示数据冲突。在这种情况下,当前发送的数被置位以指示数据冲突。在这种情况下,当前发送的数据继续发送,而新写入的数据将丢失。据继续发送,而新写入的数据将丢失。WCOLWCOL标志通过软件向其写标志通过软件向其写“1”1”而清零而清零.。9.1.3 SPI9.1.3 SPI接口的相关特殊功能寄存器
25、接口的相关特殊功能寄存器16 SPISPI数据寄存器数据寄存器SPDATSPDAT。其地址是。其地址是CFHCFH,用于保存通信数据,用于保存通信数据字节。字节。与与SPI SPI 中断管理有关的控制位。中断管理有关的控制位。SPI SPI中断允许控制位中断允许控制位ESPIESPI:位于:位于IE2IE2寄存器寄存器的的B1B1位。(位。(ESPIESPI)=1=1,允许,允许SPISPI中断;(中断;(ESPIESPI)=0=0,禁止,禁止SPISPI中断。如果允许中断。如果允许 SPISPI中断,发生中断,发生SPISPI中断时,中断时,CPUCPU就会跳转到中断服务程序的就会跳转到中断
26、服务程序的入口地址入口地址004BH004BH处执行中断服务程序。注意,在中断服务程处执行中断服务程序。注意,在中断服务程序中,必须把序中,必须把SPISPI中断请求标志清零(通过写中断请求标志清零(通过写1 1实现)。实现)。SPISPI中断优先级控制器中断优先级控制器PSPIPSPI:PSPIPSPI位于位于IP2IP2的的B1B1位。利用位。利用PSPIPSPI可以将可以将SPISPI中断设置为中断设置为2 2个优先级。个优先级。9.1.4 SPI接口的数据通信接口的数据通信171.SPI1.SPI接口的数据通信方式接口的数据通信方式IAP15W4K58S4IAP15W4K58S4单片机
27、单片机SPISPI接口的数据通信方式有接口的数据通信方式有3 3种:单主机种:单主机-单从机方式单从机方式,双器件双器件方式(器件可互为主机和从机)和单主机方式(器件可互为主机和从机)和单主机-多从机方式。多从机方式。(1 1)单主机)单主机-单从机方式:此方式电路连接如图单从机方式:此方式电路连接如图9-29-2所示。主机将所示。主机将SPISPI控制寄存器控制寄存器SPCTLSPCTL的的SSIGSSIG及及MSTRMSTR位置位置1 1,选择主机模式,此时主机可使用任何一个,选择主机模式,此时主机可使用任何一个I/OI/O端口端口(包括(包括 引脚,可当作普通引脚,可当作普通I/OI/O
28、)来控制从机的)来控制从机的 引脚;从机将引脚;从机将SPISPI控制寄存控制寄存器器SPCTLSPCTL的的SSIGSSIG及及MSTRMSTR位置位置0 0,选择从机模式,当从机,选择从机模式,当从机 引脚被拉为低电平时,引脚被拉为低电平时,从机被选中。从机被选中。图 9-2 SPI接口的单主机-单从机方式9.1.4 SPI接口的数据通信接口的数据通信18 当当主机向主机向SPISPI数据寄存器数据寄存器SPDATSPDAT写入一个字节时,立即写入一个字节时,立即启动一个连续的启动一个连续的8 8位数据移位通信过程:主机的位数据移位通信过程:主机的SCLKSCLK引脚向引脚向从机的从机的S
29、CLKSCLK引脚发出一串脉冲,在这串脉冲的控制下,刚引脚发出一串脉冲,在这串脉冲的控制下,刚写入主机的写入主机的SPISPI数据寄存器数据寄存器SPDATSPDAT的数据从主机的数据从主机MOSIMOSI引脚移引脚移出,送到从机的出,送到从机的MOSIMOSI引脚,同时之前写入从机引脚,同时之前写入从机SPISPI数据寄存数据寄存器器SPDATSPDAT的数据从从机的的数据从从机的MISOMISO引脚移出,送到主机的引脚移出,送到主机的MISOMISO引脚。因此,主机既可主动向从机发送数据,又可主动读取引脚。因此,主机既可主动向从机发送数据,又可主动读取从机中的数据,从机既可接收主机所发送的
30、数据,也可以在从机中的数据,从机既可接收主机所发送的数据,也可以在接收主机所发数据的同时,向主机发送数据,但这个过程不接收主机所发数据的同时,向主机发送数据,但这个过程不可以由从机主动发送。可以由从机主动发送。9.1.4 SPI接口的数据通信接口的数据通信19(2 2)双双器件方式(器件可互为主机和从机):此方式的电路连接器件方式(器件可互为主机和从机):此方式的电路连接如图如图9-39-3所示,两片单片机可以互相为主机或从机。初始化后两片单所示,两片单片机可以互相为主机或从机。初始化后两片单片机都将各自设置成片机都将各自设置成由引由引 脚脚(P1.2P1.2)的输入信号确定的主机模式,)的输
31、入信号确定的主机模式,即将各自的即将各自的SPISPI控制寄存器控制寄存器SPCTLSPCTL中的中的MSTRMSTR、SPENSPEN位置位置1 1,SSIGSSIG位位清清0 0,P1.2P1.2引脚(引脚(SSSS)配置为准双向(复位模式)并输出高电平)配置为准双向(复位模式)并输出高电平。图图9-3 SPI接口的互为主从方式接口的互为主从方式9.1.4 SPI接口的数据通信接口的数据通信 当一方要求向另一方主动发送数据时,先检测当一方要求向另一方主动发送数据时,先检测 引脚的电平状引脚的电平状态,如果态,如果SSSS引脚是高电平,就将自己的引脚是高电平,就将自己的SSIGSSIG位置位
32、置1 1设置成忽略设置成忽略SSSS引脚的主机模式,并将引脚拉低,强制将对方设置为从机模式,引脚的主机模式,并将引脚拉低,强制将对方设置为从机模式,这样就是单主单从数据通信方式。通信完毕当前主机再次将引脚这样就是单主单从数据通信方式。通信完毕当前主机再次将引脚置高电平,将自己的置高电平,将自己的SSIGSSIG为清为清0 0,回到初始状态。,回到初始状态。把把SPISPI配置为主机模式(配置为主机模式(MSTR=1MSTR=1,SPEN=1SPEN=1),并且),并且SSIG=0SSIG=0配配置为由引脚(置为由引脚(P1.2P1.2)的输入信号确定主机或从机的情况下,引脚)的输入信号确定主机
33、或从机的情况下,引脚可配置为输入或准双向模式,只要引脚被拉低,即可实现模式的可配置为输入或准双向模式,只要引脚被拉低,即可实现模式的转变,成为从机,并将状态寄存器转变,成为从机,并将状态寄存器SPSTATSPSTAT中的中断标志位中的中断标志位SPIFSPIF置置1 1。注意,互为主从模式时,双方的注意,互为主从模式时,双方的SPISPI通信速率必须相同。如果使通信速率必须相同。如果使用外部晶体振荡管,双方的晶体频率也要相同。用外部晶体振荡管,双方的晶体频率也要相同。209.1.4 SPI9.1.4 SPI接口的数据通信接口的数据通信21(3 3)单主机多从机方式:此方式的电路连接如图)单主机
34、多从机方式:此方式的电路连接如图9-49-4所示。主机将所示。主机将SPISPI控控制寄存器制寄存器SPCTLSPCTL的的SSIGSSIG及及MSTRMSTR位置位置1 1,选择主机模式,此时主机使用不,选择主机模式,此时主机使用不同的同的I/OI/O端口来控制不同从机端口来控制不同从机的的 引脚引脚;从机将;从机将SPISPI控制寄存器控制寄存器SPCTLSPCTL的的SSIGSSIG及及MSTRMSTR位置位置0 0,选择从机模式。,选择从机模式。当主机要与某一个从机通当主机要与某一个从机通信时,只要将对应从机信时,只要将对应从机的的 引脚引脚拉低,该从机被选中。拉低,该从机被选中。其他
35、从机其他从机的的 引脚引脚保持高电保持高电平,这时主机与该从机的通平,这时主机与该从机的通信已成为单主单从的通信。信已成为单主单从的通信。通信完毕主机再将该从机的通信完毕主机再将该从机的 引脚引脚置高电平。置高电平。9.1.4 SPI9.1.4 SPI接口的数据通信接口的数据通信222 2SPISPI接口的数据通信过程接口的数据通信过程 SPI时钟信号相位选择位CPHA用于设置采样和改变数据的时钟边沿,SPI时钟信号极性选择位CPOL用于设置时钟极性,SPI数据发送与接收顺序的控制位DORD用于设置数据传送高低位的顺序。通过对SPI相关参数的设置,可以适应各种外部设备SPI通信的要求。(1 1
36、)作为从机时)作为从机时当CPHA时,从机SPI总线数据传输时序如图9-5所示。数据在时钟的第一个边沿被采样,第二个边沿被改变。主机将数据写入发送数据寄存器SPDAT后,首位即可呈现在MOSI引脚上,从机的 引脚被拉低时,从机发送数据寄存器SPDAT的首位即可呈现在MISO引脚上。数据发送完毕不再发送其他数据时,时钟恢复至空闲状态,MOSI、MISO的俩根线上均保持最后一位数据的状态,从机的 引脚被拉高时,从机的MISO引脚呈现高阻态。9.1.4 SPI9.1.4 SPI接口的数据通信接口的数据通信23 图图9-5 CPHA=09-5 CPHA=0,SPISPI从机传输格式从机传输格式9.1.
37、4 SPI接口的数据通信接口的数据通信24 注意,当注意,当 CPHA=0 CPHA=0,SSIGSSIG必须为必须为0 0,也就是不能忽略,也就是不能忽略SSSS引脚,引脚,引脚必须置引脚必须置0 0并且在每个连续的串行字节发送完后需重新设置为高电平。如果并且在每个连续的串行字节发送完后需重新设置为高电平。如果SPDATSPDAT寄存寄存器在器在 有效(低电平)时执行写操作,那么将导致一个写冲突错误。有效(低电平)时执行写操作,那么将导致一个写冲突错误。(CPHACPHA)=0=0且(且(SSIGSSIG)=0=0时的操作未定义。时的操作未定义。当当CPHA=1CPHA=1时,从机时,从机S
38、PISPI总线数据传输时序如图总线数据传输时序如图9-69-6所示,数据在时钟的第一个所示,数据在时钟的第一个边沿被改变,第二个边沿被采样。边沿被改变,第二个边沿被采样。图图9-6 CPHA=19-6 CPHA=1,SPISPI从机传输格式从机传输格式9.1.4 SPI9.1.4 SPI接口的数据通信接口的数据通信25(2 2)作为主机时)作为主机时当当CPHA=0CPHA=0时,主机时,主机SPISPI总线数据传输时序如图总线数据传输时序如图9-79-7所示,数据在时钟的第一所示,数据在时钟的第一个边沿被采样,第二个边沿被改变。在通信时,主机将一个字节发送完毕,个边沿被采样,第二个边沿被改变
39、。在通信时,主机将一个字节发送完毕,不再发送其他数据时,时钟恢复至空闲状态,不再发送其他数据时,时钟恢复至空闲状态,MOSIMOSI、MISOMISO两根线上均保两根线上均保持最后一位数据的状态。持最后一位数据的状态。图图9-7 CPHA=09-7 CPHA=0,SPISPI主机传输格式主机传输格式9.1.4 SPI9.1.4 SPI接口的数据通信接口的数据通信26 当当CPHA=1CPHA=1时主机时主机SPISPI总线数据传输时序如图总线数据传输时序如图9.89.8所示,数据在时钟的第一个边所示,数据在时钟的第一个边沿被改变,第二个边沿被采样。沿被改变,第二个边沿被采样。图图9-8 CPH
40、A=19-8 CPHA=1,SPISPI主机传输格式主机传输格式9.1.5 IAP15W4K58S4单片机的SPI接口的应用实例27 SPISPI接口工作在主模式时可以与具有接口工作在主模式时可以与具有SPISPI兼容接口的器件进行兼容接口的器件进行同步通信同步通信,FLASHFLASH存储器存储器、A/DA/D转换器、转换器、D/AD/A转换器、转换器、LEDLED或或LCDLCD驱动器等,可以很好地扩展外围器件实现相应的功驱动器等,可以很好地扩展外围器件实现相应的功能。能。SPISPI串行通信初始化思路如下:串行通信初始化思路如下:设置设置SPISPI控制寄存器控制寄存器SPCTLSPCT
41、L。设置。设置SPISPI接口的主从工作模式等。接口的主从工作模式等。设置设置SPISPI状态寄存器状态寄存器SPSTATSPSTAT。写入。写入0C0H0C0H,清,清0 0标志位标志位SPIFSPIF和和WCOLWCOL。向其写向其写“1 1”清零。清零。根据需要根据需要,打开打开SPISPI中断中断ESPIESPI和总中断和总中断EAEA。9.1.5 9.1.5 IAP15W4K58S4IAP15W4K58S4单片机的单片机的SPISPI接口的应用实例接口的应用实例28例:利用例:利用IAP15W4K58S4IAP15W4K58S4单片机的单片机的SPISPI接口功能控制接口功能控制74
42、HC59574HC595驱动驱动8 8位数码位数码管(串口扩展,管(串口扩展,3 3根线)循环显示根线)循环显示0F0F。电路原理图如。电路原理图如9-99-9所示。所示。图图9-9 SPI9-9 SPI控制控制74HC59574HC595驱动驱动8 8位数码管原理位数码管原理图。图。9.1.5 IAP15W4K58S4单片机的单片机的SPI接口的应用实例接口的应用实例29解:解:C C语言源程序如下:语言源程序如下:#include STC15Fxxxx.H /#include STC15Fxxxx.H /包含单片机头文件包含单片机头文件#define SPIF 0 x80 /SPI#def
43、ine SPIF 0 x80 /SPI传输完成标志。写入传输完成标志。写入1 1清清0 0#define WCOL 0 x40 /SPI#define WCOL 0 x40 /SPI写冲突标志。写入写冲突标志。写入1 1清清0 0#define#define MAIN_FoscMAIN_Fosc 11059200ul /11059200ul /定义主时钟定义主时钟#define Timer0_Reload (#define Timer0_Reload (MAIN_FoscMAIN_Fosc/1200)/Timer0/1200)/Timer0中断频率中断频率9.1.5 IAP15W4K58S4单
44、片机的单片机的SPI接口的应用实例接口的应用实例30/*常量声明常量声明*/unsigned char code unsigned char code t_displayt_display=0 x3F,0 x06,0 x5B,0 x4F,0 x66,0 x6D,0 x7D,0 x07,0 x7F,0 x6F,0 x77,0 x7C,0 x39,0 x5E,0 x3F,0 x06,0 x5B,0 x4F,0 x66,0 x6D,0 x7D,0 x07,0 x7F,0 x6F,0 x77,0 x7C,0 x39,0 x5E,0 x79,0 x71,0 x00;0 x79,0 x71,0 x00;/
45、段码段码,0F,0Funsigned char code T_COM=0 x01,0 x02,0 x04,0 x08,0 x10,0 x20,0 x40,0 x80;unsigned char code T_COM=0 x01,0 x02,0 x04,0 x08,0 x10,0 x20,0 x40,0 x80;/位码位码sbit sbit SPI_SCL=P15;SPI_SCL=P15;/SPI /SPI同步时钟同步时钟sbit sbit SPI_MOSO=P13;SPI_MOSO=P13;/SPI /SPI同步数据输出同步数据输出sbit sbit P_HC595_RCLK =P41;P_H
46、C595_RCLK =P41;/SPI /SPI片选片选unsigned char LED88;unsigned char LED88;/显示缓冲显示缓冲unsigned char unsigned char display_indexdisplay_index;/显示位索引显示位索引bit B_1ms;bit B_1ms;/1ms /1ms标志标志9.1.5 9.1.5 IAP15W4K58S4IAP15W4K58S4单片机的单片机的SPISPI接口的应用实例接口的应用实例31/*主函数主函数*/void main(void)unsigned char i,k;unsigned int j;
47、SPCTL=(SSIG7)+(SPEN6)+(DORD5)+(MSTR4)+(CPOL3)+(CPHA2)+SPEED_4;/配置配置SPI TMOD=0 x01;TH0=(65536-Timer0_Reload)/256;TH0=(65536-Timer0_Reload)%256;ET0=1;TR0=1;EA=1;for(i=0;i=500)if(+j=500)j=0;j=0;for(i=0;i8;i+)LED8i=k;/for(i=0;i0 x10)k=0;/8 if(+k0 x10)k=0;/8个数码管循环显示个数码管循环显示 /0,1,2.,A,B,F,/0,1,2.,A,B,F,消隐
48、消隐 /*主函数主函数*/9.1.5 9.1.5 IAP15W4K58S4IAP15W4K58S4单片机的单片机的SPISPI接口的应用实例接口的应用实例33/*SPISPI发送一个字节函数发送一个字节函数*/void void SPI_SendBteSPI_SendBte(unsigned char(unsigned char datdat)SPSTAT=SPIF+WCOL;/SPSTAT=SPIF+WCOL;/清零清零SPIFSPIF和和WCOLWCOL标志标志 SPDAT=SPDAT=datdat;/;/发送一个字节发送一个字节 while(SPSTAT&SPIF)=0);/while(
49、SPSTAT&SPIF)=0);/等待发送完成等待发送完成 SPSTAT=SPIF+WCOL;/SPSTAT=SPIF+WCOL;/清零清零SPIFSPIF和和WCOLWCOL标志标志 9.1.5 9.1.5 IAP15W4K58S4IAP15W4K58S4单片机的单片机的SPISPI接口的应用实例接口的应用实例34/*显示扫描显示扫描函数函数*/void void DisplayScanDisplayScan(void)(void)SPI_SendByte SPI_SendByte(T_COM(T_COMdisplay_indexdisplay_index);/);/共阴输出位码共阴输出位码
50、 SPI_SendByte SPI_SendByte(t_displayt_displayLED8LED8display_indexdisplay_index);/);/共阴出段码共阴出段码 P_HC595_RCLK=1;P_HC595_RCLK=1;P_HC595_RCLK=0;/P_HC595_RCLK=0;/锁存输出数据锁存输出数据 if(+if(+display_indexdisplay_index=8)=8)display_indexdisplay_index=0;/8=0;/8位结束回位结束回0 0 9.1.5 9.1.5 IAP15W4K58S4IAP15W4K58S4单片机的单