APP下载

基于ATSAM3X4E的uTenux 系统移植及验证

2015-12-06许冬霞

关键词:微控制器缓冲区寄存器

许冬霞

(安徽交通职业技术学院,合肥230051)

随着物联网建设的兴起,国内对基础软件平台建设的投入也越来越多。面向微控制器的小型嵌入式操作系统引起了相关技术研究人员的关注,其中国内开源社区的uTenux操作系统逐渐被开发人员所了解。uTenux系统包含小巧、开源、免费的实时操作系统内核,支持ARM架构平台和较丰富的中间件资源,在微控制领域应用具有一定的优势。Atmel公司的ATSAM3X4E芯片是以面向终端控制应用为目的而设计的一款特色芯片,本文考虑将uTenux开源嵌入式系统移植到ATSAM3X4E芯片上,将会在一定程度上丰富该控制芯片的应用环境,同时也使国内开源系统在物联网终端控制领域得到进一步应用。

1 uTenux系统介绍

uTenux系统是近年来起源于国内uTenux开源社区的一个小型操作系统,因其代码完全开源和系统实时性的特点,而被开源社区爱好者所熟悉,逐渐在ARM微控制器上得到了应用[1]。uTenux的发展方向从早期支持ARM7芯片架构,过渡到部分支持现在主流的Cortex-M架构芯片。作为专用于微控制器的小微型操作系统,uTenux有着非常小的资源占用量,仅占用大约10k左右的RAM和40k左右的ROM存储资源。在中间件协议支持方面,uTenux也有丰富的精简型协议栈支持[2],例如图形用户库emWin和FatFS文件系统,以及面向工业控制的CAN协议和Modbus等。uTenux系统采用了清晰的分层结构设计,其中Board层包含硬件和驱动层,uT/Kernel层是uTenux的实时内核,uT/Lib是实时系统的函数库,uT/Subass层是uTenux的协议栈中间件。uTenux实时系统对丰富的资源具有较强的管理功能,使得在面对大多数应用设计时游刃有余。表1列出了Kernel层包含的主要实时系统内核资源对象。

表1 uTenux内核资源

2 ATSAM3X4E芯片

ATSAM3X4E是Atmel公司的新一代ARM Cortex-M3芯片,是ATSAM3系列产品之一,具有丰富的外设接口和较低的功耗,可从软件配置上选择睡眠、等待和备份3种低功耗模式,在物联网应用控制中具有一定的节能优势。通过使用ARM公司提供的工具软件和Cortex-M微控制器软件接口标准(CMSIS)库,可使得微控制应用开发比以往更加方便快捷。

ATSAM3X4E的内核主频高达84MHz,并内建可嵌套的硬件中断控制器NVIC,支持片上256kB的Flash和64kB的RAM存储空间,在低成本和高存储量之间做了较好的平衡,同时满足uTenux开源系统移植对存储的要求。ATSAM3X4E芯片的优点包括内核支持Thumb-2指令集并内建24位的systick定时器,使得uTenux移植时不借用外部定时器也可进行系统时钟的配置。芯片具有2个PLL单元,分别提供USB 2.0的高速设备时钟源和其他外设的普通设备时钟源。具有1个UART接口和4个USART接口,基本满足了大部分场合的应用通信要求。

因为Atmel公司的芯片ATSAM3X4E定位于工业电机控制或汽车电子控制等应用环境[3],这对运行于其上的软件实时系统的稳定性提出了更高要求,同时也要求uTenux系统的移植结果必须得到验证。

3 uTenux系统移植过程

uTenux系统的移植过程包括对芯片系统时钟的移植、存储地址映射的配置、Flash存储介质的初始化配置和UART通信接口的移植等[4]。限于篇幅,本文仅介绍主要的系统时钟和UART通信接口的移植要点。

3.1 系统时钟的移植

