正在进行安全检测...

发布时间:2023-10-11 09:23:52   来源:文档文库   
字号:
SPI经验总结1.AVR单片机串行接口SPI接口应用设计2011-11-1120:16:35使用的同步串行三线SPI接口,可以方便的连接采用SPI通信协议的外围或另一片AVR单片机,实现在短距离内的高速同步通信。ATmega128SPI采用硬件方式实现面向字节的全双工3线同步通信,支持主机、从机和2种不同极性的SPI时序,通信速率有7种选择,主机方式的最高速率为1/2系统时钟,从机方式最高速率为1/4系统时钟。ATmega128单片机内部的SPI接口也被用于程序存储器和数据E2PROM的编程下载和上传。但特别需要注意的是,此时SPIMOSIMISO接口不再对应PB2PB3引脚,而是转换到PE0PE1引脚(PDIPDO,其详见第二章中关于程序存储器的串行编程和校验部分的内容。ATmega128SPI为硬件接口和传输完成中断申请,所以使用SPI传输数据的有效方法是采用中断方式+数据缓存器的设计方法。在对SPI初始化时,应注意以下几点:.正确选择和设置主机或从机,以及工作模式(极性,数据传输率;.注意传送字节的顺序,是低位优先(LSBFirst还是高位优先(MSBFrist;.正确设置MOSIMISO接口的输入输出方向,输入引脚使用上拉电阻,可以节省总线上的吊高电阻。下面一段是SPI主机方式连续发送(接收字节的例程:#DefineSIZE100UnsignedCharSPI_rx_buff[SIZE];UnsignedCharSPI_tx_buff[SIZE];UnsignedCharRx_wr_index,Rx_rd_index,Rx_counter,Rx_buffer_overflow;UnsignedCharTx_wr_index,Tx_rd_index,Tx_counter;#PragmaInterrupt_handlerSpi_stc_isr:18VoidSpi_stc_isr(Void{SPI_rx_buff[Rx_wr_index]=SPDR;//ISP口读出收到的字节
If(++Rx_wr_index==SIZERx_wr_index=0;//放入接收缓冲区,并调整队列指针If(++Rx_counter==SIZE{Rx_counter=0;Rx_buffer_overflow=1;}If(Tx_counter//如果发送缓冲区中有待发的数据{--Tx_counter;SPDR=SPI_tx_buff[Tx_rd_index];//发送一个字节数据,并调整指针If(++Tx_rd_index==SIZETx_rd_index=0;}}UnsignedCharGetSPIchar(Void{UnsignedCharData;While(Rx_counter==0;//无接收数据,等待Data=SPI_rx_buff[Rx_rd_index];//从接收缓冲区取出一个SPI收到的数据If(++Rx_rd_index==SIZERx_rd_index=0;//调整指针CLI(;--Rx_counter;SEI(;ReturnData;}

本文来源:https://www.2haoxitong.net/k/doc/37ca8c1155270722192ef7d3.html

《正在进行安全检测....doc》
将本文的Word文档下载到电脑,方便收藏和打印
推荐度:
点击下载文档

文档为doc格式