基于串口的C8051F单片机系统调试软件

来源:本站
导读:目前正在解读《基于串口的C8051F单片机系统调试软件》的相关信息,《基于串口的C8051F单片机系统调试软件》是由用户自行发布的知识型内容!下面请观看由(电工技术网 - www.9ddd.net)用户发布《基于串口的C8051F单片机系统调试软件》的详细说明。
简介:本文介绍了基于串口的C8051F单片机系统调试软件

引言

通过JTAG接口进行软件下载与调试,是很多基于嵌入式微控制器的应用系统的一种功能与手段。但由于JTAG接口的传输距离短,抗干扰能力弱,在实际应用环境中,无法在外部对整机系统的应用程序进行调试[1]。通过UART口来实现系统外部调试功能,可以解决这一问题。根据不同通信协议(如RS232C、RS422、RS485等),采用UART口可以获得传输距离数百米、通信速率最高为数十kbps的点对点传信息输能力,并且该通信方式技术成熟,抗干扰能力强,应用广泛[2]。

C8051F系列单片机具有丰富的外围接口能力,常被很多应用系统采用。C8051F系列单片机内部集成了1~2个UART口,可以方便地提供UART信号。本文以C8051F系列单片机为研究对象设计基于串行口的在系统调试软件,实现基于串口在现场调试功能,通过实验验证了所采用方法的正确性与实用性。这种方法也可方便地应用到类似的单片机系统中。

1 在线调试工具原理与软件调试方法

Keil μVision是德国Keil公司开发的单片机集成开发环境。该集成开发环境包含了编译器、汇编器、实时操作系统、项目管理器、调试器,并为各类单片机提供了仿真调试接口。

Keil μVision提供的调试接口主要有MON51、FLashMON51和ISD51。与通过JTAG口进行调试的方法相比,Keil μVision提供的调试方式都是侵入式。监控程序通过在用户代码中插入调试指令来实现调试功能。

在系统调试器ISD51 (InSystem Debugger)对系统的软硬件要求最小,程序代码可放于任何类型的ROM中,而MON51则需特殊硬件接法[3];与FlashMON51相比,该方法实现简单,内核公开,有较强的灵活配置能力。

ISD51主要用于现场级程序的调试和监控,其内核相对开放,用户可方便地实现应用系统的调试和监控。通过单片机的UART口在应用程序中加入串口中断(ISD51中断),即可实现在系统调试功能。其工作原理为:当ISD51连接到μVision调试器时,单片机进入到ISD51中断,等待μVision的调试指令;当μVision发出运行指令(run)时,单片机退出ISD51中断功能,继续运行程序;当μVision发出停止指令(stop)时,单片机进入ISD51中断并将内部信息反馈给调试器;当μVision发出单步指令(step)时,单片机单步执行并将信息给反馈到调试器。

ISD51提供了3种断点用于程序调试,用户可根据实际情况来选择断点工作方式。

① 硬件断点: 仅用于一些具有断点寄存器的51芯片,如TI公司的MSC1210。采用该断点调试无额外开销,程序可全速运行。

② 软件断点: 可用于全系列51单片机。ISD51通过在单片机内部建立一张软件断点表来实现调试功能。设置的软件断点被加到断点表中;单片机每执行一条指令,ISD51都检查一次软件断点表;软件断点到时,单片机与μVision通信。采用该类断点调试时,软件执行速度降为原来的1/100,且不能在中断中设置软件断点。

③ Flash断点: 用于具有可编程Flash的51单片机。ISD51通过在断点位置插入一条CALL语句来实现Flash断点设置;程序执行到该位置时ISD51被调用,单片机与μVision通信;通信结束后,ISD51用原指令替换掉CALL语句,继续程序运行。故采用Flash断点调试无额外开销,程序可全速运行。

C8051F系列单片机片内集成了Flash,擦写次数可达万次。采用Flash断点来设计在线调试工具,可以更准确地反映C8051F单片机的工作状态和性能。

2 在线调试软件设计

2.1 串口通信设置

确保μVision 调试器和C8051F单片机的通信正常,是开发在系统调试工具ISD51的前提。本设计采用了C8051F040的串口0作为单片机的ISD51中断,上位PC机采用串口1作为通信口。

单片机串口驱动程序设计采用22.118 4 MHz的外部晶振,通过交叉开关配置寄存器XBR0、XBR2将P0.1和P0.0配置成UART0的接收和发送引脚,选择定时器1作为波特率发生器,波特率为9 600 bps。

如图1所示,配置主机通信端口和波特率以匹配单片机内部参数设置。

基于串口的C8051F单片机系统调试软件

图1 PC机仿真端口设置

2.2 对C8051F单片机增强功能的支持

C8051F是增强型8051单片机。有别于其他单片机,C8051F使用了分页存取SFR(特殊功能寄存器)来支持丰富的外部资源。故使用ISD51设计C8051F单片机在线调试程序,需解决的核心问题是如何存取SFR功能寄存器。具体设计步骤如下:

(1) 修改isd51.h文件

C8051F单片机与普通8051单片机的SFR定义不同,通过在ISD51.A51中加入c8051F040.h头文件和注销原通用8051的SFR寄存器的定义,使ISD51支持C8051F系列单片机。同时改写串口0的SFR定义:将TI用TI0代替;将RI用RI0代替;将SBUF用SBUF0代替;将ES用ES0代替;增加PUSHSFR和POPSFR,用于中断处理中对SFRPAGE功能寄存器的保护。

