前面各章节已经详细地介绍了赛车硬件各个模块的的制作过程,本章节主要讲软件的开发环境。系统硬件最重要的是稳定,保证赛车有健壮的身躯,但 仅此是不够的,有了健壮的躯体还必须要有聪慧的大脑,算法是赛车的灵魂。要把赛车硬件与算法连接在一起,就需要一个良好的开发环境,为 Motorola(Freescale) 单片机提供商用软件的公司很多,这些公司不仅提供C 交叉 编译器,还提供集成开发环境 IDE 。在本次系统的开发中,我们使用 Metrowerks 公司为MC9S12 系列专门提供的全套开发工具(Metrowerks CodeWarrior )。 CodeWarrior 是由Metrowerks 公司提供的专门面向Freescale 所有MCU 与 DSP 嵌入式应用开发的软件工具。其中包括集成开发环境 IDE、处理器专家、全芯片仿真、可视化参数显示工具、项目工程管理、C 交叉编译器、汇编器、 链接器以及调试器。其中在本设计方案中最为重要的部分就是集成开发环境IDE 以及调试器,接下来将主要介绍这两部分。
7.1 软件开发平台CodeWarrior IDE
7.1.1 Codewarrior IDE 功能介绍
CodeWarriorIDE 能够自动地检查代码中的明显错误,它通过一个集成的调 试器和编辑器来扫描你的代码,以找到并减少明显的错误,然后编译并链接程 序以便计算机能够理解并执行你的程序。每个应用程序都经过了使用象 CodeWorrior 这样的开发工具进行编码、编译、编辑、链接和调试的过程。 具体到比赛所应用 MCS12DG128B 的一个显著特点就是片上外围设备众 多,每个外围设备对应的寄存器也较多,有的甚至达到三十多个。Metrowerks CodeWarrior IDE 中的 MC9S12DG128.H 文件对所有寄存器对应的存储映射地 址都进行了宏定义,开发者在软件开发时直接调用这些宏就可以了(如图 10.1)。 而且,这些宏的名称都与说明文档上相应寄存器的名称相同或类似,这样,很便于对MC9S12DG128 的开发。
7.1.2 Codewarrior IDE 基本使用方法
1. 建立工程文件
在安装好 Codewarrior 后,可以运行“开始 | 所有程序 | Freescale CodeWarrior | CW for HC12 V4.5 | CodeWarrior IDE”启动Codewarrior IDE,也可 以双击桌面上的快捷方式 启动Codewarrior IDE。Codewarrior IDE 启动后会 打开如图7.1 所示的启动界面。

选择“File | New”,弹出如图7.2 所示的对话框。

然后选择HC(S)12 New Project Wizard,输入工程的名字,例如“car”,选择 工程的保存位置,然后点击“确定”,如图7.3 所示。

在以后的操作中,目标板选择“MC9S12DG128B”,其他则根据提示选择需 要的选项,直至建立工程文件。成功建立工程后显示如图7.4 的程序编写界面, 并且可以看到编译器自动生成的文件系统。

至此一个新的工程文件就建成了,从而可以开始编写程序。
2. 编写程序
编译器自动生成的系统文件中最重要的文件就是 start12.c 、main.c 和 Full_Chip_Simulation_linker.prm。
1) 定义装载地址
工程建立后,需要定义装载地址,Full_Chip_Simulation_linker.prm 文件用 于定义目标代码的装载地址,即 .prm 文件定义程序的数据区和代码区,与系统 硬件有关。MC9S12DG128 Memory Map 如图7.5 所示:

a. RAM 空间定义 CodeWarrior 自动生成的 .prm 文件默认的 MC9S12DG128B 的 RAM 在:
RAM = READ_WRITE 0x0400 TO 0x1FFF;
因为在这个默认的 RAM 内有 1K 的I/O 寄存器空间和2K 的EEPROM 空 间,使用默认的RAM 空间定义会损失 1K 的RAM 和 2K 的EEPROM。所以在 我们的程序中修改RAM 的空间到:
RAM = READ_WRITE 0x2000 TO 0x3FFF;
b. 堆栈定义
CodeWarrior 自动生成的 .prm 文件默认的 MC9S12DG128B 的堆栈大小 为256B:
STACKSIZE 0x0100 因为我们在算法上使用记忆路径,256B 的堆栈已经不满足程序的需要,因此必须改变堆栈的大小:
STACKSIZE 0x0b00
c. ROM 空间定义
找到下面语句并将其注释掉:
DEFAULT_ROM INTO
PAGE_38,PAGE_39,PAGE_3A,PAGE_3B,PAGE_3C,PAGE_3D;
在:
NON_BANKED,
后面添加:
DEFAULT_ROM,
修改后如下:
NON_BANKED,
DEFAULT_ROM,
COPY
INTO ROM_C000
即将默认的ROM 空间定义到C000 地址开始的ROM 段中。 另外除上述三处需要修改外,还需要将工程文件 start12.c 中的
void __interrupt 0 _Startup(void) 中的#if defined(_HCS12_SERIALMON) 和 #endif
两句宏命令注释掉,或者在工程文件 start12.c 中的宏定义语句:
#define __NO_FLAGS_OFFSET
#define __NO_MAIN_OFFSET
#define __NO_STACKOFFSET_OFFSET
后面添加语句:
#define _HCS12_SERIALMON
使得函数void __interrupt 0 _Startup(void) 中对于EEPROM 和RAM 起始位 置控制寄存器的初始化语句有效。这样,下载后程序可以正常运行。 通过上述步骤后的程序装载地址如下图所示:

0x0800 2K
0x0FFF EEPROM
0x2000 8K
0x3FFF RAM
0xC000
16K
FLASH
0xFEFF
0xFFFF
VECTORS
图7.6 程序装载地址
2) 添加程序代码
在已经建立好的工程文件中添加程序代码,实现赛车算法,并且通过编译。
7.2 程序下载调试TBDML
1. 下载程序
在 Freescale\CW for HC12 V4.5\prog 目录下,启动 CodeWarrior 自带的 hiwave.exe 程序,可以将已经通过编译的程序通过BDM 下载至单片机和调试单 片机的程序。启动后显示如图7.7 所示。

1) 安装BDM for S12(TBDML) 的驱动程序
初次使用 TBDML 时必须要安装驱动程序。将TBDML 连接通过USB 接口 连接到PC 机,安装驱动程序。驱动程序位于文件 中,安装完成后,将在设备管理器中出现“LibUSB-Win32 Devices”设备,设备 名为“Turbo BDM Light USB (LibUSB-W32)”。
2) 为CodeWarrior 安装BDM for S12 (TBDML)的DLL
启动hiwave.exe 程序,设置目标板为 MC9S12DG128B。在弹出的图7.8 所 示的对话框中,点击[Browse…]选择tbdml_gdi12.dll 文件,该文件即为需要选择 的动态链接库,位于文件夹 【bin_tbdml_win_driver_11 】 中。选中 【Show Protocol】 选项,然后单击【确定】 图7.8 安装动态链接库tbdml_gdi12.dll 文件

3) 使用BDM for S12 (TBDML) 调试S12 单片机
完成上述步骤后,hiwave.exe 程序中就会出现【TBDML HCS12】菜单,如 图7.9 所示。利用该菜单中的选项,就可以进行目标单片机的程序下载、设置断 点、调试等操作。

首先点击【Reset】选项,然后点击【Flash】选项,弹出如图7.10 所示的程 序擦除下载对话框。如果已经写入程序,必须先擦除后向单片机下载程序。通 过选择已经写入程序的 Flash,单击【Erase】,擦除程序。然后单击【Load】, 下载已编译好的程序,可以是位于工程文件夹下子文件夹【bin】中的 .s19 文件 也可以是位于同一文件夹下的 .abs 的文件,区别是 .abs 可以通过 TBDML 在 线调试单片机程序。

7.3 辅助调试方法
7.3.1 串口调试
由于系统板上集成了串口,所以用串口调试程序是很实用的调试方法,而 且可以传输大量数据,通过程序配合给出的信息,可用于赛车行进中的状态分 析,简便易行。串口初始化程序如下:
//初始化串行口参数,波特率设置为9600
void InitSCI(void)
{
SCI0BD = 156;//设置波特率寄存器,波特率为9600
SCI0CR2_TE = 1;//发送使能
SCI0CR2_RE = 1;//接收使能
}
串口接收数据画面如下图所示:

对于下图的赛道(左侧),摄像头给出的二值化图像信息(右图),进行比 较可以进行摄像头的调整。

7.3.2 按键模块
在红外对管检测中,通过按键可以分别设置第一圈和第二圈的直道速度, 弯道速度,控制赛车的运行;摄像头检测中,通过按键可以设置直道速度,弯 道速度,摄像头探测距离等。

7.3.3 蜂鸣器
蜂鸣器的运用能够使得赛车调试更加方便,因为人的听觉很敏感,在赛车 的行进中,通过控制蜂鸣器的发声与否,可以判断赛车当时所处的状态,和红 外或者摄像头所接收到的赛道信息,利用此种调试工具可以方便的调试程序, 简便易行。

7.4 本章小节
本章主要介绍了软件开发平台 Codewarrior IDE,程序的下载和调试,是赛 车硬件和软件的桥梁与纽带,良好的软件开发环境是系统设计的基础和保证。 同时简单介绍了赛车的几种辅助调试工具,串口、按键和蜂鸣器,这些模块不 仅成本低而且方便易用。


