与单片机实现串行通信_第1页
与单片机实现串行通信_第2页
与单片机实现串行通信_第3页
与单片机实现串行通信_第4页
与单片机实现串行通信_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、题目名称:FPGA与单片机实现串行通信目录1设计任务及内容12设计方案13系统硬件设计13.1单片机串行通信设计23.2 FPGA串行通信34系统软件设计54.1 FPGA单元设计54.2串行通信MAX323265.系统调试106课程设计总结10附录:111设计任务及内容要求实现FPGA与单片的串行通信,熟悉单片机和VHDL语言的编写,在设计过程中对单片机与FPGA有进一步理解,能够实现串行通信。2设计方案整个设计采用模块化的设计思想,可分为四个模块:FPGA数据发送模块,FPGA波特率发生控制模块,FPGA总体接口模块以及单片机数据接收模块。在通信过程中完全遵守RS232协议,并利用VHDL

2、语言实现 FPGA与单片机的串口异步通信电路。本设计采用ll位帧格式异步通信方式,一位起始位、一位停止位、一位奇偶校验位、8位数据位,基于有限状态机原理进行FPGA设计。设计方案框图如下:FPGA 单片机发送器通信控制控制器接收器波特率发生3系统硬件设计3.1单片机串行通信设计单片机与FPGA串行通信可采用单片机的SPI(串行外设接口)方式。相对于UART,SPI更简单,速度更快。SPI共四条线。MOSI(Master Out Slave In)MISO,SCK(Serial Clock),SS(Slave Select)。图1为SPI T作时序。当单片机向FPGA传输命令或数据时,应用SPI

3、的四种模式中的SPIO模式。当片选SS拉低。然后在每个时钟(SCK)上升沿送出数据。将片选信号SS与移位寄存器使能端(En)相接,MOSI与移位寄存器数据输入端(SI)相接,SCK同时为移位寄存器提供时钟信号。在SS信号为低电平时,移位寄存器开始工作,在每个时钟上升沿将接收到的数据左移一位,等全部接受完毕,将SS置一l”,移位寄存器工作完毕,同时为触发器提供时钟,使移位寄存器接收到的数据并行输出。当单片机从FPGA读取数据时,向FPGA发送读使能信号RE(可用任意空闲I0口)。在每个时钟(SCK)上升沿FPGA送出一位串行数据,单片机通过MISO读取数据。借助VHDL硬件描述语言和EDA开发工

4、具可方便的实现该系统。如下图所示:图一:单片机电路3.2 FPGA串行通信由于FPGA具有丰富的引脚资源,且EP1C3T100C8N的核电压是33 V,STC89LE52的输出电压也是33 V,所以任选3064A四个IO与单片机4个IO口连接即可,若连接在单片机的Po口时需要加上拉电阻。在这里将SS(CS)、SCK、SDI、SDO分别如图所示连接。图二:FPGA电路4系统软件设计4.1 FPGA单元设计FPGA的设计是通信网络的核心部分。依据功能要求,FPGA内部划分成四大功能模块:SRAM控制器、发送数据缓冲模块、16个UART模块、接收数据缓冲模块。发送数据缓冲模块划分成16个RAM区,每

5、个RAM区分别连接1个UART,当发送缓冲模块接收到主单片机下发的控制数据后,启动UART将数据发送至从单片机。接收缓冲区同样分为16个RAM区,发送控制数据后,UART周期性地向从单片机发送状态查询命令,从单片机将最新状态发送至UART模块,UART模块将数据存入接收缓冲模块相应的RAM区。如图3所示。FPGA内部共有16对读写和数据总线,分别连接UART和相应的发送缓冲区RAM及接收缓冲区 RAM。FPGA内部模块采用图3 FPGA内部功能模块示意图自顶向下的设计方法,将复杂系统划分为简单系统,然后通过逻辑和接口设计实现各个模块功能。SRAM控制器用于FPGA和 C8051F020的接口,

