3. 配置串口驱动
任务目标
在PowerPC目标板上完成串口驱动配置,使VxWorks能够通过串口终端输出启动信息并提供shell交互。本案例以MPC8240平台为例,使用片上DUART(SCC1)作为控制台串口。
环境与依赖
- 宿主机:Windows/Linux,安装WorkBench 3.x或Tornado 2.2
- 目标板:PowerPC(MPC8240),串口线连接至宿主机COM口
- BSP:
mpc8240(或对应板级支持包),需已包含串口驱动源文件 - 串口终端:超级终端或PuTTY,波特率9600,8数据位,无校验,1停止位
配置步骤与关键代码
串口驱动配置的核心在BSP的config.h和sysLib.c中完成。以下为最小必要配置:
// config.h —— 串口控制台配置
#define CONSOLE_TTY 0 // 使用SCC1作为控制台
#define CONSOLE_BAUD_RATE 9600 // 波特率
#define CONSOLE_UART 1 // 启用串口驱动
// sysLib.c —— 串口寄存器基地址与中断配置
#define SCC1_BASE_ADDR 0x80000000 // MPC8240 DUART SCC1基地址
#define SCC1_IRQ_LEVEL 3 // 中断优先级
#define SCC1_IRQ_VECTOR 48 // 中断向量号
// 串口初始化(在sysHwInit中调用)
void sysHwInit(void)
{
// 映射DUART寄存器地址空间
sysOut8(SCC1_BASE_ADDR + 0x00, 0x00); // 复位SCC1
sysOut8(SCC1_BASE_ADDR + 0x02, 0x00); // 屏蔽所有中断
// 配置SCC1为UART模式(8位数据,无校验,1停止位)
sysOut8(SCC1_BASE_ADDR + 0x04, 0x00); // 模式寄存器1
sysOut8(SCC1_BASE_ADDR + 0x06, 0x00); // 模式寄存器2
// 设置波特率9600(基于系统时钟33MHz)
sysOut8(SCC1_BASE_ADDR + 0x08, 0x0C); // 时钟寄存器高字节
sysOut8(SCC1_BASE_ADDR + 0x0A, 0x00); // 时钟寄存器低字节
// 使能发送器和接收器
sysOut8(SCC1_BASE_ADDR + 0x0C, 0x05); // 命令寄存器:使能TX
sysOut8(SCC1_BASE_ADDR + 0x0C, 0x01); // 命令寄存器:使能RX
}
// 串口中断处理(在sysHwInit2中注册)
void sysHwInit2(void)
{
intConnect((VOIDFUNCPTR*)INUM_TO_IVEC(SCC1_IRQ_VECTOR),
(VOIDFUNCPTR)tyIRQHandler, 0);
sysIntEnablePIC(SCC1_IRQ_LEVEL);
}
运行与验证
- 将上述配置加入BSP后,重新编译VxWorks镜像:
make vxWorks - 通过BDM或JTAG将镜像下载到目标板并运行
- 宿主机打开串口终端,连接目标板串口
- 复位目标板,观察终端是否出现VxWorks启动横幅
通过条件
- 串口终端显示VxWorks启动信息,包括版本号和内存检测结果
- 启动完成后出现shell提示符
-> - 输入
i命令能列出系统任务,输入help能显示命令列表
若终端无输出,依次检查:串口线是否连接正确、终端参数是否匹配(9600/8/N/1)、CONSOLE_TTY是否指向实际使用的串口、SCC1基地址是否与硬件手册一致。