基于Cortex-M3的车载无线视频服务器串口扩展设计
2012-06-06祁莉娜徐良平邵文军
祁莉娜,徐良平,邵文军
(1.武汉邮电科学研究院,湖北 武汉 430074;2.武汉虹信通信技术有限责任公司,湖北 武汉 430074;3.华中科技大学,湖北 武汉 430074)
嵌入式系统中通常采用串口实现微控制器与外部设备之间的通信,但在一些应用场合往往有多个外部设备与微控制器通过串口通信,而一般的嵌入式微控制器只有一到两个串口,不能满足要求,这就需要对串口进行扩展[1-2]。比如车载无线视频服务器中的主芯片DM365微控制器自带两个串口,但是它需要通过串口控制云台,同时接收来自GPS模块的数据、红外遥控器的控制命令以及网络键盘的云台控制命令等。
本文设计一种应用于车载无线视频服务器的串口扩展嵌入式系统,它采用实时操作系统μC/OS-Ⅱ,串口扩展芯片是 TI公司的基于 Cortex-M3内核的微控制器LM3S1538,通过LM3S1538来扩展车载无线视频服务器的主芯片DM365的串口。
1 Cortex-M3 介绍
Cortex-M3是一种ARMv7架构32位处理器内核,拥有比普通单片机更高的性能和更丰富的功能、比一般的ARM32系统更低的功耗和成本[3]。它采用了哈佛结构,拥有独立的指令总线和数据总线,数据访问不会占用指令总线,这样一来就可以同时进行取指和数据访问,处理器能够并行执行多个操作,大大提高了程序的执行效率。Cortex-M3内核流水线是一种分支预测的流水线,这种设计提高了指令执行的速度。此外,Cortex-M3内核中嵌入了Thumb-2指令集,避免了早期的处理器中由于16位Thumb状态与ARM状态的相互切换导致的性能下降,在保留代码的紧凑性的同时提高了系统的性能。Cortex-M3的另一优点是它有一个嵌套向量中断控制器 (Nested Vectored Interrupt Controller,NVIC),采用末尾连锁技术,提供准确快速的中断处理。最后值得一提的是Cortex-M3多种多样的调试组建支持方便的调试功能。
2 μC/OS-Ⅱ介绍
μC/OS-Ⅱ是在μCOS基础上经过10年的修改和发展而来的,相比μC/OS,μC/OS-Ⅱ提出了更多的功能。μC/OS-Ⅱ是一种开放源码、可裁剪的基于优先级可剥夺实时内核,它有很强的可移植性,目前已被移植到40余种不同体系架构的处理器上。μC/OS-Ⅱ起初就是为微控制器系统设计的,它的结构小巧,仅包含了基本的任务调度与管理、内存管理以及任务间的通信与同步机制,又由于是可裁剪的,在应用系统中核心部分的代码最少只有2.7 kbyte,因此,μC/OS-Ⅱ对于一些小型的嵌入式系统来说十分合适。
木犀草素·4,4′-联吡啶药物共晶对小鼠巨噬细胞RAW264.7的抗炎作用研究 ……………………………… 刘立新等(5):602
创建串口通信消息队列,实现串口数据接收线程和GPS数据处理线程、红外数据处理线程、网络键盘数据处理线程的通信。串口数据接收线程接收到来自串口的数据,根据数据帧头判断数据类型,调用消息发送函数MsgQueueSend(),此函数将数据和数据类型一起作为消息体发送给消息队列。GPS数据处理线程循环调用GPSMsgRecieve()函数从消息队列读取消息,若消息队列不为空,并且队首节点是GPS数据,则读取数据,队首计数器加1,若不是GPS数据则跳出本次循环。同样,红外数据处理线程调用IRMsgRecieve()函数接收红外数据,网络键盘数据处理线程调用NKBMsgRecieve()函数接收网络键盘数据。
3 硬件设计
4.2.1 μC/OS-Ⅱ操作系统在LM3S1538上的移植
图1 系统硬件框图
4 软件设计
陈律师说:“没关系,你尽管问。我觉得她完全没有机会知道这件事,关于这一点我已经反复回忆过。我不可能告诉她;我们谈论这件事的时候有意打发她出去买东西了,她不在家;我打好文件去找罗素青签字的时候也故意回避了她,当时我们没有交谈,我把签好字的文件直接放进了包里。”
图2 数据帧8结构
4.1 上位机软件设计
在颜值这件事上,上帝给了每个人一个区间。杨紫向上,变美,挣扎着将自己从容貌的困境中拽出来,努力地走到区间的最大值,要的是一个自信昂扬的自己,以及越来越宽敞的演艺之路。
DM365上的操作系统是Linux嵌入式实时操作系统,利用Linux线程间通信的同步和互斥机制模拟消息队列。相应程序段为:
尖锥状纳米线的生长是轴向生长和径向生长并存的过程,温度对这两种生长起到了重要的作用,当温度较低时,轴向生长占主导地位,适当的提升生长温度可以改善纳米线形貌质量;而当温度过高时,如A6样品中纳米线的直径要明显加粗,表明了径向生长速度的加快,导致纳米线形貌变差。从实验结果中可以看出,生长温度为750℃时得到的纳米线表面形貌较好。
4.2 下位机软件设计
LM3S1538有 3个串口:UART0,UART1和 UART2。LM3S1538与主芯片DM365通过UART0通信;与GPS模块通过UART1通信;与红外模块通过配置成串口的GPIO通信。DM365的云台控制信息通过UART2经RS-485转换电路发送给云台,网络键盘通过I2C转串口芯片SC16IS752实现和LM3S1538的通信。其硬件框图如图1所示。
车载无线视频服务器对主芯片DM365的串口UART1进行扩展,接收LM3S1538从设备上读取的GPS数据、红外数据、网络键盘数据,发送云台控制数据到LM3S1538,LM3S1538经串口将控制命令发送给RS-485转换电路,实现对云台的操作。设计串口通信模块软件,完成数据的接收处理和发送。
μC/OS-Ⅱ在不同的处理器上的移植主要工作就是修改3 个文件:OS_CPU.H,OS_CPU_C.C,OS_CPU_A.ASM[4-5]。
OS_CPU.H文件中对和编译器有关的数据类型进行重新定义,对和处理器相关的临界代码段访问处理、任务切换以及处理器堆栈增长方向宏定义[6]。数据类型定义是通过查找编译器手册,找到μCOS-Ⅱ中对应的标准C数据类型进行重新定义。为了防止临界代码段被多任务或中断服务例程破坏,μCOS-Ⅱ需要在访问临界代码段之前先关闭中断,访问完后再打开中断。临界段处理方法的宏定义为:
定义DM365与LM3S1538之间进行串口通信的协议,上位机的数据按此协议组帧,帧结构如图2所示,通过串口发送到下位机,并从串口接收来自下位机的数据帧,做数据帧解析。下位机完成类似的数据发送接收工作。系统的软件设计包括上位机软件设计和下位机软件设计两部分,下位机软件设计又包含了将μC/OS-Ⅱ操作系统在LM3S1538微控制器上的移植以及应用程序的设计。
臭氧具有非常强的氧化能力,对于工业废水中的生物难降解物质的处理具有处理效果好、降解速度快、占地面积小、无二次污染、自动化程度高等优点,因此,臭氧氧化法及其联合技术广泛应用于工业废水处理中[1]。
说是机遇,是因为整个行业高端化转型的提速,推动了市场准入门槛的大幅提升,一些低端产品、山寨品牌被快速淘汰,而它们空出来的市场份额,则成为了有实力的龙头企业新的市场增长空间。同时,急速变革的市场,也刺激消费需求的多元化、理性化,赋予了市场更大的增长潜力和想象空间,厨电企业拥有了更广阔的发展平台。长远来看,步入调整期的厨电市场,为行业巨头的诞生提供了更多的契机。
Cortex-M3核的MCU堆栈增长方向是从高向低,宏定义如下:
OS_TASK_SW()是系统从低优先级任务切换到高优先级任务时调用的,它是一个宏,定义如下:
对于处理器执行开关中断的操作做两个宏定义:
OS_CPU_C.C文件中编写10个C函数,其中9个函数不是必需的,因此只作声明。唯一必需的函数是OSTaskStkInit(),它被 OSTaskCreate()和 OSTaskCreateExt()函数调用,在任务创建的时候完成任务堆栈结构的初始化,将寄存器的值保存到堆栈,使堆栈看起来就像刚发生过中断一样。
OS_CPU_A.ASM文件中需要编写5个汇编函数:OS_CPU_SR_Save(),OS_CPU_SR_Restore(),OSStartHighRdy(),OSCtxSw(),OSIntCtxSw()。其中 OS_CPU_SR_Save(),OS_CPU_SR_Restore()两个函数是通过保存中断状态的方式禁止/打开中断的。OSStartHighRdy()函数利用任务切换执行一条中断返回指令来开始第一个任务的调度,但是基于Cortex-M3核的处理器在执行中断返回指令时必须处于处理模式,而一般情况下系统处于线程模式,因此在OSStartHighRdy()中要进行模式转换,进入处理模式。OSCtxSw()函数实现任务级的切换,而OSIntCtxSw()是从中断服务例程中执行切换。
4.2.2 应用程序设计
LM3S1538接收来自GPS模块、红外模块、网络键盘的数据,对数据组帧后通过串口UART0发送给DM365,同时LM3S1538检测串口UART0来自DM365的云台控制数据。在主任务中创建两个任务,GPSTask和NKBTask,他们通过消息队列和主任务通信。在主任务中为GPS任务创建一个邮箱,接收到GPS数据后在中断服务程序中向邮箱发消息,GPS任务收到消息后从相应端口读取GPS数据,组帧后发送给主任务的消息队列;为NKB任务创建一个消息队列,接收到网络键盘数据的时候在中断服务程序中向该消息队列发送消息,网络键盘线程收到消息后从相应端口读取网络键盘数据发送给主任务的消息队列。在接收到红外数据后直接在中断服务程序中向主任务的消息队列发送数据。主任务收到消息后通过UART0向DM365发送该帧数据。
在主程序中完成LM3S1538外围电路的初始化、μC/OS-II的初始化以及创建主任务:
在DevInit()中包括对LM3S1538时钟频率设置、GPIO的初始化以及中断使能和中断的优先级设置。
童话树:“我不服,我要放出我的撒手锏了!当当当当!这可是我小时候不同时期的照片,你们可以看一看,能看得到我的正脸吗?能看到算我输。不知道为什么,我小时候一拍照就爱扮鬼脸,好好一小姑娘,不是扯嘴巴,就是动作幅度大,极度夸张,我感觉我小时候是个戏精,啊啊啊!我应该去当个演员。”
1)主任务入口函数
2)子任务入口函数(以GPSTaskFn为例)如:
3)中断服务子程序(以UART1为例)如:
1.3.1 样品测试分析 土壤养分中有机质(Organic Matter,OM)、全氮(Total Nitrogen,TN)、有效磷(Available Phosphorus,AP)、速效钾(Rapidly Available Potassium,RAK)含量及pH分别采用油浴加热重铬酸钾氧化容量法、凯氏蒸馏法、碳酸氢钠浸提-钼锑抗比色法、乙酸铵浸提-火焰光度计法和电位法(土液比=1∶2.5)测定。
5 实验测试结果
基于Cortex-M3的串口扩展模块和车载无线视频服务器核心板之间可以成功进行串口通信,Cortex-M3能够将采集到的GPS数据、红外遥控数据和网络键盘数据转发给DM365,图3是通过客户端看到的叠加了GPS信息的视频,图中右下角是对云台进行控制的按钮,点击每个按钮则平台下发相应命令到设备的DM365,DM365通过扩展串口发送数据到Cortex-M3,Cortex-M3控制相应芯片使云台能够完成转动、变焦等动作。图4所示是用红外遥控器进行本地配置的界面,图4中左上角的按钮正被选中,此时按下遥控器的确认按钮即可进行相关参数的设置。对云台的操作,本地配置可同时进行,同时GPS数据也正常收发,彼此之间没有影响。
6 结束语
本文采用TI基于Cortex-M3核的MCU LM3S1538扩展了DM365的串口,成功将μC/OS-Ⅱ移植到LM3S1538上,完成了软硬件的设计,本设计能够应用于车载无线视频服务器,实现设备的红外模块、网络键盘模块、GPS模块以及云台通过扩展的串口与核心板进行通信。此设计的优点是低成本、低功耗、硬件电路简单,具有较好的使用价值。
[1]孟涛,王福虎,陈森.微控制器的多串口扩展设计[J].舰船防化,2009,(5):45-51.
[2]范开喜,王庆,于先文.嵌入式组合导航系统中多路异步串口系统的设计[J]. 测控技术,2010,29(8):39-42.
[3]YIU J.ARM Cortex-M3权威指南[M].宋岩,译.北京:北京航空航天大学出版社,2009.
[4]LABROSSE J J.μC/OS-II―源码公开的实时嵌入式操作系统[M].邵贝贝,译.北京:中国电力出版社,2001.
[5]佟彤.μC/OS-Ⅱ嵌入式操作系统的研究及其在转台控制中的应用[D].哈尔滨:哈尔滨工业大学,2007.
[6]孙顺远,秦会斌,崔佳冬,等.μCOSⅡ在CortexM3内核上的移植及优化[J]. 计算机系统应用,2010,19(4):208-211.