6、负责内部RAM的读写控制。UART负责接收从单片机上传的串行信号,将其并行化后存入接收数据缓冲RAM;另外也负责将发送缓冲RAM中的数据转换成符合RS232协议规范的串行信号发送给从单片机。FPGA内部系统采用同步有限状态机(FSM)的设计方法实现,FSM负责调配各功能模块之间的协作。状态机采用独热(onehot)编码,使电路的可靠性和速度有显著的提高。系统状态转移图如图4所示。4.2串行通信MAX3232主单片机和上位机的通信速率及FPGA和从单片机的通信速率均设置为384 Kbps,可以更精确的控制主单片机与各个从单片机之间的通信时间。通信指令由报头、设备类型、设备号、命令号、命令数据、校

7、验等字段组成。报头用于通知单片机开始串行通信。设备类型和设备号用于将指令正确传达到相应的设备,命令号用于通知单片机指令,命令数据用于通知单片机具体的功能,校验则采用CRC校验以保证通信的准确性。写入控制命令号为OOH,读取命令号为01H,读取指令命令数据为0字节。通信指令的帧格式如下:单片机接收到控制命令后,如果接收正确,返回00H,若错误则返回01H。返回帧格式为:        接收后单片机返同帧格式为:系统发送、接受程序流程图如下: 初始 初始发停止位? 接受 发送 启动接受 发送起始位 接收数据 发送数据 9位? 9位? 停止

8、位? 结束 结束FPGA发送数据的仿真图如下:图中Din写入值为3355H,波特率为2400Hz,Start信号始终置逻辑1,即随时都能发送数据。Reset信号逻辑1时复位,逻辑0时电路开始工作。THR是数据寄存器,文件头、数据长度以及数据位都先寄存到THR中,Len是数据长度,TSR是低8位数据帧寄存器,TSR1是高8位数据帧寄存器。数据长度Len定为02H,发送时先发送低8位55H,后发送高8位33H,一共发送两遍。发送的数据格式说明:当发送55H时,其二进制为01010101,则发送的数据的二进制数为00101010111(1位开始位+8位数据位+1位奇校验位+1位停止位)。单片机部分先

9、对FPGA发送过来的文件头进行确认,正确就接收文件,否则放弃接收的数据。根据FPGA发送模块的协议,对串口控制寄存器SCON和波特率控制寄存器PCON的设置即可实现。FPGA接收数据仿真图:串行数据帧和接收时钟是异步的,发送来的数据由逻辑1变为逻辑0可以视为一个数据帧的开始。接收器先要捕捉起始位,确定rxd输入由1到0,逻辑0要8个CLK16时钟周期,才是正常的起始位,然后在每隔16个CLK16时钟周期采样接收数据,移位输入接收移位寄存器rsr,最后输出数据dout。还要输出一个数据接收标志信号标志数据接收完。5.系统调试首先,检查电路板上各个元器件的工作电压正确,电路板能正常工作;其次,将调

10、试的部分小程序下载到电路板上,检测R232能正常工作;再次,将单片机发送,FPGA接受的子程序下入电路板,观察现象正确,将FPGA发送,单片机接受的子程序下入电路板,观察现象;最后,将总程序下载到电路板中,观察现象正确。6课程设计总结此次课程设计,让我们有机会把课本中学到的理论应用到实际中去,理论联系实际,在更好的掌握了书本中的知识的同时加强了动手能力,在调试工程中遇到了许多问题,这些问题是在书中学不到的,只有通过查阅大量资料,咨询老师和同学,我们才一步步排除电路错误,在调试排错的同时收获了很多单片机实际应用中的知识。这次实习让我们受益匪浅,无论从知识上还是其他的各个方面。上课的时候的学习从来