uTenux的系统时钟基于ATSAM3X4E微控制器的硬件时钟单元而确定,实际操作是通过配置芯片的能耗管理控制器PMC(Power Management Controller)来调节微控制器的运行频率[5]。ATSAM3X4E有2个时钟源:分别是12/8/4MHz片内RC振荡器和3~20MHz的片外晶体振荡器。用户可以根据具体应用环境,选择12/8/4MHz的片内RC振荡器,或者使用3~20MHz外部晶体振荡器作为芯片主时钟的时钟源。系统移植时选择主时钟需进行时钟源的配置。

一般而言芯片通电启动时芯片内部的RC振荡器被选择为MCU的默认时钟源,或者切换到等待模式时选用RC振荡器为时钟源。片上12/8/4MHz的内部RC振荡器由于切换迅速、等待时间短,而且其还具有配置简单的特点,可在要求不高的场合下选用。如果MCU处于高性能工作状态,因RC振荡器在高频条件下的稳定性和抗干扰能力弱于片外晶体振荡器,3~20MHz的片外晶体振荡器可满足稳定且更加精确的时钟源,所以在移植过程中,uTenux系统上电启动时将会从片内高速RC振荡器切换到外部晶体振荡器。主要配置可参见表2中的ATSAM3X4E芯片时钟寄存器。

表2 ATSAM3X4E主要时钟配置寄存器

实验在ATSAM3X4E上移植uTenux时主要配置如下:

在实际应用中需要注意的是每次写入响应的配置寄存器后,需要进行循环等待,直到时钟发生器的状态寄存器稳定后,才可进行下一步骤的时钟配置。

3.2 移植UART

大量数据的传输可采用串行UART收发器用来进行。异步模式工作下的UART,无需时钟引脚,可设置为带校验位的8位数据处理方式。UART模块的组成包括数据发送器、数据接收器以及为UART提供时钟源的波特率产生器。通过不断对信号URXD采样,UART接收器可发现接收字符的起始位(Start Bit),如果没有发现则会循环检测,直到有效起始位出现。硬件设计中,当连续大于7个以上时钟周期信号URXD是低电平,则表明得到了有效起始位。把大于7/16的位周期空间当做有效起始位,也就是设置波特率的16倍作为UART采样时钟频率。等于或小于7/16的位周期空间会被省略,UART接收器会持续等待直到出现一个有效起始位。如果发现有效起始位,UART接收器会把采样信号URXD当做紧邻起始位的数据位。

为了保证系统的优先初始化任务,uTenux系统通过芯片ATSAM3X4E的UART接口输出移植过程调试信息时,需要关闭硬件中断和UART的FIFO模式。配置UART的带宽为115kbps,数据规格为8位数据位和1位停止位。移植过程中通信速度设置为115 200bps,不使用FIFO模式,关闭中断。数据格式采用8位数据位,1位停止位。UART基址为0x400E0600,偏移地址与相关寄存器见表3。

表3 ATSAM3X4E主要UART寄存器

试验在ATSAM3X4E上移植uTenux时,对UART的主要配置如下:

4 验证移植结果

与人们日常生活中使用的通用操作系统不同,ATSAM3X4E芯片更多地应用于工业电机控制、汽车电子控制等对环境要求比较苛刻的领域。能够连续无故障地进行任务调度和通信工作[6],是验证uTenux系统在ATSAM3X4E芯片上可靠运行的主要方式。

uTenux消息缓冲区通信机制的测试用例,可创建2个不同优先级的任务在uTenux系统调度下交替运行,每个任务均可向消息缓冲区发送和接收消息,在连续运行48h后观察任务调度和消息通信的状态,来评价此次系统移植的可靠性[7]。

创建消息缓冲区的函数ER MessbufSampleSample(void),此方法启动验证程序创建2个消息缓冲区,消息缓冲区的ID分别是MbfID_1和MbfID_2,同时创建2个任务,其中任务A的优先级高于任务B。