(2) 修改isd51.A51文件

在C8051F单片机中串口0和串口1共享串口控制寄存器SCON和串口接收缓存SBUF的地址,通过SFRPAGE切换来选择使用的串口。故在ISD51与μVision进行通信时,应该始终保证SFRPAGE为0。

通过对ISD51.A51文件中的串口收发宏SBYTE和 GBYTE进行修改加入对SFRPAGE的处理,以确保始终访问的是串口0相关寄存器。

(3) 禁用SFRPAGE自动切换

默认情况下,C8051F进入和退出外设中断时,SFRPAGE将进行自动切换[4]。这导致μVision 在停止用户程序时,SFRPAGE始终为0,使调试器上显示信息与单片机实际工作状态不符。故应禁用SFRPAGE自动切换,以保证调试器信息和单片机工作情况一致。

(4) 完善SFR存取功能

ISD51提供了对SFR的直接存取函数。其中?ISD?READSFRxx将单片机的SFR读到调试器中;?ISD?WRITESFRxx将调试器的SFR值下载到单片机相应SFR中。本设计中包含了对C8051F040所有寄存器的读写功能,用户应根据实际使用的单片机来修改该部分程序。

2.3 Flash断点的设置

虽然C8051F系列单片机内部集成了Flash芯片,但ISD51仅支持小于128字块擦写的Flash芯片。故对于C8051F这种具有大容量字块擦写的 Flash芯片,还要解决Flash断点的设置问题。具体设计步骤如下:

(1) 修改isd51.h以支持Flash断点

在isd51.h中设置擦写Flash的块尺寸大小(CBLK_SZ)的值,将其改为1。表示使能Flash断点,ISD51可单字节擦写Flash芯片。

(2) 修改isd51.h的Flash写驱动程序

通过在擦写期间,临时缓存Flash块数据的方式来实现单字节擦写Flash。将需要改写的Flash块取到临时缓存区中,改写其中的某单元数据后,再将该块缓冲区写到相应的Flash块中,完成单字节擦写Flash操作。

(3) 定位用户程序

C8051F块擦除区域很大: C8051F040的一次擦写块大小为512字节,C8051F120的一次擦写块大小为1 024字节。在应用程序调试时,应避免ISD51系统程序被擦除而产生不可预知错误。故用户程序和系统程序应避免在同一块中出现重叠。

经分析,ISD51系统程序占用了0000h~0580h程序空间。可通过使用code()宏定义将用户程序定位到1000h之后,以实现将用户程序定位到系统程序所在块外。

选择Keil μVision中的菜单project→options for Target下的BL51宏面板,添加图2所示代码。经编译、链接后,delay()位于0x1000地址之后,Timer1Task()位于delay()之后。

基于串口的C8051F单片机系统调试软件

图2 BL51宏设置

?PR?DELAY?TEST: 表示代码段中delay()子程序在编译后的首地址。其中:PR表示程序存储区,DELAY为编写的程序名,TEST为该程序所在的文件名。

0x1000: 表示编译、链接后目标代码的绝对地址为1000h。

2.4 使ISD51支持中断程序

将串口0设置为最高优先权的中断,以使ISD51可以进行中断程序的调试。

3 用户在线调试程序实现与验证

3.1 用户开发步骤

基于本设计思想,用户开发基于串行口C8051F单片机的在系统调试软件的一般流程为:

① 将C8051F040文件夹的内容拷贝到自己的设计目录下。

② 验证单片机串口的设置是否正确,可修改串口初始化程序以匹配实际应用。

③ 修改test中的main()作为自己主程序。

④ 如图2所示,定位用户程序避开ISD51系统程序。

⑤ 采用参考文献[4]的方法编译、链接生成下载文件,通过串口下载到目标的C8051F系列单片机系统中。

⑥ 如图1所示,设置调试器连接参数(如端口、波特率、断点类型、验证等)。

⑦ 选择μVision调试器的debug按钮用于调试用户程序。

3.2 实验和应用验证

在实验室中通过基于串行口的在系统调试软件和Silicon Laboratories集成开发环境,对采用C8051F040微控制器的某自动检测系统的软硬件进行调试对比,在各种状态下两个调试器反馈的结果相同。经实验和实际应用验证,采用串口进行C8051F系列单片机在系统调试的方案是可行的。

由于C8051F单片机采用分页方式来支持扩展的SFR功能寄存器,该设计的不足是只能实时显示和修改当前SFR页中的SFRPAGE功能寄存器,因此用户只能通过修改SFRPAGE并单步运行来显示其他页的SFR寄存器。

4 结论

本文解决了Keil ISD51设计C8051F系列单片机在线调试软件的核心问题,实现了用μVision 调试器进行C8051F系列单片机的在线调试本设计成功应用于对某型无人机飞行控制系统的在现场调试,使用效果良好。该设计思想也可被广大从事单片机应用的开发人员采用,设计其他系列单片机的现场测试工具。

提醒:《基于串口的C8051F单片机系统调试软件》最后刷新时间 2024-03-14 00:56:53,本站为公益型个人网站,仅供个人学习和记录信息,不进行任何商业性质的盈利。如果内容、图片资源失效或内容涉及侵权,请反馈至,我们会及时处理。本站只保证内容的可读性,无法保证真实性,《基于串口的C8051F单片机系统调试软件》该内容的真实性请自行鉴别。