如何使用F28335 SPI接口连续发送短信接口数据

1495人阅读
嵌入式学习之LPC1788(8)
  SPI协议中的SCK是用来同步数据传输的时钟信号,由Master驱动,Slave接收。当使用SPI接口时,时钟可编程为高有效或低有效,否则,时钟总是低有效。SCK的状态只能在数据传输过程中变,在其他时间里,SPI接口使其保持无效状态或不驱动它(使其处于高阻态)
  SPI设备间的数据传输之所以又被称为数据交换,是因为SPI协议规定一个SPI设备在通信过程中不能仅仅充当一个“发送者”或“接收者”,在每个SCK周期内,SPI设备都会发送并接收一个bit大小的数据,相当于该设备有一个bit大小的数据被交换了。如下例中的驱动:
  该例中LPC1788MCU是Master,GT21L16S2W字库芯片是Slave,GT21L16S2W的快速读取时序如下:
代码分析:
30-33行:在选通GT21L16S2W芯片之前先将LPC1788中的SSP控制器的Rx FIFO清空,将这段代码注
释掉也运行正常,但最好清空一下Rx FIFO防止意外
将LPC1788的P2[22]引脚置为低电平来选通GT21L16S2W芯片。GT21L16S2W芯片的片选是由
P2[22]引脚配置为GPIO输出高电平或低电平来控制的,所以LPC1788与GT21L16S2W进行通讯
时必须置低P2[22]引脚。
35-42行:LPC1788向GT21L16S2W发送一个字节的快速读命令,然后发送三个字节的地址Add,这是要读数
据在GT21L16S2W芯片中的地址,最后发送一个Dummy Byte,时序如上图。
开始的时候说过SPI协议中Master和Slave通讯时进行的是数据交换,所以在35-42行代码中
LPC1788向GT21L16S2W发送读命令、地址以及Dummy Byte时,GT21L16S2W也在向LPC1788
发送数据,数据的传输是双向的,只不过GT21L16S2W向LPC1788发送的数据垃圾数据。因为
GT21L16S2W芯片反应比较慢,所以通过轮询LPC_SSP0-&SR寄存器的SSP_STAT_BUSY位来
等待芯片将垃圾数据发送到LPC1788中,到SSP_STAT_BUSY位为0时,表示双方的这次数据
交换结束。
45-48行:通过这段代码清理掉LPC1788的SSP控制器的Rx FIFO中的垃圾数据。
50-55行:这段代码接收从Slave中传输过来的数据,因为SCK是由LPC1788驱动的,而且SCK只有在
LPC1788向GT21L16S2W传输数据时才会跳变,如果LPC1788不主动向GT21L16S2W传输数据,
GT21L16S2W也不会向LPC1788传送数据,所以每当要从GT21L16S2W读取一个字节数据时,
LPC1788要先向SSP控制器的Tx FIFO写一个字节,向GT21L16S2W发送一个字节的数据来驱
动SCK的跳变,然后等待GT21L16S2W
将一个被读的数据传输给LPC1788的SSP控制器的Rx
FIFO,这个两者之间才能完成一个字节的数据交换,最后再从Rx FIFO中读取数据到函数缓冲区
DataBuffer。重复这个过程直到读完Length个字节的数据。
56行:函数最后将P2[22]引脚置高,取消选通GT21L16S2W芯片。至此读过程结束。
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:11511次
排名:千里之外
原创:20篇
(window.slotbydup = window.slotbydup || []).push({
id: '4740887',
container: s,
size: '250,250',
display: 'inlay-fix'SPI接口及其在数据交换中的应用_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
SPI接口及其在数据交换中的应用
&&_SPI接口及其在数据交换中的应用_
阅读已结束,下载文档到电脑
想免费下载本文?
定制HR最喜欢的简历
你可能喜欢SPI接口技术_图文_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
SPI接口技术
阅读已结束,下载文档到电脑
想免费下载本文?
定制HR最喜欢的简历
下载文档到电脑,方便使用
还剩86页未读,继续阅读
定制HR最喜欢的简历
你可能喜欢采用SPI接口实现双DSP双向通信和同步
采用SPI接口实现双DSP双向通信和同步
摘& 要: 为了实现两片TMS320F2812 DSP之间的双向数据通信和同步,给出了运用TMS320F2812 DSP内部集成的串行SPI外设接口模块实现双DSP控制器双向数据通信和任务同步的硬件电路设计和软件协议实现方案,经过实验验证方案能满足两片DSP之间高效率、高可靠的双向数据通信和任务同步,最后提出了在通信过程中出现故障的解决方案。成功解决了两个DSP控制器的双向数据通信和任务
摘& 要: 为了实现两片TMS320F2812 DSP之间的双向数据通信和同步,给出了运用TMS320F2812 DSP内部集成的串行SPI外设接口模块实现双DSP控制器双向数据通信和任务同步的硬件电路设计和软件协议实现方案,经过实验验证方案能满足两片DSP之间高效率、高可靠的双向数据通信和任务同步,最后提出了在通信过程中出现故障的解决方案。成功解决了两个DSP控制器的双向数据通信和任务同步的问题。
关键词: DSP;SPI;双向通信;同步
&&& 在载人航天、无人机、火控雷达等尖端技术领域的作动系统中,常用双控制器余度技术来提高系统的可靠性。两个控制器之间就需要一种高效可靠的数据通信以保证在同一时间执行相同的周期任务。利用SPI接口可以实现数据双向通信,TMS320F2812 DSP芯片内部集成了一个SPI模块,方案提出了一种基于SPI通信接口的两片DSP的双向通信和任务同步,两片DSP中固定一片作为SPI通信主机,另一片作为SPI通信从机[1],最后提出通信故障的解决办法。
1 DSP SPI外设接口模块和SPI通信原理
1.1 SPI外设接口模块
&& &TMS320F2812 DSP芯片内部集成了一个SPI模块,其数据传输速率和字符长度是可编程的,最高传输速率可达10 Mb/s ,支持主/从模式通信[2]。SPI外设模块和DSP CPU间的接口如图1所示,包括4个外部引脚,采用低速外设时钟LSPCLK作为时钟源,具有两个独立的外设中断请求信号(SPIINT/RXINT和TXINT),提供了12个寄存器实现SPI模块的配置和控制。
&&& SPI之间的通信主要有以下4个外部引脚:
&& &SPISOMI:对于主设备,该引脚为数据输入;对于从设备,该引脚为数据输出;
&& &SPISIMO:对于主设备,该引脚为数据输出;对于从设备,该引脚为数据输入;
&& &SPISTE:主设备向从设备发送的使能引脚;
&& &SPICLK:SPI接口的串行时钟引脚,由主设备向从设备提供同步时钟。
1.2 SPI通信原理
&& &SPI接口可配置为两种模式,分别为主控制模式和从控制模式。图2给出了两个控制器(主控制器和从控制器)之间采用SPI接口的连接关系。主控制器通过发出SPICLK信号来启动数据传输,主从控制器能同时发送和接收数据。
&&& 在主控制器模式下,SPI通过SPICLK引脚为整个串行通信网络提供时钟。此时,要发送的串行数据从引脚SPISIMO移出,并在引脚SPISOMI上接收数据。在系统应用中,主控制器的引脚SPISTE用来控制从控制器的片选信号。在主设备与从设备之间进行数据通信时,主设备将SPISTE置成低电平,使能从设备,此时,从设备的串行数据从SPISOMI 引脚移出,从SPISIMO引脚移入。当数据传输完毕后,SPISTE引脚置为高电平。
&& &写数据到SPIDAT或SPITXBUF,启动SPISIMO引脚发送数据,首先发送SPIDAT寄存器的最高有效位MSB,接收到的数据通过SPISOMI引脚移入SPIDAT的最低有效位LSB。当传输完特定的数据位后,接收到的数据被存到SPIRXBUF寄存器中,以被读取使用。当设定数据长度不足16 bit时,SPIRXBUF寄存器中存放的接收数据采用右对齐格式;而发送数据则需要采用左对齐格式写入寄存器SPIDAT或SPITXBUF[3]。图3为SPI数据传输格式。
2 系统硬件接口设计
&& &系统采用TI公司TMS320F2812 DSP芯片作为控制器,利用SPI接口实现控制器数据通信和任务同步,即同一系统在同一时刻执行相同的任务。其内部集成一个SPI外设模块,要实现SPI数据传输只需要配置几个相应寄存器即可。
&& &SPI的传输只能由主控制器发起,主控制为从控制器提供时钟和使能信号。本设计利用DSP内部集成外设模块,当主控制器发送数据时,通过SPISTE使能从控制器,继而开始SPI的传输。如果在通信过程中,需要从控制器主动向主控制器发送数据,只能采用主控制器发送伪数据的形式为从控制器提供时钟和使能信号。
3 系统软件设计
3.1 软件实现的同步设计
&& &实现任务同步的主要思想是网络通信中的应答模式,具体流程图如图4所示。通信过程中,SPI有可能受到外界干扰导致数据传输错误,而同步过程又是一个死等过程,采用SPI的软件复位可以解决这一问题,在通信过程中若发现接收不到正确ACK信号就进行软件复位重新开始发送,这种方法在实践中得到了验证,效果很好。
3.2 软件通信协议设计
&& &基于SPI的通信有两种情况:由SPI主方发起通信,以及由SPI的从方发起通信。本方案中,采用主动发送数据,中断接收数据。通过配置SPI寄存器,设置数据长度和通信速率,使能增强型FIFO发送和接收,采用7级中断接收数据,即每接收完7个数据后触发一次中断,可以从中断中读取SPIRXBUF里面的数据。由于SPI本身并未规定数据的开始和结束,在实际通信过程中,需要对主控制器和从控制器之间的通信做一个接口通信协议[4]。
&& &在设计中,采用包的方式发送数据,在前面发送一个包头,里面包含奇偶校验(1 bit)、数据类型(8 bit)和包长(数据长度4 bit),在包的后面发送实际应用数据,实际数据的长度和类型可以根据包头确定。图5所示为包的数据帧结构。
&&& 在这种情况下,一次SPI的传输过程可描述如下:主控制器首先发送包头,告知从控制器此次传输的类型以及数据的长度。当传输完7个数据后,进行中断接收,先判断第一个字的奇偶校验位,如果错误则进行软件复位,重新接收并判断;若正确则对数据长度和数据类型进行检验,按照规定的数据长度和数据类型读取到特定的变量中,如果此次接收的数据类型没有和规定数据类型对应上,也认为数据传输错误,进行软件复位,重新接收并判断。主从都采取中断接收数据,主控制器采取主动发送,而从控制器是在产生中断后,在中断服务子程序里先读取数据然后发送特定数据,主从的接收模式判断完全一样。通信过程中,有时需要从控制器主动发送一组数据,需要主控制器为从控制器提供时钟和使能信号,从控制器才可以发送数据,运用主控制器发送伪数据的方式可以解决这个问题。在软件协议中,规定SPI第一个字(包头)全零(0X0000)为伪数据,当包头接收到伪数据时,不判断奇偶校验、数据长度和数据类型,直接丢弃。
3.3 通信故障处理方案
&& &实际应用系统,SPI的通信环境复杂,可能会影响SPI的传输,由于SPI 是一个串行数据的传输,一旦出现故障如果不加以排除就会影响到以后的数据传输,因此这个问题必须加以解决。这个方案中,根据奇偶校验和数据类型的判断可以发现SPI 通信是否出现故障,若判断发现故障后要对故障进行消除和隔离,以免影响以后数据传输。
&& &软件可以实现故障消除和隔离,采用SPI的软件复位功能,可以在判断错误后,先进行复位然后使能,可以通过设置SPI FIFO发送缓冲寄存器SPIFFTX中的SPIRST位进行设置,写0时复位SPI的发送和接收通道,但FIFO寄存器的配置保持不变,写1时,SPI FIFO恢复发送和接收通道,不影响SPI寄存器配置。
4 实验结果
&& &本方案中,DSP的主频为120 MHz,采用SPI的低速时钟30 MHz,数据的传输速率配置为7.5 Mb/s。测试结果表明,SPI能很好地满足两片DSP之间的高速通信。在实际的测试应用中发现,在正常情况下,SPI通信正常,没有通信错误发生;但在外界的某些干扰下,就会出现通信错误,例如在DSP实际应用系统中,用到DSP控制电机,当电机换向运行或转速比较高时就会影响SPI的传输,会出现数据传输错误,这时需进行软件复位。选择7.5 Mb/s的通信速率是进行多次对比设置的,如果速率低,出现错误的概率就大,系统不稳;若速率过快,会影响数据传输,丢失数据。
&& &SPI接口实现简单、I/O资源占用少、传输速度快[5-6],从软硬件方面解决了实际应用系统中的SPI双向数据传输、任务同步和SPI通信故障等问题,成功实现了两片DSP之间的双向通信,且用软件代替硬件实现了任务同步,还对SPI通信故障提出解决方案。可运用于多控制器之间的高速数据传输和同步。
[1] 宋晔,蔡慧,赵荣祥,等.采用SPI接口实现TMS320F240 DSP之间的通信[J].机电工程,):31-33.
[2] TMS320F2810,TMS320F2812 digital signal processors data manual[Z],2003.
[3] TMS320F28x DSP serial peripheral interface(SPI) reference guide[Z],2003.
[4] 梁永明,罗汉文,黄建国,等.DSP嵌入式系统中SPI协议的一种实现方法[J].电子技术,):15-17.
[5] 毛建权,季晓勇.基于SPI的DSP与MCU双向通信的设计与实现[J].科学技术与工程,):.
[6] 孙丽明.TMS320F2812原理及其C语言程序开发[M].北京:清华大学出版社,2008.
型号/产品名
兴业诚信电子
兴业诚信电子
兴业诚信电子
兴业诚信电子SPI及其接口介绍_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
SPI及其接口介绍
&&本文适合刚刚接触SPI的同学,只涉及一些模块,接口的分析,不涉及编程部分。
阅读已结束,下载文档到电脑
想免费下载更多文档?
定制HR最喜欢的简历
下载文档到电脑,方便使用
还剩4页未读,继续阅读
定制HR最喜欢的简历
你可能喜欢

我要回帖

更多关于 微信发送图文消息接口 的文章

 

随机推荐