1、 大学毕业设计(论文)题目: 基于ARM的PCI总线通信功能设计 指导教师: 职称: 学生姓名: 学号: 专 业: 院(系): 完成时间: 2011年5月25日 年 月 日摘要本文详细介绍了基于AT91RM9200单片机的PCI总线通信功能的设计,包括硬件设计和软件设计两部分。通信功能的设计着重于单片机与上位机之间通过PCI总线进行的数据传送。本次设计在于用比较容易掌握的单片机来实现PCI控制器的功能,在PCI总线的简单运用场合,大大简化了设计的复杂程度。设计的实现是利用单片机的I/O口与PCI总线的控制信号线以及地址/数据信号线等直接相连,用对单片机的编程来控制数据的传输。文中介绍了PCI总
2、线的基本概念,一些重要信号的定义,以及PCI总线事务的时序。单片机部分介绍了型号的选择,选择了AT91RM9200单片机的理由和AT91RM9200单片机的基本知识。本次设计选择AM29LV160和57V561620作为AT91RM9200外接存储器。设计的结果是成功的完成了原理图绘制和PCB版图的设计,和实验仿真。关键词:PCI总线 单片机 AbstractThis paper introduces in detail the communication function design of the PCI bus based on AT91RM9200 MCU, including har
3、dware design and software design. Communication function design focuses on the data transfer between SCM and PC by PCI bus. The design is to use MCU to realize the function of PCI controller,which is easier to master. In the simple use of the PCI bus, this design will greatly simplify the complexity
4、. The realization of the design is to make the I/O port of MCU directly connected with the control and address/data signal lines of the PCI bus. It controls the data transmission by programming MCU. This paper introduces the basic concept of PCI bus, some important signals, and the definition of the
5、 timing PCI bus affairs. This article at first introduces the choice of microcontroller model, and then introduces the reason that AT91RM9200 is selected and the basic knowledge of AT91RM9200. I choose AM29LV160HY and 57V561620 as the memory of AT91RM9200. The result of the design is completingthe d
6、rawing of schematic diagram, the design of PCB layout and simulation.Key words: PCI bus; MCU 目录第一章 绪论11.1 引言11.2 设计方案21.2.1 设计框图21.2.2 设计要求2第二章 器件相关知识32.1 PCI总线32.1.1 PCI总线的基本概念32.1.2 PCI总线的主要性能42.1.3 PCI总线的特点42.1.4 PCI总线的部分信号定义52.1.5 PCI总线事务的时序82.2 单片机92.2.1 单片机芯片型号的选择92.2.2 AT91RM9200芯片简介92.2.3 AT
7、91RM9200的主要模块及存储器的选择10第三章 硬件设计部分113.1 原理图的绘制113.1.1 AT91RM9200113.1.2 AT91RM9200单片机所需电路123.1.3 HY57V561620153.1.4 AM29LV160163.1.5 PCI总线173.2 PCB版图设计173.2.1 元件的封装173.2.2 PCB版图设计17第四章 软件设计部分194.1 软件编程流程图194.2 单片机初始化过程194.2.1 Boot Loader流程204.2.2 Boot Loader各个子流程阐述20第五章 软件仿真与实验23第六章 设计总结25致谢26参考文献27附录
8、A28附录B29附录C30第一章 绪论1.1 引言PCI总线是一种高性能的局部总线,是为了满足外设间以及外设与主机间高速数据传输而提出来的。PCI总线为系统提供了一个高速的数据传输通道,系统的各设备可以直接或者间接的连接其上,设备间通过局部总线可以完成数据的快速传递。在数字图形、图像和语音处理,以及高速实时数据采集与处理等对数据传输率要求较高的应用中,采用PCI总线来进行数据传输,可以解决原有的标准总线数据传输率低带来的瓶颈问题。目前,PCI总线是个人电脑中使用最为广泛的接口,即使后续的PCI Express总线逐步取代PCI总线成为PC局部总线的主流,也不能掩盖PCI总线的光芒。从软件层面上
9、看,PCI Express总线与PCI总线基本兼容;从硬件层面上看,PCI Express总线在很大程度上继承了PCI总线的设计思路。因此,PCI总线依然是软硬件工程师在进行处理器系统的开发与设计时必须掌握的一条局部总线。对我们来说,研究PCI总线是有着十分重要的现实意义的。利用软硬件具体实现了通过PCI总线进行的通信,就可以熟练掌握PCI总线的通信过程,对PCI总线有更深层次的理解。PCI总线规范允许在计算机内安装多达10个遵从PCI规范的扩展卡。此外,PCI总线系统要求有一个PCI控制卡,必须安装在PCI插槽内。在本次的设计中,利用单片机来实现PCI控制卡和外接设备的功能,单片机通过PCI
10、总线与上位机之间进行通信。具体来说就是,单片机通过PCI总线向上位机发送数据,上位机通过PCI总线来接收单片机发来的数据,上位机也可以通过PCI 总线向单片机发送数据,上位机和单片机之间通过PCI总线实现双向通信。利用单片机进行设计是在保证用PCI总线实现通信功能的基础上,尽可能的简化外接设备,以使PCI总线的应用更加方便。单片机即嵌入式控制器(EMCU),是将CPU,存储器和各种输入输出接口集成在一块半导体硅片上具有一台计算机属性的集成电路芯片。单片机自问世以来,以其极高的性能价格比,受到人们的重视和关注,发展很快。单片机体积小,重量轻,抗干扰能力强,环境要求不高,价格低廉,可靠性高,灵活性
11、好,开发较为容易。由于这些优点,单片机已广泛地应用在工业自动化控制、自动检测、智能仪器仪表、家用电子、电力电子、机电一体化设备等各个方面。而且,近些年来,单片机发展很快,能实现的功能越来越强大,所以掌握单片机的结构和使用编程方法也是必不可少的。选用单片机在本次设计中也是一大特色,既可以熟练掌握PCI总线的工作过程,也可以在设计过程中增强单片机的运用能力。在选择哪一个具体型号单片机的时候,对目前广泛应用的几种单片机的不同功能也有了很多的了解,对于以后的工作和学习有了很大的帮助。本次设计包括PCI总线基础知识的学习,单片机型号的选择,原理图的绘制,PCB版图的设计,仿真与总结。1.2 设计方案 1
12、.2.1 设计框图单片机通过PCI总线与上位机实现通信的设计框图如图1所示:图1 设计框图1.2.2 设计要求要使通信功能能够顺利实现,选用的单片机必须满足以下要求:1.能够传送一个32的数据;2.工作频率至少是PCI总线工作频率的三倍,才能满足时序匹配;3.单片资源丰富,接口应该足够PCI总线使用 4. 在满足以上两点的情况下选择功能比较少,易于掌握的单片机; 5. 选择市面上比较常见,价格也相对便宜的单片机。第二章 器件相关知识2.1 PCI总线 2.1.1 PCI总线的基本概念PCI是由Intel公司1991年推出的一种局部总线。局部总线英文全称是Peripheral Component
13、 Interconnection。PCI是一种由Intel公司推出的用于定义局部总线的规范。从结构上看,PCI是在CPU和原来的系统总线之间插入的一级总线,具体由一个桥接电路实现对这一层的管理,并实现上下之间的接口以协调数据的传送。管理器提供了信号缓冲,使之能支持10种外设,并能在高时钟频率下保持高性能,它为显卡,声卡,网卡,MODEM等设备提供了连接接口,它的工作频率为33MHz/66MHz。PCI总线也支持总线主控技术,允许智能设备在需要时取得总线控制权,以加速数据传送。PCI系统总线的构成如图2所示:图2 PCI总线构成PCI是是目前个人电脑中使用最为广泛的接口,几乎所有的主板产品上都带
14、有这种插槽。PCI插槽也是主板带有最多数量的插槽类型,在目前流行的台式机主板上,ATX结构的主板一般带有56个PCI插槽,而小一点的MATX主板也都带有23个PCI插槽,可见其应用的广泛性。电脑中的PCI插槽如图3所示,图中白色的插槽即为PCI插槽。图3 PCI插槽最早提出的PCI总线工作在33MHz频率之下,传输带宽达到了133MB/s,基本上满足了当时处理器的发展需要。随着对更高性能的要求,1993年又提出了64bit的PCI总线,后来又提出把PCI总线的频率提升到66MHz。目前广泛采用的是32bit、33MHz的PCI总线,64bit的PCI插槽更多应用于服务器产品。本次设计中采用的是
15、32bit、33MHz的PCI总线。当PCI总线进行操作时,发起者(Master)先置REQ#,当得到仲裁器(Arbiter)的许可时(GNT#),会将FRAME#置低,并在AD总线上放置Slave地址,同时C/BE#放置命令信号,说明接下来的传输类型。所有PCI总线上的设备都需对此地址译码,被选中的设备要置DEVSEL#以声明自己被选中。然后当IRDY#与TRDY#信号都已经置低,可以传输数据。当Master数据传输结束前,将FRAME#置高以表明只剩最后一组数据要传输,并在传完数据后放开IRDY#以释放总线控制权。2.1.2 PCI总线的主要性能(1) 支持10 台外设;(2) 总线时钟频
16、率33.3MHz/66MHz;(3) 最大数据传输速率133MB/s;(4) 时钟同步方式;(5) 与CPU 及时钟频率无关;(6) 总线宽度 32 位(5V)/64 位(3.3V);(7) 能自动识别外设。2.1.3 PCI总线的特点PC机上的PCI总线以33MHz的时钟频率操作,采用32位数据总线,数据传输带宽可高达133MB/s,能支持奔腾级电脑的图形数据传输。PCI总线采用地址/数据总线复用方式,在总线规模较小的前提下,保证了总线的高性能。PCI总线是一种可自动配置的总线,即具有即插即用功能。PCI总线是独立于CPU的局部总线,因此,在进行PCI总线接口的开发与应用时,可以不必关心CP
17、U的具体结构和时序,只需按照PCI总线标准设计即可。PCI总线有如下显著的特点: (1) 线性突发传输;(2) 同步总线操作;(3) 多总线主控方式;(4) 不受处理器限制;(5) 兼容性强;(6) 预留了发展空间;(7) 自动配置功能;(8) 编码总线命令;(9) 地址/数据总线复用;(10)高性能价格比;(11)立足现在放眼未来的标准。2.1.4 PCI总线的部分信号定义 PCI总线是一条共享总线,在一条PCI总线上可以挂接多个PCI设备。这些PCI设备通过一系列信号与PCI总线相连,这些信号由地址/数据信号、控制信号、仲裁信号、中断信号等多种信号组成。PCI总线信号的定义与分类如图4所示
18、(1)系统信号 CLK(clock)(IN)PCI系统时钟信号,输入。PCI总线上的所有操作都是与PCI时钟信号同步的,系统在CLK的上升沿采样PCI上设备的所有输入信号。时钟信号的频率范围是0MHz33MHz,或33.33MHz66.66MHz。而66MHz时钟仅支持3.3V的信号环境。时钟仅在节省电源状态下才会停止。 RST#(reset)(IN)复位信号,输入,低电平有效。当复位信号有效时,将所有PCI专用的寄存器、定时器和信号复位到指定状态。一般情况下,全部输出信号处于高阻状态。图4 PCI总线信号的定义和分类(2)地址和数据信号 AD31:0信号PCI总线复用地址与数据信号。PCI总
19、线事务在启动后的第一个时钟周期传送地址,这个地址是PCI总线域的存储器地址或者I/O地址;而在下一个时钟周期传送数据。传送地址的时钟周期也被称为地址周期,而传送数据的时钟周期也被称为数据周期。PCI总线支持突发传送,即在一个地址周期之后,可以紧跟多个数据周期。 C/BE3:0# 总线复用命令与字节选通引脚在地址周期中,C/BE3:0信号表示PCI总线的命令。在数据周期,C/BE3:0引脚输出字节选通信号,其中C/BE3、C/BE2、C/BE1和C/BE0与数据的字节3、2、1和0对应。使用这组信号可以对PCI设备进行单个字节、字和双字访问。PCI总线通过C/BE3:0#信号定义了多个总线事务,
20、四条线可表示16种不同的总线命令。(3)接口控制信号在PCI总线中,接口控制信号的主要作用是保证数据的正常传递,并根据PCI主从设备的状态,暂停、终止或者正常完成当前总线事物,其主要信号如下。 FRAME#信号该信号指示一个PCI总线事物的开始与结束。当PCI设备获得总线的使用权后,将置该信号为有效,即置为低,启动PCI总线事务,当结束总线事务时,将置该信号无效,即置为高。PCI设备只有通过仲裁获得当前PCI总线的使用权后,才能驱动该信号 IRDY#信号该信号由PCI主设备(包括HOST主桥)驱动,该信号有效时表示PCI主设备的数据已经准备完毕。如果当前PCI总线事务为写事务,表示数据已经在A
21、D31:0上有效;如果为读事务,表示PCI目标设备已经准备好接收缓冲,目标设备可以将数据发送到AD31:0上。 TRDY#信号该信号由目标设备驱动,该信号有效时表示目标设备已经将数据准备完毕。如果当前PCI总线事务为写事务,表示目标设备已经准备好接收缓冲,可以将AD31:0上的数据写入目标设备;如果为读事务,表示PCI设备需要的数据已经在AD31:0上有效。该信号可以和IRDY#信号联合使用,在PCI总线事务上插入等待周期,对PCI总线的数据传送进行控制。 IDSEL信号PCI总线在进行配置读写总线事务时,使用该信号选择PCI目标设备。配置读写总线事务与存储器读写总线事务在实现上略有不同。在P
22、CI总线中,存储器读写总线事务使用地址译码方式访问外部设备。而配置读写总线事务使用“ID译码方式”访问PCI设备,即通过PCI设备的总线号、设备号和寄存器号来访问PCI设备的配置空间。(4)仲裁信号PCI设备使用该组信号进行总线仲裁,并获得PCI总线的使用权。只有PCI主设备需要使用该组信号,而PCI从设备可以不使用总线仲裁信号。这组信号由REQ#和GNT#组成。其中PCI主设备的REQ#和GNT#信号与PCI总线的仲裁器直接相连,如图5所示。图5 仲裁器与PCI设备的连接关系2.1.5 PCI总线事务的时序图6 PCI总线事务的时序PCI总线使用它的各种信号进行数据和配置信息的传递,一个PC
23、I总线事务的基本访问时序如图6所示,与PCI总线事务相关的控制信号有FRAME#、 IRDY#、 TRDY#、DEVSEL#等其他信号。当一个PCI主设备需要使用PCI总线时,首先需要发送REQ#信号,通过总线仲裁获得总线的使用权,即GNT#信号有效后,使用以下步骤完成一个完整PCI总线事务,对目标设备进行存储器或者I/O地址空间的读写访问。(1)当PCI主设备获得总线使用权之后,将在CLK1的上升沿置FRAME#信号有效,启动PCI总线事务。当PCI总线事务结束后,FRAME#信号将被置为无效。(2)PCI总线周期的第一个时钟周期(CLK1的上升沿到CLK2的上升沿之间)为地址周期。在地址周
24、期中,PCI主设备将要访问的目的地址和总线命令分别驱动到AD31:0和C/BE#信号上。如果当然总线命令是配置读写,那么IDSEL信号线也被置为有效。(3)当IRDY#、TRDY#和DEVSEL#信号都有效后,总线事务将使用数据周期进行数据传递。当IRDY#和TRDY#信号没有同时有效时,PCI总线不能进行数据传递,PCI总线使用这两个信号进行传送控制。(4)PCI总线支持突发周期,因此在地址周期之后可以有多个数据周期,可以传送多组数据。而且目标设备并不知道突发周期的长度,如果目标设备不能继续接收数据,可以disconnect(断连)当前总线事务。值得注意的是,只有存储器读写总线事务可以使用突
25、发周期。2.2 单片机 2.2.1 单片机芯片型号的选择在绪论中已经介绍了单片机选择的一些要求,要想利用PCI总线进行通信,所选择的单片机的工作速度必须要跟得上PCI总线的工作速度。在众多的单片机中,ARM单片机的速度是非常快的,一般在100MHz以上,PCI总线的工作频率为33MHz,即使ARM采用精简指令系统,速度也能够与PCI总线相匹配,等待的情况应该极少出现。而且ARM单片机的应用广泛,能够实现的功能比较多,所以选择ARM单片机一定能满足设计的要求。目前国内应用较广泛的单片机有三星公司的S3C2440、S3C2410X和 Atmel公司的AT91RM9200等。这三个型号的单片机都满足
26、设计的要求,AT91RM9200的工作频率为180MHz,S3C2440工作频率可达400MHz,S3C2410的工作也可以达到200MHz以上。三星公司的S3C系列的LCD显示模块做的非常好,引脚相对来说比较多,运用起来比较复杂,也会造成功能浪费。AT91RM9200有32位的I/O口PA0:31,方便与PCI总线的32位地址/数据相连。所以我选择AT91RM9200作为本次设计中使用的单片机。2.2.2 AT91RM9200芯片简介 AT91RM9200是完全围绕ARM920T ARM Thumb处理器构建的系统。它有丰富的系统与应用外设及标准的接口,从而为低功耗、低成本、高性能的计算机比
27、较宽的范围应用提供一个单片解决方案。AT91RM9200包括一个高速片上SRAM工作区及一个低等待时间的外部总线接口(EBI),以完成应用所要求的片外存储器和内部存储器映射外设配置的无缝连接。EBI 有同步DRAM(SDRAM)、 Burst Flash 及静态存储器的控制器,并设计了专用电路以方便与Smart Media、Compact Flash 及NAND Flash 连接。高级中断控制器(AIC) 通过多向量 ,中断源优先级划分及缩短中断处理传输时间来提高ARM920T处理器的中断处理性能。外设数据控制器(PDC) 向所有的串行外设提供DMA 通道,使其与片内或片外存储器传输数据时不用
28、经过处理器。这就减少了传输连续数据流时处理器的开销。包含双指针的PDC 控制器极大的简化了AT91RM9200的缓冲器链接。并行I/O (PIO) 控制器与作为通用数据的I/O 复用外设输入/ 输出口线,以最大程度上适应器件的配置。每条口线上包含有一个输入变化中断、开漏能力及可编程上拉电阻。电源管理控制器 (PMC) 通过软件控制有选择的使能/ 禁用处理器及各种外设来使系统的功耗保持最低。它用一个增强的时钟产生器来提供包括慢时钟(32 kHz) 在内的选定时钟信号,以随时优化功耗与性能。AT91RM9200集成了许多标准接口,包括USB 2.0 全速主机和设备端口及与多数外设和在网络层广泛使用
29、的10/100 Base-T 以太网媒体访问控制器(MAC)。此外,它还提供一系列符合工业标准的外设,可在音频、电信、Flash 卡红外线及智能卡中使用。为完善性能,AT91RM9200集成了包括 JTAG-ICE、专门UART 调试通道(DBGU)及嵌入式的实时追踪的一系列的调试功能。这些功能使得开发、调试所有的应用特别是受实时性限制的应用成为可能。 2.2.3 AT91RM9200的主要模块及存储器的选择AT91RM9200的主要模块有电源、时钟、振荡器与PLL、ICE与JTAG、ETM、复位/测试、存储控制器、调试单元、AIC、PIO、EBI、SMC、EBI支持Compact Flash
30、、EBI支持智能媒体、SDRAM控制器、Burst Flash控制器、多媒体接口、USART、USB器件端口、USB Host Port、以太网MAC、同步串行控制器、定时器/计数器、SPI、两线接口。AT91RM9200里面没有存储器,有存储器控制器,在使用时需要外接SDRAM和FLASH闪存。考虑到设计的要求,SDRAM选择16位的HY57V561620,Flash闪存选择16位的Am29LV160。第三章 硬件设计部分3.1 原理图的绘制 绘制好的原理图见附录A和附录B。3.1.1 AT91RM9200如图7所示为原理图中的AT91RM9200部分,设计中采用的是AT91RM9200的P
31、QFP封装,共208个引脚。图7 原理图中的AT91RM9200设计中用到的引脚为:地址线A0:25 数据线D0:31 SDRAM信号接口引脚 其中包括SDWE、CAS、RAS、SDCKE、SDCK、NCS1引脚。Flash闪存接口信号引脚 其中包括NCS0、NRD、NWE0、SYSNRST引脚。JTAG仿真信号接口引脚 其中包括TDI、TMS、TCK、TDO、NTRST引脚。I/O口线 设计中用到了PA0:31和PC中的一部分与PCI总线相连。晶体振荡电路接口引脚 包括VDDPLL(给PLL供电)和GNDPLL、VDDOSC(给振荡电路供电)和GNDOSC引脚。中断及复位引脚等 包括IRQ0
32、、NRST等引脚。电源与接地引脚 其中电源除了晶振电路中的两类外,还有三类:VDDCORE引脚用于向内核供电,包括处理器、存储器与外设,接1.8V; VDDIOM引脚给外部总线接口I/O 口线供电,接3.3V;VDDIOP引脚给外设I/O 口线与USB收发器供电,接3.3V。3.1.2 AT91RM9200单片机所需电路(1)复位电路复位电路的基本功能是:系统上电时提供复位信号,直至系统电源稳定后,撤销复位信号。为可靠起见,电源稳定后还要经一定的延时才撤销复位信号,以防电源开关或电源插头分/合过程中引起的抖动而影响复位。本次设计中对可靠性要求不高,用简易的RC复位电路即可。如图8所示,为AT9
33、1RM9200单片机的上电复位电路。 图8 上电复位电路(2)晶体振荡电路AT91RM9200在使用时,用户必须在XIN引脚提供外部时钟信号,需要注意的是,外部时钟信号必须满足相关电源供给 VDDPLL ( 即在1.65V 到1.95V 间),不能超过50MHz。图9.a、9.b、9.c、9.d 给出了晶体振荡电路的完整图形。图9.a 晶体振荡电路滤波部分图9.b 晶体振荡电路快晶振部分 图9.c 晶体振荡电路慢晶振部分图9.d 晶体振荡电路滤波部分(3)电源转换电路AT91RM9200单片机的电源都是由PCI总线提供的,PCI总线中只有5V和3.3V两种电源,而AT91RM9200需要3.3
34、V和1.8V两种电源,所以需要进行电源转换。设计中,电源转换是利用LM1117-1.8来完成的,把PCI总线中5V的电源转换成1.8V的电源,接到VDDCORE上。需要注意的是,从PCI总线出来的5V和3.3V电源在使用前都要先接去耦电容,可以起到抗干扰的作用。去藕电容就是起到一个电池的作用,满足驱动电路电流的变化,避免相互间的耦合干扰。具体的电路如图10所示,图中的C16就是一个去耦电容。图10 电源转换电路(4)JTAG接口电路JTAG是单片机的仿真接口,用于测试和仿真。标准的JTAG接口是4线:TMS、TCK、TDI、TDO,分别为模式选择、时钟、数据输入和数据输出线。 相关JTAG引脚
35、的定义为:TCK为测试时钟输入;TDI为测试数据输入,数据通过TDI引脚输入JTAG接口;TDO为测试数据输出,数据通过TDO引脚从JTAG接口输出;TMS为测试模式选择,TMS用来设置JTAG接口处于某种特定的测试模式;TRST为测试复位,输入引脚,低电平有效。设计中采用的是14针的接口,如图11所示是AT91RM9200的JTAG接口。图11 JTAG接口电路另外,AT91RM9200的JTAGSEL引脚根据不同的仿真器要置高或置低,用一个3针插座和跳线帽来选择,如图12所示。图12 JTAGSEL引脚外接电路3.1.3 HY57V561620图13 HY57V561620的连接电路HY5
36、7V561620芯片是单片机AT91RM9200的外接数据存储器,存储容量为4M,是一个16位的SDRAM。在需要传32的数据时,可以将32的数据分解成两个16位的数据来传送。它采用的是54脚的TSOP封装。与AT91RM9200的连接关系如图13所示。HY57V561620的数据线接AT91RM9200的数据线的前16位,地址线与AT91RM9200地址线的连接关系如图中所示。另外还有SDRAM接口与单片机相连。LDQM与UDQM用不到,接地就可以了。3.1.4 AM29LV160图14 AM29LV160的电路连接AM29LV160是AT91RM9200的外接程序存储器,存储容量为2M,是
37、一个16位的Flash闪存。它采用的是44脚的SOP封装。与AT91RM9200的连接关系如图14所示。AM29LV160芯片的数据线与单片机AT91RM9200数据线的后16位相连。地址线与AT91RM9200的连接关系如图中所示。CE#、OE#、WE#、RESET#、分别接AT91RM9200单片机的NCS0、NRD、NWE、SYSNRST 引脚。3.1.5 PCI总线 PCI总线的金手指分A面和B面,共122个引脚,一般在B面放置元器件。PCI总线有两种电源,5V和3.3V,设计中只在进行电源转换的时候用到了一个5V的电源,所以剩下的5V接一个电容接地就可以了。3.3V的电源全部都用,在
38、使用前接一个去耦电容,抗干扰。PCI总线上的CLK是同步信号,所以要接到AT91的I/O口上,实现和其他信号的同步。设计中,PCI总线不使用JTAG,所以TDI和TDO短接在一起。其他控制信号以及地址/数据线接AT91RM9200的I/O口,通过编程来实现控制功能。另外,中断INTA#接单片机的中断接口IRQ0。具体的电路图见附录B。3.2 PCB版图设计设计中原理图和PCB版图的设计都是用Protel 99 SE软件完成的。原理图的设计完成后就是PCB版图的设计了,画PCB图的时候要考虑到元件的封装,元件的布局和布线等问题。 3.2.1 元件的封装 (1)、电阻:0805 贴片 (2)、电容
39、:1206 贴片;电解电容:RB.2/.4 插件 (3)、晶振:XTAL1 插件 (4)、三针插座:SIP3 插件 (5)、电感:0805 贴片 (6)、LM117-1.8:TO-220 插件 (7)、AT91RM9200:PQFP 贴片 (8)、HY57V561620:TSOP 贴片 (9)、AM29LV160:SOP 贴片 3.2.2 PCB版图设计由于电路图的元器件较多,电源、地线也较多,所以设计成四层电路板,PCI总线金手指的B面是最上层,放置元器件,A面是最底层,中间两层是电源层和地层。PCB版图绘制过程:(1)、规划电路板。(2)、设置参数。(3)、装入网络表及元件封装。(4)、元
40、件的布局 元件的布局可以使用Protel 99 SE的自动布局,但是最好是自己根据原理图来布局,这样会使布局更加合理。(5)、自动布线 Protel 99 SE有自动布线的功能。(6)、手工调整。自动布线结束后,往往存在令人不满意的地方,需要手工调整。(7)、放置过孔,将地线放在第二层,电源线放在第三层。(8)、镀铜。(9)、文件保存及输出。设计成功的PCB版图见附录C。第四章 软件设计部分4.1 软件编程流程图单片机向上位机传递数据的流程图如图15所示。 上位机向单片机传数据的流程图如图16所示 图15 单片机向上位机传递数据的流程图 图16 上位机向单片机传递数据的流程图4.2 单片机初始
41、化过程由ARM汇编指令编写的嵌入式系统的初始化程序是Boot Loader。汇编编写的嵌入式系统初始化程序一般包含在Boot Loader中的第一阶段的代码中,它和嵌入式硬件系统的硬件密切相关,Boot Loader中这部分初始化程序必须由汇编语言来实现。 4.2.1 Boot Loader流程Boot Loader第一阶段的汇编初始化程序主要完成以下功能:(1)、建立异常中断矢量表(2)、初始化堆栈(3)、把程序从Flash复制到RAM中(4)、跳转到第二阶段的C语言入口点,开始第二阶段的初始化和系统引导。Boot Loader的流程如图17所示。图17 AT91RM9200 Boot Lo
42、ader流程 4.2.2 Boot Loader各个子流程阐述(1)、定义常量ARM920T支持7种操作模式:用户模式、快速中断模式、普通中断模式、管理模式、数据存取中止异常模式、指令未定义模式及系统模式。Boot Loader需要为每种模式建立堆栈,这需要初始化其程序状态寄存器和堆栈指针并且为每个模式建立堆栈。定义常量即定义各个模式。(2)、编译初始化文件编译选项程序流程如图18所示。图18 文件编译选项程序流程如图所示,首先伪指令GBLL定义一个全局的逻辑变量,默认的初始化为F,然后做出判断。ARM有两种工作状态。在arm:32位这种工作状态下执行对准的ARM指令,而在Thumb:16位这
43、种工作状态下执行半对准的Thumb指令。(3)、MACRO定义源文件里有一个宏定义:MOV_PC_LR宏定义,源代码如下:MARCO MOV_PC_LRTHUMBCODEbx lrCODE16 mov pc,lrMEND关键字MARCO代表定义了一个宏,是宏定义的起始处,宏的名称是MOV_PC_LR,MEND代表宏定义的结束。(4)、CODE段开始伪指令AREA表示一个段的开始,段可以分为代码段和数据段,代码段的内容为执行代码,数据段存放代码运行时需要用到的数据。CODE指的是代码段。ENTRY伪指令用于指定汇编程序的入口点,这是汇编程序的入口标志。在一个完整的汇编程序中至少要有一个ENTRY
44、,但在一个源文件里最多只能有一个ENTRY。(5)、异常向量初始化代码必须设置好异常向量表。(6)、主时钟使能AT91RM9200复位启动后,默认情况下,主时钟是禁止的。但是正常工作时,必须使能主时钟,利用汇编实现。(7)、系统低电平初始化AT91F_LowLevelInit系统初始化子函数要完成的任务是:系统时钟设定、Flash和SDRAM的初始化及DBGU端口的初始化。系统初始化的目的是为后面代码段的执行及随后的内核的执行准备好一些基本的硬件环境。(8)、初始化堆栈Boot Loader要为ARM920T的七种操作模式建立堆栈。由于处理器的每种运行模式都有自己独立的物理堆栈寄存器R13,在
45、用户应用程序的初始化部分,一般都要初始化每种模式下的R13,使其指向该运行模式的栈空间,这样,当程序的运行进入异常模式时,可以将要保护的寄存器放入R13所指向的堆栈,当程序从异常中返回时,则从对应的堆栈中恢复,采用这种方式可以保护异常发生后程序正常执行。(9)、RO、RW、ZI段初始化映像文件一般由域组成,域由最多三个输出段(RO、RW、ZI)组成,RO为代码段,RW是已被初始化的全局变量,ZI是未初始化的全局变量。RO是只读的,在运行的时候不可以改变,因此,在运行的时候,RO段可以驻留在Flash里,但是为了能将Boot Loader在线升级,RO段必须运行在RAM里;RW是可以读写的,在运
46、行的时候必须被装在到RAM里,因此Boot Loader将RO、RW段复制到RAM中,并将ZI段清零,以保证程序的正常运行。(10)、跳转到C语言入口点当Boot Loader硬件初始化完毕、建立好中断向量等基本操作之后,第一阶段的汇编初始化程序就跳转到第二阶段由C语言编写的初始化程序中。第五章 软件仿真实验 电路设计完成后,需要检验输入是否正确,因此就需要进行仿真。在设计时,用户通过使用逻辑仿真器,对自己的设计进行仿真,验证设计是否符合要求,在硬件电路实现之前对设计进行修改和完善,从而缩短设计的周期,降低成本。功能仿真是最基本的仿真验证,是在做出实物之前的仿真,它只能仿真设计中的逻辑功能。通过功能仿真,可以验证整个系统的逻辑功能是否正确。用户可以通过观察仿真的波形来对系统的逻辑功能进行分析,并以此为依据,对设计进行必要的修改和完善。这里进行软件的仿真和调试,实验界面如图19和图20所示图19 软件仿真实验界面图20 软件仿真单步运行界面仿真结果:电路逻辑正确,设计成功。第六章 设计总结此次设计是对大学所学知识的一个综合测评,通过这次设计的制作,我对自己所学过的