任务A的函数void MessbufSampleTaskA(W stacd,VP exinf),该函数启动任务B后,由于任务B的优先级低于任务A,所以直到任务A进入等待状态,任务B才开始运行。在任务循环中首先等待控制台输入字符,如果是'e',退出任务循环,否则继续执行。任务循环中向第1个消息缓冲区发送1条消息,从第2个消息缓冲区接收1条消息,由于第2个消息缓冲区内还没有消息,此时任务A进入第2个消息缓冲区的等待接收队列。任务循环退出后,终止和删除任务B,删除消息缓冲区1和2,退出和删除任务A自己。

任务B的函数void MessbufSampleSample-TaskB(W stacd,VP exinf),任务B反复从消息缓冲区MbfID_1提取一条消息,向消息缓冲区MbfID_2发送一条消息。当消息缓冲区MbfID_2中存在消息时,被阻塞的任务A将被调度运行。

任务A和任务B交互通信的运行状态如图1所示。

图1 消息缓冲区通信图示

以下是验证uTenux系统在ATSAM3X4E芯片上正常运行的算法,任务A的函数MbfSample-TaskA(W stacd,VP exinf)的主要算法,

运行结果如图2所示。

上图为串口通信终端输出的调试信息,在实验室经过连续48h的不间断运行,观察发现输出的调试信息始终一致,无丢失及卡顿现象,表明了uTenux系统在ATSAM3X4E芯片上进行任务调度切换和消息通信正常,运行状态良好,基本达到uTenux系统移植的要求。

图2 消息缓冲区通信输出

5 结语

在Atmel的工业级芯片ATSAM3X4E上移植uTenux实时系统,需要对硬件平台(微控制器芯片)和软件平台(实时操作系统)都有一定的了解和把握。移植过程需要掌握芯片的构造特点,包括芯片的存储映射关系、Flash存储体的初始化、时钟单元的配置和UART收发单元的配置等[8],才能保证uTenux系统的底层代码能够良好地驱动硬件工作。应当看到,本文所试验的在经过48h不间断的系统运行验证uTenux系统在ATSAM3X4E芯片上的正常运行,也仅仅是个相对结论。如果应用到实际工业生产中,还需要从加倍延长测试时间,以及逐一测试uTenux所有内核资源对象的运行状态等两方面来提高uTenux系统在芯片ATSAM3X4E上移植成功的稳定性。

[1]李红霞.开源实时操作系统uTenux在Cortex-M3平台上的移植[D].大连:大连理工大学,2012.

[2]王磊,吴海洋.lwIP在μTenux实时操作系统上的移植[J].单片机与嵌入式系统应用,2014,14(3):5-9.

[3]赵荣阳,杨祥,王斌.基于 AT91SAM9260的嵌入式Linux系统移植[J].桂林工学院学报,2009,29(4):565-570.

[4]徐亮,姜波.基于Cortex-M3嵌入式操作系统eCos移植[J].工业控制计算机,2009,22(9):29-31.

[5]Baynes K,Collins C,Fiterman E,et al.The performance and energy consumption of embedded real-time operating systems[J].IEEE Transactions on Computers,2003,52(11):1454-1469.

[6]高凯.嵌入式实时操作系统性能测试方法的研究与应用[D].青岛:青岛大学,2010.

[7]付耀.嵌入式实时操作系统的进程间通信[D].武汉:华中科技大学,2008.

[8]逯玉兰,燕振刚,李广.uC/OS-Ⅲ内核在STM32F103VET6芯片上 的移植研究[J].计算机 与现代 化,2014(9):132-136.

猜你喜欢

微控制器缓冲区寄存器
STM32和51单片机寄存器映射原理异同分析
Lite寄存器模型的设计与实现
TASKING针对英飞凌第三代AURIX微控制器推出多核开发环境
移位寄存器及算术运算应用
基于网络聚类与自适应概率的数据库缓冲区替换*
物联网技术在微控制器实验教学中的应用
用于高品质电动汽车的分布式并行计算
一类装配支线缓冲区配置的两阶段求解方法研究
关键链技术缓冲区的确定方法研究
初涉缓冲区