SPI协议简介
- 格式:docx
- 大小:33.22 KB
- 文档页数:7
spi通信协议SPI(Serial Peripheral Interface)串行外设接口是一种同步的、全双工的通信协议,常用于单片机和外部设备之间的通信。
SPI协议定义了一种主从模式的通信方式,其中一个设备充当主设备,负责发起通信,而其他设备则充当从设备,负责接收和处理通信数据。
SPI通信协议由四根线组成:时钟线(CLK)、片选线(SS)、主设备发出数据(MOSI)和主设备接收数据(MISO)。
在SPI通信中,主设备通过时钟线提供时钟脉冲,通过片选线选择和控制不同的从设备。
在通信开始时,主设备将片选线拉低,选择需要通信的从设备。
然后,主设备在每个时钟脉冲中,通过MOSI线发送数据给从设备,同时从设备通过MISO线将数据发送回主设备。
SPI通信协议的通信方式为全双工,即主设备和从设备可以同时发送和接收数据。
在通信过程中,主设备和从设备通过时钟的同步来保持数据的一致性。
主设备在上升沿将数据发送到MOSI线上,而从设备在下降沿将数据从MISO线上读取。
通过时钟的同步,主从设备可以准确地发送和接收数据。
在SPI通信中,数据的传输是串行的,即每个数据位都按顺序传输。
通信的起始位和终止位可以由主设备和从设备约定。
通常情况下,通信的起始位由主设备发起,并在时钟上升沿进行传输。
终止位可以由主设备或从设备发起,并在时钟下降沿进行传输。
SPI通信协议的速度可以通过调整时钟频率来控制。
时钟频率越高,数据传输的速度越快。
然而,时钟频率的增加也会增加信号的噪声和功耗。
因此,在选择时钟频率时,需要权衡速度和可靠性的要求。
SPI通信协议还支持多个从设备的通信。
每个从设备都有一个独立的片选线,主设备可以通过选择不同的片选线来与不同的从设备进行通信。
这种多从设备的通信方式使SPI协议更加灵活,可以同时与多个外部设备进行数据交换。
综上所述,SPI通信协议是一种常用的串行通信协议,使用主从模式进行数据交换。
它具有简单、可靠、高速的特点,适用于单片机和外部设备之间的通信。
spi 协议SPI(Serial Peripheral Interface)是一种同步、全双工、串行通信协议,常用于连接微控制器和外设芯片之间的通信。
该协议在硬件的支持下,可以实现高速、可靠的数据传输,广泛应用于各个领域。
SPI协议的核心原理是通过主设备和从设备之间的数据传输,以实现设备之间的通信。
它主要包括四根信号线:SCLK(时钟线)、MOSI(主设备输出、从设备输入线)、MISO(主设备输入、从设备输出线)和SS(片选线)。
其中,时钟线由主设备产生,用于同步数据传输;主设备通过 MOSI 向从设备发送数据,从设备则通过 MISO 向主设备发送数据;片选线用于选择要与主设备通信的从设备。
SPI协议的通信过程如下:首先,主设备拉低某一从设备的片选线,选定要通信的从设备。
然后,主设备通过时钟线产生时钟信号,从而驱动数据的传输。
在每个时钟信号的上升沿或下降沿,主设备向 MOSI 线发送一个数据位,从设备则通过MISO 线返回一个数据位。
在数据传输过程中,主设备和从设备的数据位一一对应,通过时钟信号的同步,实现了数据的可靠传输。
最后,主设备拉高片选线,结束与从设备的通信。
SPI协议具有以下几个优点:首先,由于采用了同步通信方式,数据传输速度快,可以满足对实时性要求较高的应用;其次,SPI协议不需要复杂的协议栈,简化了通信的实现过程;再次,SPI协议支持全双工通信,主设备和从设备可以同时发送和接收数据;最后,SPI协议可以同时连接多个从设备,通过片选线选择要通信的设备,提高了系统的扩展性。
SPI协议的主要应用领域包括微控制器和外设的通信、存储器的读写、显示屏的控制等。
在微控制器中,利用SPI协议可以与各类外设芯片(如传感器、存储器、显示器等)进行通信,实时地获取和控制数据。
在存储器的读写中,SPI协议可以实现高速的数据传输,提升系统的读写性能。
在显示屏的控制中,SPI协议可以通过与显示屏的通信,实现图像的传输和显示。
spi协议SPI(Serial Peripheral Interface)是一种串行外设接口协议,通常用于微控制器与外部设备之间进行通信。
它可以实现高速的数据传输和简化的通信交互,被广泛应用于各种嵌入式系统中。
SPI协议是一种主从架构的通信方式,其中一个设备作为主设备,控制整个通信过程,其他设备则作为从设备响应主设备的指令。
SPI协议采用四根信号线,分别为时钟线(SCK)、数据输入线(MISO)、数据输出线(MOSI)和片选线(SS)。
主设备通过控制这些信号线与从设备进行通信。
在SPI协议中,通信是基于字节的,主设备通过将数据位逐个串行地发送到MOSI线上,同时通过SCK时钟线推动数据的传输。
从设备在接收到位的同时将其逐个保存,并根据SCK时钟线的信号抽取数据。
在接收数据时,从设备将数据位逐个传输到MISO线上,主设备通过该线路接收倒数第二个时钟周期中的数据位。
为了确保通信的顺利进行,SPI协议定义了一系列的规则和时序。
首先,在通信开始之前,主设备需要选择要与之通信的从设备,这是通过拉低片选线(SS)来实现的。
同时,主设备还需要确定通信的传输速率,这是通过调整SCK的频率来实现的。
SPI协议还规定了数据传输的顺序,主设备先发送数据位,然后从设备传输数据位。
如果主设备发送太多的数据位,从设备可能无法及时读取和处理。
因此,在设计SPI通信时,需要确保主从设备之间的数据位数一致。
SPI协议还定义了一些数据传输模式,用于确定数据的传输顺序和时钟极性。
最常用的模式是模式0和模式3。
在模式0中,数据的传输采用下降沿锁存(falling edge latch)的方式,数据样本在上升沿时变化。
在模式3中,数据的传输采用上升沿锁存(rising edge latch)的方式,数据样本在下降沿时变化。
SPI协议具有一些优点,使其在许多应用中得到了广泛应用。
首先,由于采用了串行传输,SPI协议可以实现高速的数据传输。
spi通讯协议SPI(Serial Peripheral Interface)是一种同步串行通信协议,常用于连接微控制器和外部设备,如传感器、存储器、显示器等。
它采用主从结构,通过时钟信号和数据线进行双向通信,具有高速传输、简单灵活的特点,广泛应用于各种嵌入式系统。
SPI通信协议使用四根线进行通信:CLK(时钟线)、MOSI (主输出从输入线)、MISO(主输入从输出线)和SS(从选择线)。
时钟线由主设备产生,用于同步数据传输。
MOSI和MISO线负责数据传输,MOSI线由主设备输出数据,MISO线由从设备输出数据。
SS线由主设备控制,用于选择特定的从设备进行通信。
SPI通信协议是一种全双工通信方式,数据可以同时在MOSI和MISO线上传输。
通信过程中,主设备通过产生时钟信号控制数据传输的时序,每个时钟周期传输一个比特位。
主设备将数据送入MOSI线上,并将其与时钟信号同步,从设备通过MISO线上的数据响应主设备。
SPI通信协议中可以有多个从设备存在,但每个从设备都需要一个单独的片选信号控制。
主设备通过拉低某个从设备的片选信号(SS线),来选择特定的从设备进行通信。
通信结束后,主设备释放片选信号,并选择其他从设备进行通信。
这样可以实现多个从设备与一个主设备之间的并行通信。
SPI通信协议的速度可以根据实际需求进行调整,由主设备产生的时钟信号决定了数据传输的速率。
时钟信号的频率可以在主设备中设置,通常可以选择几十kHz至几十MHz的范围。
通信速度越快,数据传输的速率越高,但同时也会增加功耗和干扰的风险。
SPI通信协议具有以下优点:首先,它具有高速传输的优势,可以满足大部分实时性要求较高的应用场景。
其次,SPI通信协议的硬件实现比较简单,可以使用几个GPIO口实现。
最后,SPI通信协议支持全双工通信,可以同时进行数据的发送和接收,提高通信效率。
综上所述,SPI通信协议是一种快速、灵活且简单的串行通信协议,广泛应用于各种嵌入式系统。
SPI总线协议介绍 ⼀、概述 SPI = Serial Peripheral Interface,是串⾏外围接⼝设备,是⼀种⾼速,全双⼯,同步的通信总线。
常规只占⽤四根线,节约了芯⽚管脚,PCB的布局省空间。
优点: ⽀持全双⼯,push-pull的驱动性能相⽐open-drain信号完整性更好。
⽀持⾼速(100MHz以上)。
协议⽀持字节长不限于8bits,可根据应⽤特点灵活选择消息字长 硬件连接简单。
缺点: 相⽐I2C多两根线。
没有寻址机制,只能靠⽚选选择不同设备。
没有从设备接收ACK,主设备对于发送成功与否不得⽽知。
典型应⽤只⽀持单主控 相⽐RS232 RS485和CAN总线,SPI传输距离短 ⼆、硬件结构 SPI总线定义两个及以上设备间的数据通信,提供时钟的设备为主设备Master,接收时钟的设备为从设备Slave; 信号定义如下: SCK :Serial Clock 串⾏时钟 MOSI:Master Ouput,Slave Input 主发从收信号 MISO:Master Input,Slave Input主收从发信号 SS/CS:Slave Select⽚选信号 电路连接如下: 单个主设备和单个从设备: 单个主设备和多个从设备: 三、寄存器类型 摩托罗拉定义的SPI寄存器包括: SPI Control Register 1 控制寄存器1 SPI Control Register 2 控制寄存器2 SPI Baud Rate Register 波特率寄存器 SPI Status Register(SPISR) 状态寄存器(只读其余均可读可写) SPI Data Register(SPIDR)数据寄存器 通过往寄存器中写⼊不同的值,设置SPI模块的不同属性 四、SPI传输模式 SPI通信有四种模式,简单地讲就是设置SCLK时钟信号线的那种信号为有效信号 通过设置控制寄存器SPICR1中的CPOL和CPHA位,将SPI可以分成四种传输模式 时钟极性CPOL,即Clock Polarity,决定时钟空闲时状态电平。
spi 协议SPI协议。
SPI(Serial Peripheral Interface)是一种同步串行数据通信协议,通常用于在微控制器和外围设备之间进行通信。
SPI协议是一种全双工、点对点、串行通信协议,它使用四根线进行通信,包括时钟线(SCLK)、数据线(MOSI)、数据线(MISO)和片选线(SS)。
SPI协议的工作原理是通过主从模式进行通信,一个主设备可以连接多个从设备。
在通信过程中,主设备通过时钟线产生时钟信号,控制数据的传输速率,同时通过片选线选择要与之通信的从设备。
从设备在接收到片选信号后,根据时钟信号同步数据的传输,从而实现数据的传输和接收。
SPI协议的通信方式较为灵活,数据传输的速率可以根据具体的应用需求进行调整。
同时,SPI协议的通信是全双工的,主设备和从设备可以同时发送和接收数据,提高了通信效率。
此外,SPI协议的硬件连接简单,只需要四根线即可完成通信,因此在一些资源受限的应用场景中具有一定的优势。
在使用SPI协议进行通信时,需要注意一些问题。
首先,由于SPI协议是一种同步通信协议,主设备和从设备之间的时钟频率需要一致,否则会导致通信错误。
其次,由于SPI协议是一种点对点通信协议,因此在连接多个从设备时,需要合理设计片选信号的分配,避免片选信号的冲突。
最后,SPI协议在传输过程中没有错误检测和纠正机制,因此在一些对通信可靠性要求较高的应用场景中,需要额外考虑数据的校验和重传机制。
总的来说,SPI协议是一种灵活、高效的串行通信协议,适用于在微控制器和外围设备之间进行数据通信。
在实际应用中,需要根据具体的应用需求合理选择通信协议,并结合硬件设计和软件开发进行系统设计。
希望本文对SPI协议有一个清晰的认识,并能够在实际应用中发挥作用。
SPI,是英语Serial Peripheral interface的缩写,顾名思义就是串行外围设备接口。
SPI,是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的管脚,同时为PCB的布局上节省空间,提供方便,正是出于这种简单易用的特性,现在越来越多的芯片集成了这种通信协议,比如P89LPC900.SPI,是一种高速的,全双工,同步的通信总线,其工作模式有两种:主模式和从模式,无论那种模式,都支持3Mbit/s的速率,并且还具有传输完成标志和写冲突保护标志。
到目前为止,我使用过的具有SPI 总线的器件,就是存储芯片Eprom:at25128,在使用过程中,发现的确是有这种总线的优点。
下面以P89LPC900单片机的SPI总线来解释SPI总线的通用使用规则。
LPC900单片机的SPI接口主要由4个引脚构成:SPICLK、MOSI、MISO及/SS,其中SPICLK是整个SPI总线的公用时钟,MOSI、MISO作为主机,从机的输入输出的标志,MOSI是主机的输出,从机的输入,MISO是主机的输入,从机的输出。
/SS是从机的标志管脚,在互相通信的两个SPI总线的器件,/SS管脚的电平低的是从机,相反/SS管脚的电平高的是主机。
在一个SPI通信系统中,必须有主机。
SPI总线可以配置成单主单从,单主多从,互为主从。
今以互为主从模式作为讲解:要进行SPI互为主从操作,必须遵照以下步骤:1 对A、B进行初始化,均设为主机(需要进行以下操作)。
a) SPI端口初始化为准双向。
b) SPCTL配置为0x50,SSIG=0,SPEN=1,MSTR=1。
c) 清除SPSTAT中的SPIF及WCOL标志位为0。
d) 如果需要使用SPI中断,可使能相应中断位。
2 将A上一个引脚连接到B的/SS引脚上,然后拉低/SS,可将B强行置为从机模式,同时B机会发生以下变化:a) B机的MSTR位自动清0。
SPI协议串行外设接口协议的解析SPI(Serial Peripheral Interface)协议是一种串行外设接口协议,常用于在微控制器和外部设备之间进行数据通信。
本文将对SPI协议的基本原理、通信格式以及常见应用进行解析。
一、SPI协议概述SPI协议是一种同步的全双工通信协议,其核心思想是通过使用四根线(片选信号、时钟、输入数据、输出数据)来实现设备之间的通信。
SPI可以同时支持单主机和多从机的通信方式,能够实现高速数据传输,并且相对简单易用。
二、SPI工作原理SPI工作在主-从模式下,一个主设备可以与一个或多个从设备进行通信。
SPI协议中的主设备控制时钟信号,指示数据传输的开始和结束,从设备根据时钟信号来读取或写入数据。
SPI通信时,主设备通过选择片选信号来选择要与其通信的从设备。
三、SPI通信格式1. 时钟极性(CPOL)和相位(CPHA):SPI通信协议的时钟极性和相位可以根据设备的要求进行设置,以适应不同设备的通信模式。
CPOL定义了在空闲状态下(时钟未激活)时钟信号的电平,高电平或低电平;CPHA定义了数据采样的时机,以时钟的上升沿还是下降沿为准。
2. 数据位顺序:SPI通信中数据传输的位顺序可以是LSB(Least Significant Bit,最低有效位)或MSB(Most Significant Bit,最高有效位)。
3. 传输速度:SPI通信的速度由主设备的时钟频率控制,可以根据从设备的要求和系统的稳定性来进行设置。
四、SPI应用场景SPI协议广泛应用于各种外设和传感器之间的通信,以下是几个常见的应用场景:1. 存储器芯片:SPI协议被广泛应用于存储器芯片(如Flash和EEPROM)和微控制器之间的通信,实现数据的读写操作。
2. 显示模块:很多液晶屏和OLED显示模块都采用SPI协议与主控制器进行通信,传输图像数据和命令。
3. 传感器:许多传感器(如温度传感器、加速度传感器等)通过SPI协议与控制器进行数据传输,实现实时数据采集和处理。
spi总线协议SPI总线协议。
SPI(Serial Peripheral Interface)是一种用于在数字集成电路之间进行通信的同步串行通信协议。
它通常用于连接微控制器和外围设备,例如存储器芯片、传感器、显示器和无线模块等。
SPI总线协议具有简单、高效、灵活等特点,因此在许多嵌入式系统中得到广泛应用。
本文将对SPI总线协议的基本原理、通信方式、时序特性以及应用进行介绍。
SPI总线协议基本原理。
SPI总线由四根信号线组成,分别为时钟信号(SCLK)、主设备输出(MOSI)、主设备输入(MISO)和片选信号(SS)。
在SPI总线中,通信的主设备通过SCLK信号产生时钟脉冲,控制数据的传输。
MOSI信号用于主设备向从设备发送数据,MISO信号用于从设备向主设备发送数据。
片选信号用于选择从设备,使得主设备可以与多个从设备进行通信。
SPI总线协议通信方式。
SPI总线协议采用全双工通信方式,即主设备和从设备可以同时发送和接收数据。
通信开始时,主设备通过片选信号选择从设备,并在时钟信号的控制下,通过MOSI信号向从设备发送数据,同时从设备通过MISO信号向主设备发送数据。
通信结束后,主设备通过片选信号取消对从设备的选择,从而完成一次数据传输。
SPI总线协议时序特性。
在SPI总线协议中,数据的传输是在时钟信号的控制下进行的。
通常情况下,数据的传输是在时钟的上升沿或下降沿进行的,具体取决于SPI设备的工作模式。
此外,SPI总线协议还可以通过调整时钟信号的极性和相位来适应不同的外设要求,从而实现更灵活的通信方式。
SPI总线协议应用。
SPI总线协议在各种嵌入式系统中得到广泛应用,例如单片机、嵌入式系统、传感器网络等。
在单片机中,SPI总线协议通常用于连接外部存储器、显示器、通信模块等外围设备。
在嵌入式系统中,SPI总线协议可以用于连接各种外设,实现系统的功能扩展和升级。
在传感器网络中,SPI总线协议可以用于连接各种传感器节点,实现数据的采集和传输。
spi接口协议SPI接口协议。
SPI(Serial Peripheral Interface)是一种同步串行数据接口标准,用于在数字集成电路之间进行通信。
SPI接口协议最初由Motorola公司开发,后来得到了广泛的应用和推广,成为了一种常见的通信协议。
SPI接口协议主要用于在嵌入式系统中连接微控制器和外围设备,如存储器芯片、传感器、显示器等。
SPI接口协议的特点之一是它是一种全双工通信协议,意味着数据可以同时在两个方向上传输。
它还采用了主从式的通信方式,一个主设备可以控制多个从设备,这使得SPI接口协议在多设备通信时表现出色。
此外,SPI接口协议的通信速度较快,可以达到几十MHz甚至上百MHz,适用于高速数据传输的场景。
SPI接口协议的硬件连接通常由四条线构成,时钟线(SCLK)、主设备输出从设备输入线(MOSI)、主设备输入从设备输出线(MISO)和片选线(SS)。
时钟线用于同步数据传输,主设备通过时钟线向从设备发送时钟信号,从而控制数据传输的速度。
MOSI和MISO分别用于主设备向从设备发送数据和从设备向主设备发送数据。
片选线用于选择需要进行通信的从设备,每个从设备都有一个对应的片选线。
在SPI接口协议中,数据的传输是以字节为单位进行的。
主设备通过向从设备发送数据来触发从设备的响应,从而进行数据交换。
SPI接口协议的通信过程可以分为四个阶段,片选、传输、接收和解选。
首先,主设备通过片选线选择需要进行通信的从设备;然后,在时钟的控制下,主设备向从设备发送数据,并同时接收从设备发送的数据;最后,主设备通过解选线将从设备解选,结束本次通信。
SPI接口协议的应用非常广泛,特别是在嵌入式系统中。
由于其高速、全双工和多设备通信的特点,SPI接口协议被广泛应用于存储器、传感器、显示器、通信模块等外围设备的连接。
在一些对通信速度要求较高的场景,SPI接口协议的优势尤为明显。
总的来说,SPI接口协议是一种简单而高效的通信协议,适用于在数字集成电路之间进行数据交换。
SPI协议简介SPI是Serial Peripheral Interface的简称,NDS中的触摸屏,麦克风,电源控制,固件及DS卡的EEPROM都是基于SPI的。
所以弄明白SPI的原理对NDS 的研究很有帮助。
SPI 是一种允许一个主设备启动一个与从设备的同步通讯的协议,从而完成数据的交换。
也就是SPI是一种规定好的通讯方式。
这种通信方式的优点是占用端口较少,一般4根就够基本通讯了(不算电源线)。
同时传输速度也很高。
一般来说要求主设备要有SPI控制器(但可用模拟方式),就可以与基于SPI的芯片通讯了。
这种芯片也许是储存芯片,像DS卡的存档芯片,也许是控制芯片,像DS触摸屏的控制芯片等等。
L' SPI 的通信原理很简单,它需要至少4根线,事实上3根也可以。
也是所有基于SPI的设备共有的,它们是SDI(数据输入),SDO(数据输出),SCK(时钟),CS(片选)。
其中CS是控制芯片是否被选中的,也就是说只有片选信号为预先规定的使能信号时(高电位或低电位),对此芯片的操作才有效。
这就允许在同一总线上连接多个SPI设备成为可能。
接下来就负责通讯的3根线了。
通讯是通过数据交换完成的,这里先要知道SPI是串行通讯协议,也就是说数据是一位一位的传输的。
这就是SCK时钟线存在的原因,由SCK提供时钟脉冲,SDI,SDO则基于此脉冲完成数据传输。
数据输出通过SDO线,数据在时钟上沿或下沿时改变,在紧接着的下沿或上沿被读取。
完成一位数据传输,输入也使用同样原理。
这样,在至少8次时钟信号的改变(上沿和下沿为一次),就可以完成8位数据的传输。
o要注意的是,SCK信号线只由主设备控制,从设备不能控制信号线。
同样,在一个基于SPI的设备中,至少有一个主控设备。
这样传输的特点:这样的传输方式有一个优点,与普通的串行通讯不同,普通的串行通讯一次连续传送至少8位数据,而SPI允许数据一位一位的传送,甚至允许暂停,因为SCK时钟线由主控设备控制,当没有时钟跳变时,从设备不采集或传送数据。
也就是说,主设备通过对SCK时钟线的控制可以完成对通讯的控制。
SPI还是一个数据交换协议:因为SPI的数据输入和输出线独立,所以允许同时完成数据的输入和输出。
不同的SPI设备的实现方式不尽相同,主要是数据改变和采集的时间不同,在时钟信号上沿或下沿采集有不同定义,具体请参考相关器件的文档。
下面是用单片机实现触摸屏的代码:[功能] 8051单片机驱动ADS7846/ADS7843芯片显示代码打印01 #include "reg51.h"02 #include "intrins.h"030405 sbit DCLK=P1^6; //根据用户自己的定义06 sbit CS=P2^2;07 sbit DIN=P2^3;08 sbit DOUT=P2^4;09 sbit BUSY=P2^5;1011 delay(unsigned char i--)12 {13 while(i--);14 }151617 void start() //SPI开始18 {19 DCLK=0;20 CS=1;21 DIN=1;22 DCLK=1;23 CS=0;24 }2526 WriteCharTo7843(unsigned char num) //SPI写数据27 {28 unsigned char count=0;29 DCLK=0;30 for(count=0;count<8;count++)31 {32 num<<=1;33 DIN=CY;34 DCLK=0; _nop_();_nop_();_nop_(); //上升沿有效35 DCLK=1; _nop_();_nop_();_nop_();36 }37 }383940 ReadFromCharFrom7843() //SPI 读数据41 {42 unsigned char count=0;43 unsigned int Num=0;44 for(count=0;count<12;count++)45 {46 Num<<=1;47 DCLK=1; _nop_();_nop_();_nop_(); //下降沿有效48 DCLK=0; _nop_();_nop_();_nop_();49 if(DOUT) Num++;50 }51 return(Num);52 }5354 void ZhongDuan() interrupt 0 //外部中断0 用来接受键盘发来的数据55 {56 unsigned int X=0,Y=0;57 delay(10000); //中断后延时以消除抖动,使得采样数据更准确58 start(); //启动SPI59 // while(BUSY); //如果BUSY信号不好使可以删除不用60 delay(2);61 WriteCharTo7843(0x90); //送控制字10010000 即用差分方式读X坐标详细请见有关资料62 // while(BUSY); //如果BUSY信号不好使可以删除不用63 delay(2);64 DCLK=1; _nop_();_nop_();_nop_();_nop_();65 DCLK=0; _nop_();_nop_();_nop_();_nop_();66 X=ReadFromCharFrom7843(); //读X轴坐标67 WriteCharTo7843(0xD0); //送控制字11010000 即用差分方式读Y坐标详细请见有关资料68 DCLK=1; _nop_();_nop_();_nop_();_nop_();69 DCLK=0; _nop_();_nop_();_nop_();_nop_();70 Y=ReadFromCharFrom7843(); //读Y轴坐标71 CS=1;72 }737475 main()76 {77 TMOD=0x11; // 记数器0 计数器1 都以16 位记数78 TCON=0x00;79 IE=0x83; //1000 0001 EA=1中断允许,80 IP=0x01;81 while(1);//等待触摸中断82 }使用的同步串行三线SPI接口,可以方便的连接采用SPI通信协议的外围或另一片AVR单片机,实现在短距离内的高速同步通信。
ATmega128的SPI采用硬件方式实现面向字节的全双工3线同步通信,支持主机、从机和2种不同极性的SPI时序,通信速率有7种选择,主机方式的最高速率为1/2系统时钟,从机方式最高速率为1/4系统时钟。
ATmega128单片机内部的SPI接口也被用于程序存储器和数据E2PROM的编程下载和上传。
但特别需要注意的是,此时SPI的MOSI和MISO接口不再对应PB2、PB3引脚,而是转换到PE0、PE1引脚上(PDI、PDO),其详见第二章中关于程序存储器的串行编程和校验部分的内容。
ATmega128的SPI为硬件接口和传输完成中断申请,所以使用SPI传输数据的有效方法是采用中断方式+数据缓存器的设计方法。
在对SPI初始化时,应注意以下几点:.正确选择和设置主机或从机,以及工作模式(极性),数据传输率;.注意传送字节的顺序,是低位优先(LSB First)还是高位优先(MSB Frist);.正确设置MOSI和MISO接口的输入输出方向,输入引脚使用上拉电阻,可以节省总线上的吊高电阻。
下面一段是SPI主机方式连续发送(接收)字节的例程:显示代码打印01 #define SIZE 10002 unsigned char SPI_rx_buff[SIZE];03 unsigned char SPI_tx_buff[SIZE];04 unsigned char rx_wr_index,rx_rd_index,rx_counter,rx_buffer_overflow;05 unsigned char tx_wr_index,tx_rd_index,tx_counter;0607 #pragma interrupt_handler spi_stc_isr:1808 void spi_stc_isr(void)10 SPI_rx_buff[rx_wr_index] = SPDR; //从ISP口读出收到的字节11 if (++rx_wr_index == SIZE) rx_wr_index = 0; //放入接收缓冲区,并调整队列指针12 if (++rx_counter == SIZE)13 {14 rx_counter = 0;15 rx_buffer_overflow = 1;16 }17 if (tx_counter) //如果发送缓冲区中有待发的数据18 {19 --tx_counter;20 SPDR = SPI_tx_buff[tx_rd_index]; //发送一个字节数据,并调整指针21 if (++tx_rd_index == SIZE) tx_rd_index = 0;22 }23 }2425 unsigned char getSPIchar(void)26 {27 unsigned char data;28 while (rx_counter == 0); //无接收数据,等待29 data = SPI_rx_buff[rx_rd_index]; //从接收缓冲区取出一个SPI收到的数据30 if (++rx_rd_index == SIZE) rx_rd_index = 0; //调整指针31 CLI();32 --rx_counter;33 SEI();34 return data;35 }3637 void putSPIchar(char c)38 {39 while (tx_counter == SIZE);//发送缓冲区满,等待40 CLI();41 if (tx_counter || ((SPSR & 0x80) == 0))//发送缓冲区已中有待发数据42 { //或SPI正在发送数据时43 SPI_tx_buffer[tx_wr_index] = c; //将数据放入发送缓冲区排队44 if (++tx_wr_index == SIZE) tx_wr_index = 0; //调整指针45 ++tx_counter;46 }47 else48 SPDR = c; //发送缓冲区中空且SPI口空闲,直接放入SPDR由SIP口发送49 SEI();5152 void spi_init(void)53 {54 unsigned chat temp;55 DDRB |= 0x080; //MISO=input and MOSI,SCK,SS = output56 PORTB |= 0x80; //MISO上拉电阻有效57 SPCR = 0xD5; //SPI允许,主机模式,MSB,允许SPI中断,极性方式01,1/16系统时钟速率58 SPSR = 0x00;59 temp = SPSR;60 temp = SPDR; //清空SPI,和中断标志,使SPI空闲61 }6263 void main(void)64 {65 unsigned char I;66 CLI(); //关中断67 spi_init(); //初始化SPI接口68 SEI(); //开中断69 while()70 {71 putSPIchat(i); //发送一个字节72 i++;73 getSPIchar(); //接收一个字节(第一个字节为空字节)74 ………75 }76 }这个典型的SPI例程比较简单,主程序中首先对ATmega128的硬件SPI进行初始化。