林志强 王阳
【摘 要】在实际的嵌入式开发过程中,由于软件对硬件的高度依赖性,使得嵌入式开发陷入软硬件互相制约的困境。而仿真开发成为解决该困境的有效途径,将嵌入式软件开发放到虚拟平台上进行,可极大提高开发效率。论文介绍了基于MPC5554的仿真研究。
【Abstract】In the actual embedded development process, due to the high dependence of software on hardware, embedded development falls into the dilemma of mutual restriction of software and hardware. Simulation development has become an effective way to solve this dilemma. The development efficiency can be greatly improved by putting embedded software development on virtual platform. This paper introduces the simulation research based on MPC5554.
【关键词】SkyEye;MPC5554;仿真
【Keywords】SkyEye; MPC5554; simulation
【中图分类号】V448.25 【文献标志码】A 【文章编号】1673-1069(2021)02-0152-02
1 引言
作为一款典型的指令级仿真平台,SkyEye上集成了多种CPU核,拥有模拟多种CPU开发板的能力。它支持CPU核、输入输出设备、存储器、内存管理单元等多种硬件[1]。按照功能分类,其可以分为用户接口单元、目标控制单元、符号处理单元、目标模拟单元四个部分。本文主要阐述SkyEye对MPC554最小系统及典型外设的仿真以及功能验证。
2 SkyEye目标模拟模块的总体设计
2.1 SkyEye配置选项
根据SkyEye的功能划分,可以从七个方面对SkyEye模拟进行配置,分别是:
①CPU核的配置;
②存储器单元(RAM、flash)的配置;
③UART控制单元配置;
④网络设备的配置;
⑤日志管理单元配置;
⑥开发板的加载;
⑦LCD单元的选择。
2.2 SkyEye逻辑执行流程
在基本选项配置完好的基础上,SkyEye便可以运行。按照时间及功能划分两个过程:
①仿真品台基本选项的配置及加载阶段;
②逻辑功能运行过程。
过程①是整个仿真的基础,是正常运行的基本保证。过程②则在①的基础上,执行特定CPU的仿真,模拟特定的外设资源,执行特定逻辑操作。
3 SkyEye的外部设备模拟实现
本文在Windows操作系统下安装SkyEye平台,选择CPU型号为MPC5554,配置网络基本选项,在完成基本配置的基础上,主要开发上节提到的目标模拟单元,执行嵌入式软件APP,同时可以灵活地分析和调试源代码,该单元具体包括的内容如图1所示。
3.1 对I/O设备的模拟
对I/O设备的模拟,主要包括:设备模块初始化、设备模块读写、设备模块释放等。因此,在mpc_io.c中包括如下函数:
①io_read/write_word:输入输出设备的读取和写入接口,例如,模拟量读写、数字量的读写等。
②io_init:设备的初始化,向SkyEye注册一个设备,同时注册读写的接口。
③io_free:释放设备对象,以此来释放内存。
3.2 对通讯设备的模拟
对通讯设备的模拟,主要包括:设备模块初始化、设备模块读写、设备模块释放、通讯中断的读写。因此,在mpc_uart.c中包括如下函数:
①uart_reset:UART通讯缓存区复位动作的模拟。
②uart_do_cycle:模拟中断方式通讯条件下的串口操作,uart _do_cycle函数执行周期为定时中断的周期,并根据条件产生中断信号。
③uart _read/ uart _write:通讯设备读写函数。
④uart_init:通讯设备的初始化,向SkyEye注册一个设备,同时注册读写的接口。
⑤uart_free:释放通讯设备对象,以此来释放内存。
4 构建5554最小系统并测试外设
4.1 建立5554最小系统
MPC5554属于PowerPC内核系列的32位微控制器,是飞思卡尔推出的MPC5500第一代產品,广泛应用在工业制造、汽车等嵌入式系统中[2]。它支持浮点运算,具备较高的计算性能,可以达到工业控制多任务、多中断实时控制的需求。本文根据官网提供源码,实现MPC5554最小系统,如图2所示。
4.2 编写外设驱动
上文实现的最小系统只具备中断响应及片上串口escia收发功能,需要我们进一步开发外设驱动程序,如输入输出、通讯设备。编写外设驱动程序可分为以下步骤:
①编写model.h头文件,定义外设相关寄存器地址(需要保证model.h定义的地址和第二节定义仿真系统中的地址一致)、所有外设函数的声明等;
②编写uart.c文件,主要实现串口初始化(波特率及校验方式)、串口复位、串口收发函数;
③编写io_input.c和io_output.c,完成输入输出设备的采集和发送[3]。
4.3 外设测试
本文使用5554片上定时中断,中断任务定义为task1,后台任务task2。实现如下:
Void task1(void)
{
Io_read(); //IO读取
Io_write(); //IO写入
Uart_write(); //串口发送,用来监视
Uart_read(); //串口读取,用来接收指令
}
Void task2(void)
{
While(1)
{
//后台任务
}
}
5 结语
为了避免嵌入式开发中软件对硬件的高度耦合带来的影响,引入指令级仿真的方式,可极大提升软件开发效率。在仿真平台上进行开发,可以有效地调试和验证软件的功能,不再依赖于具体硬件。因此,本文基于SkyEye仿真平台,构建了MPC5554仿真环境,并模拟和测试了I\O設备功能,取得了良好的效果。
【参考文献】
【1】杨兴伟.基于SkyEye的SMDK2410硬件仿真平台设计[J].可编程控制器与工厂自动化,2009(10):87-90+105.
【2】刘明.基于MPC5554的周期数据传输关键技术[J].电子科技,2015,28(07):51-53.
【3】赵成.嵌入式系统应用基础:基于S3C2410A的SKYEYE仿真与实践[M].北京:国防工业出版社,2012.