11、没有见过真正的单片机,只是从理论的角度去理解枯燥乏味。但在实习中见过甚至使用了单片机及其系统,能够理论联系实际的学习,开阔了眼界,提高了单片机知识的理解和水平。这几周的实习还是比较辛苦的,程序里面的好多内容不懂,自我感觉是单片机和FPGA我们所学的内容还不足以编出这两个程序,但是只好硬着头皮去看去理解。但在学习过程中也充满了乐趣,当看懂了程序的一些语句,画出了要求的设计图,那我喜悦那种成就感油然而生。在这次课程设计中又让我体会到了集体的力量,当遇到不会或是设计不出来的地方,我们就会向老师或者是同学请教。团结就是力量,无论在现在的学习中还是在以后的工作中,团结都是至关重要的,有了团结会有更多的理

12、念、更多的思维、更多的情感。这次课设是对我的学习态度的一次检验。对于这次课程设计,我的第一大心得体会就是作为一名工程技术人员,要求具备的首要素质绝对应该是严谨。我们这次实习所遇到的多半问题多数都是由于我们不够严谨。我们认识到,无论做什么事情,只要你足够坚强,有足够的毅力与决心,有足够的挑战困难的勇气,就没有什么办不到的。通过这次单片机实习,我不仅加深了对单片机理论的理解,将理论很好地应用到实际当中去,而且我还学会了如何去培养我们的创新精神,从而不断地战胜自己,超越自己。创新可以是在原有的基础上进行改进,使之功能不断完善,成为真己的东西。单片机和FPGA是电子信息工程的一门重要专业课,学好单片机

13、和EDA,就可以凭这个技术找一个好工作。为即将毕业的我们在面试时提供了一些实习经验。我们要在今后的学习中进一步学习单片机知识,培养对其的兴趣,为将来工作打好基础,充实度过大学生活。附录:Library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity atel2_bin isport( txclk: in std_logic; -2400Hz的波特率时钟reset: in std_logic; -复位信号din: in std_logic_ve

14、ctor(15 downto 0); -发送的数据start: in std_logic; -允许传输信号sout: out std_logic -串行输出端口);end atel2_bin;architecture behav of atel2_bin issignal thr,len: std_logic_vector(15 downto 0);signal txcnt_r: std_logic_vector(2 downto 0);signal sout1: std_logic;signal cou: integer:=0;signal oddb:std_logic;type s is(

15、start1,start2,shift1,shift2,odd1,odd2,stop1,stop2);signal state:s:=start1;beginprocess(txclk)beginif rising_edge(txclk) thenif cou<3 then thr<="0000000001010101" -发送的文件头elsif cou=3 thenthr<="0000000000000010" -发送的文件长度elsif (cou>3 and state=stop2) then thr<=din;-发送的

16、数据end if;end if;end process;process(reset,txclk)variable tsr,tsr1,oddb1,oddb2: std_logic_vector(7 downto 0);beginif reset='1' thentxcnt_r<=(others=>'0');sout1<='1'state<=start1;cou<=0;elsif txclk'event and txclk='1' thencase state iswhen start1=>

17、if start='1' thenif cou=3 thenlen<=thr;end if;tsr:=thr(7 downto 0);oddb1:=thr(7 downto 0);sout1<='0' -起始位txcnt_r<=(others=>'0');state<=shift1;elsestate<=start1;end if;when shift1=>oddb<=oddb1(7) xor oddb1(6) xor oddb1(5) xor oddb1(4) xor oddb1(3) xor o

18、ddb1(2) xor oddb1(1) xor oddb1(0);sout1<=tsr(0); -数据位tsr(6 downto 0):=tsr(7 downto 1);tsr(7):='0'txcnt_r<=txcnt_r 1;if (txcnt_r=7) thenstate<=odd1;cou<=cou 1;end if;when odd1=> -奇校验位if oddb='1' thensout1<='0'state<=stop1;elsesout1<='1'state<=stop1;end if;when stop1=>sout1<='1' -停止位if cou<4 thenstate<=start1;elsestate<=start2;end if;when start2=>tsr1:=thr(15 downto 8);oddb2:=thr(15 downto 8);sout1<='0' -起始位txcnt_r<=(others=

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论