P51XA简易开发装置的设计
2009-08-06
作者:吕治安
摘 要: P51XA单片机的一种简易开发装置的设计和制作。
关键词: P51XA 开发装置
P51XA是Philips公司的16位单片机。它对外的数据总线和内部的结构均为16位,其寻址空间大,最大可为16MB;它有2种工作模式——系统模式和用户模式,有2个堆栈空间——系统堆栈和用户堆栈,特别适用于实时多任务操作系统;其运行速度为标准51单片机的10~100倍,而且它的体系结构和MCS-51兼容,汇编级的指令可以和MCS-51实现转换,很容易学习和掌握,使熟悉MCS-51单片机的嵌入式系统的开发人员能快速向16位微控制器转移,以适应复杂、快速控制的需要。但P51XA单片机的仿真器和开发装置种类很少,且价格昂贵。为此我们研制了一种用于P51XA的简易开发板。开发板采用P51XAK37,它是P51XA的一种派生产品,其寻址空间为1MB,内部有32KB程序存储器、512B的RAM、3个功能增强的定时/计数器和2个串行口。研制的开发板还配有256KB的Flash存储器和256KB的RAM,有2种工作模式——调试模式和用户模式,2种模式可以通过外部跳线选择。在调试模式下开发板可以:从PC机上下载程序,在应用程序中设置断点,启动应用程序的运行,从PC机的窗口观察或设定P51XA内部寄存的值等。在用户模式下,上电后直接运行应用程序。因此它很适合用作程序的开发、调试。又由于其体积较小也可以直接嵌入到用户系统中去。本文即对开发板的软、硬件结构作一介绍。
1 开发板硬件设计
开发板的硬件设计主要考虑:(1)能够提供对P51XA应用系统的调试和排错。(2)使开发板本身能够像一个“大芯片”一样嵌入到用户的应用系统中去。由于使用P51XA的目的是希望发挥16位单片机的优势,故开发板的设计不考虑8位工作方式,全部按工作在16位的方式下进行设计,其电路结构如图1所示。系统中扩展了2片628128以组成256KB的数据存储器,其地址从“0”开始。开发板扩展了2片存储器U2、U3,利用逻辑电路的控制,可以分别切换作为程序存储器或数据存储器使用。U2、U3存储器可以通过跳线选择使用RAM(如628128)或Flash(如29EE010)共组成256KB的空间,相应地在下载程序时有“下载到RAM”和“下载到Flash”的选项。从PC机中下载程序时,U2、U3作为数据存储器使用,这时其地址安排从80000H开始,并可以将从PC机中下传的程序写入其中。当程序下载完后可以将其切换为程序存储器,作为程序存储器时其地址安排为从“0”开始。图1中的译码电路产生存储器所需的3个片选信号:(1)2片RAM的片选,其地址为00000H~3FFFFH。(2)U2、U3的片选除受译码电路控制外还受一个D触发器输出的控制,使它们的地址空间可以在00000H~3FFFFH和80000H~BFFFFH之间切换。(3)由地址译码信号在内部与P51XA的WRH合成后作为一个D触发器的时钟脉冲,可以在程序中对该地址执行写操作,以改变D触发器的输出(其用途后述)。开发板利用P51XA的串行口0实现与PC机的通信。
开发板设有3个跳线J1、J2、J3。利用它们可以选择开发板工作在调试模式或用户模式。选择调试模式时,上电后进入开发板的监控程序,以完成程序下载、设置断点、控制程序运行等;选择在用户模式时,上电后自动开始运行用户程序,且监控程序等对用户程序完全透明。由于U2、U3可以安装RAM也可以安装Flash,故可以用作数据存储器也可以用作程序存储器,但其地址也要相应改变,所以需要有对U2、U3的切换电路(见图1)。其中J1用于选择开发板的工作模式,当J1的1、2触点短接将EA等拉为高电平时,上电后即运行P51XA的片内程序,这时开发板工作在调试模式。同时“与门1”的一个输入端也成为高电平,使“与门1”的另一控制端可以直接控制其输出;当J1的2、3触点短接将EA拉为低电平时,上电后运行外部存储器中的程序,开发板处于用户模式,“与门1”的输出用来控制U2、U3的工作方式。如图1中所示,“与门1”的一个输入由J1控制,若将J1拉低使“与门1”的输出固定为低,此时U2、U3作为程序存储器使用。在这种情况下,上电后运行U2、U3中的用户程序。若J1接高电平,则“与门1”受D触发器的输出所控制,从而决定U2、U3的用法。而D触发器的D输入端接数据总线D15,其时钟信号由译码器的一个输出控制。在监控程序中对该地址进行1次“写操作”使触发器输出为高,这时U2、U3作为数据存储器使用,可将PC机下载的程序写入U2、U3中。程序下载完毕,再对此地址进行1次写操作使D触发器输出为低,此时U2、U3即用作程序存储器。J2、J3用于选择U2、U3的类型,若将J2、J3的跳线1、2,3、4分别短接,则U2、U3使用Flash存储器;若将J2、J3的2、3,4、5分别短接,则U2、U3使用RAM存储器。
开发板的监控程序固化在P51XAG37的内部程序存储器中,其存在问题:(1)工作在调试模式时,上电后进入位于P51XAG37内部的监控程序,与之相重叠的外部程序存储器的最低32KB空间不可访问,因此可以将用户程序安排在32KB以上的空间。再考虑到P51XA本身的一些特点,用户应用程序的第1条指令和中断服务程序只能定位在32KB以上和64KB以下的32KB空间内。但进入用户程序后可以通过远转移到任意位置,这样做的惟一缺陷是浪费了32KB的存储空间。(2)P51XA的中断矢量表位于程序存储器的最低位置,下载时可将其写入U2、U3中,而本开发板工作在调试状态时,U2、U3的最低32KB不可访问。解决的方法:因在下载程序的同时监控程序也获取了中断矢量的有关信息,因此可在监控程序内重定向到真正的中断服务程序。但如果下载程序后改变跳线为用户模式,则复位后全部使用外部程序存储器,直接运行固化在U2、U3中的用户程序即可。
为方便将开发板嵌入到目标系统中使用,在开发板的二侧安装有标准间距的插针,以引出P51XA的主要信号,利用插针就可直接将开发板插入应用系统中。
2 开发板软件
开发板的软件分为二部分:一是运行于PC机上的开发环境,完成编辑、编译、连接、下载等工作;二是位于P51XA内部的监控程序,实现将PC机下载的代码写入开发板上的RAM或Flash中、应用程序的启动/停止、断点的实现和P51XA内部的状态的观察等。
2.1 开发环境
为便于开发板的使用,需要有在PC机上的开发环境。目前仅实现了在DOS下工作的、简单的窗口系统,利用简单的菜单可以完成以下工作:将编辑、编译好的源代码调入一个窗口,直接通过窗口在C源代码中设置断点,将程序下载到开发板中的RAM或Flash存储器中,可以控制开发板中程序开始执行等。当开发板中的程序执行到断点时,可以在另一个窗口中观察到P51XA内部的寄存器和一些变量。源程序的编辑可以使用一些常用的编辑软件,如DOS下的EDIT。编译软件使用HT—TECH的C编译工具。这是一套工作在DOS下的P51XA编译和连接软件。
2.2 程序下载
源程序经编译、连接后生成HEX文件,将该文件通过串行口传送给开发板,并写入U2、U3存储器中。代码下载完成后再将有关设置断点的信息(断点表)下传给开发板。用户程序下传完毕后,监控程序再将U2、U3切换为程序存储器。
2.3 设定断点并观察P51XA内部状态
为便于程序调试,P51XA设有1条断点指令BKPT,该指令只有1个字节,其值为二进制的FF。执行这条指令将会产生1个断点陷阱,它类似一个不可屏蔽的立即中断。因此只需将设置断点处指令的第1个字节修改为FF即可。源代码在编译、连接的过程中可以产生一个包含有调试信息的文件。从该文件中可以得到C源代码中的变量的安排及C语言程序的每行相对应的可执行程序的物理地址等。根据这些信息可以找到在C语言程序中设置的断点所对应的物理地址。当开发板的监控程序接到命令开始执行用户程序时,它首先查阅断点表,并将U2、U3中相应位置的值改为FF,然后开始执行用户程序。执行到断点处后由于断点陷阱,进入相应的服务程序,将P51XA内部寄存器的状态传送给PC机,在窗口中显示出来。这时可以在窗口中修改有关寄存器的值。当从断点处继续运行时,首先将窗口中各寄存器的值恢复到P51XA内部状态,然后将断点处被修改的值恢复为原来的代码,从断点处继续运行。对每一个断点均按此方式处理。
2.4 启动应用程序和中断服务程序
将用户应用程序从PC机中下载到开发板后,通过分析中断矢量表,得到用户主程序和中断服务程序的入口地址和PSW值。因此在监控程序中直接使用转移指令即可开始运行用户程序。而中断的处理是:在开发板内部的监控程序中为每个中断都安排了一个简单的服务程序,但它只有PUSH和RET2条指令。PUSH指令将真正的中断服务程序的入口地址压入堆栈中,而执行RET指令即进入真正的中断服务程序。不过这样做的结果会使进入中断服务程序的时间要延迟若干个时钟周期。
开发板的使用方法如下:在DOS下利用常用的编辑程序书写用户的应用程序,需要注意的是应将用户的主程序和中断服务程序定位在32K~64KB之间。将开发板的J2、J3跳线选择为RAM,编译后利用开发板的调试软件将其HEX文件下载到开发板中,进行调试。调试通过后,将U2、U3改为Flash,再将用户程序下载到开发板中,J1跳线选为用户模式,上电后即可运行用户程序。
3 结束语
本开发板只具备一些简单的程序下载、设置断点、控制用户程序运行、观察P51XA的内部状态等功能,并且监控程序占用了P51XA内部的一些资源,相对于一些商业仿真器来说功能简单了许多,在有些方面还不太成熟,需要进一步完善。但它成本很低,在一般场合已够用,为我们提供了一种简易的P51XA的开发环境。
参考文献
1 梁合庆.从C到嵌入式C编程语言——入门、深入、实用.北京:北京航空航天大学出版社,2000