基于AVR单片机多任务嵌入式Internet系统设计

分享到:

1 引言

    目前,嵌入式系统已广泛渗透到人们的工作、生活中。从家用电器、信息终端、手持通信设备到仪器仪表、制造工业、过程控制等领域,嵌入式设备已随处可见。另一方面,近几年来Internet技术的飞速发展给嵌入式应用带来了新的契机,在未来嵌入式系统中应用Internet技术具有非常大的优势。

    目前嵌入式Internet技术的实现主要有下面三种方式  :

    第一种方式是EMIT技术,采用支持TCP/IP协议的高性能服务器作为网关(emGateway), 嵌入式设备通过RS-232、RS-485或CAN总线等和网关服务器连接,间接通过服务器网关连接Internet。经过多年的发展EMIT技术已在工业设备的网络化中得到了广泛的应用。但该技术也存在着以下的缺点:由于需要使用高性能的网关服务器,再加上emGateway网关的使用需要缴纳相应的版税,从而使得成本非常高;而且网关和设备之间需要专门布线,在嵌入式设备比较分散的情况下极为不便,通信的距离、速度都受到一定的限制。

    第二种方式是采用硬件协议栈芯片进行网络连接,比如Seiko公司的S7600,嵌入式MCU通过接口对其进行控制以达到Internet通信的目的,这时软件只需要增加一段和协议栈芯片通信的接口程式即可,因此研发难度小、周期短。其缺点是系统的硬件成本非常高,而且由于使用的是硬件协议栈,扩展不灵活。

    第三种方式是在嵌入式MCU上用软件实现TCP/IP协议栈,然后通过网络接口芯片连接Internet。在这种方式中由于使用了软件协议栈使得嵌入式MCU本身具有了Internet通信能力,从而省去了高性能网关和硬件协议栈芯片,因此成本非常低,而且扩展起来非常方便灵活,再配上小型嵌入式实时操作系统的支持,就能实现性价比非常高的嵌入式多任务Internet平台。不过要在资源有限的16位甚至8位单片机上实现复杂的操作系统和网络协议栈有一定难度,但近年来随着单片机处理速度的不断提高和内部资源的不断扩展,再加上小型的实时操作系统和网络协议栈的相继推出,使得利用单片机来实现低成本嵌入式多任务网络平台成为可能。

    基于以上背景,本文就来介绍应用在研究课题“低码率视频信号的网络传输”系统中的一种基于AVR单片机的多任务嵌入式网络系统软硬件平台的设计。

2 硬件平台设计

    考虑到以太网接入方式技术成熟、可靠性高、通信速度快和成本低的好处,本系统的硬件平台采用单片机加以太网接口控制芯片组成。由于操作系统和协议栈需要用到大量的数据存储器,因此需要外扩RAM存储器。为了提高通信性能,单片机和以太网接口芯片之间采用并行总线扩展方式进行连接,接口芯片和外部的RAM存储器统一编址。本系统采用了可编程GAL器件ATF16V8进行地址译码,这样不仅能充分利用地址资源,而且只需要修改ATF16V8的源程式即可实现地址的改动,提高了系统的扩展能力。系统的硬件平台的原理框图如图1所示。


图1:硬件平台系统框图

    单片机选用高性能的AVR单片机ATmega128。AVR是ATMEL公司结合了成熟的51系列和PIC系列单片机的好处而推出的高性能8位单片机,具有以下特点  :

性价比高: AVR单片机内部集成8路10位的ADC、PWM、E2PROM、WDT、RTC等,具有了片上系统(SOC)的雏形,大幅度降低了系统的整体体积和成本。  速度快:AVR单片机采用了先进的RISC体系架构,大多数指令能在一个时钟周期内完成,理论上速度能达到1MIPS/MHz。而且具有只需要两个时钟周期的硬件乘法器。

接口丰富:AVR单片机除能进行并行扩展外,还具有USART、SPI和I2C串行总线。

ISP&IAP:其内部的可擦写FLASH存储器不仅能进行在线下载,而且具有片上的BOOT程式实目前应用可编程,真正实现同时读写操作。

研发方便:AVR是第一款真正为C语言研发设计的单片机,具有多种编译器。而且具有JTAG接口,能进行在线调试。

低功耗:AVR单片机具有六种睡眠模式,能最大程度的降低系统的功耗。

     以太网接口控制芯片采用Realtek公司生产的以太网接口控制器RTL8019AS  ,其10M处理能力对于本课题需要的码率为4Mbps视频流的网络传输来说完全满足需求。另外8019AS片内集成16KByte的RAM用作发送和接收的缓冲区,对其访问能使用远程DMA方式,从而大幅提高接口的通信能力。需要注意的是,由于ATmega128数据总线是8位,RTL8019AS的IOCS16B引脚应当下拉接地以选择8位总线方式,而且JP引脚要接高电平以选择跳线模式。

    地址译码采用的是ATF16V8,具体是把MCU地址线的高8位作为16V8的译码输入,16V8的3位输出作为译码片选输出:低端RAM(32KB)、高端RAM(32KB)和8019AS的片选。由于8019AS的地址空间仅需要32Byte,而且和高端RAM的地址重叠,为了给RAM分配尽可能多的地址空间,为8019AS分配顶部的256Byte,而把剩余的地址空间全部分配给RAM。上述译码的CUPL描述如下:

CS_RAM_L = ! A15;

CS_RAM_H = A15 & ! (A14 & A13 & A12 & A11 & A10 & A9 & A8);

CS_8019 = A15 & A14 & A13 & A12 & A11 & A10 & A9 & A8;

3 操作系统移植 

    uC/OS-II是个专门为中小型嵌入式应用设计的抢占式的实时操作系统内核,具有原始码公开、移植性好、可裁减、可固化、实时性和安全稳定性高的特点  ,非常适合本系统的应用。uC/OS-II的系统框图如图2所示。

uC/OS-II和硬件平台无关的代码文件:UCOS_CORE.C、UCOS_II.C等
 
uC/OS-II设置代码文件:INCLUDES.H 、OS_CFG.H


图2:uC/OS-II的系统框图

uC/OS-II

    在设计之初就充分考虑了移植性,移植起来非常方便。从图2能看出,和移植有关的只有3个文件:OS_CPU.H,OS_CPU_C.C和OS_CPU_A.S。

    第1个文件是OS_CPU.H,其中主要定义了一些和编译器有关的数据类型、堆栈的生长方向、临界代码区的保护方式。需要说明的是uC/OS-II中临界代码区的保护方式有3种,本设计采用第3种,即在进入临界区之前把CPU状态寄存器SREG的内容保存到一个局部变量cpu_sr中,在退出临界区之后再还原SREG,这样做的好处是临界区保护不会对SREG产生影响。其中SREG的保存和返回函数必须由汇编语言来写,放在OS_CPU_A.S文件中。

    第2个文件OS_CPU_C.C中主要是任务堆栈初始化函数OSTaskStkInit(),任务创建时调用此函数来初始化任务的堆栈结构。该函数一开始把传入的任务函数的指针存放到硬件堆栈的栈顶,看上去就像该函数在执行过程中发生了中断相同(低字节在先),这样返回后就能从新的任务开始执行了。需要特别注意的是,在这个函数中必须把CPU状态寄存器SREG的值设为0x80,也就是全局中断使能,否则系统将崩溃。

    最后一个文件OS_CPU_A.S是个汇编源文件,主要定义了6个汇编函数。首先是临界区保护用到的SREG保存和恢复函数。然后定义的是OSStartHighRdy()函数,他只在系统启动时由OSStart()函数调用一次,所做的工作主要是让系统从最高优先级的任务开始执行,实现的方法和后面要介绍的OSCtxSw()函数相似。OSCtxSw()函数实现的是任务级的转换,首先把当前的任务的状态保存到其任务控制块TCB中,然后把当前优先级最高的任务的TCB中的内容加载到工作寄存器中,这样函数返回后就能从此任务开始执行了。接下来的OSIntCtxSw()函数实现的是中断级的任务转换,他和OSCtxSw()函数的唯一不同是他是在中断中调用的,因此不必保存工作寄存器的内容,剩下的和任务级的转换过程完全相同。最后一个定义的是节拍时钟的中断服务子程式,在这个函数中的开始要令中断欠套全局变量加1,并且调用时钟管理函数OSTimeTick(),中断退出时调用系统提供的中断退出函数OSIntExit()。

4 网络平台设计

    LwIP是一套专门为嵌入式系统设计的源码开放的轻型协议栈,最新版本是LwIP1.1.0。LwIP在保持TCP/IP协议基本需求的前提下,通过层和层之间共享内存,避免了许多繁琐的复制处理,这样做虽然破坏了严格的分层思想,但却大幅度地节省了代码和数据存储空间,因此非常适合嵌入式应用。和其他轻型协议栈不同的是,LwIP不仅支持一般的网络协议,比如UDP协议、DHCP协议、PPP协议等,而且还支持多网络接口、IPv6和标准API  。


图3:LwIP运行机制

4.1 LwIP在uC/OS-II上的移植

    针对uC/OS-II和AVR的ICC编译器,LwIP的移植只需要编写arch目录下的3个文件??cc.h、sys_arch.h和sys_arch.c。其中cc.h中有和CPU和编译器有关的定义,包括数据结构和大小端存储方式等。其中关键代码区的保护用uC/OS-II中的相应函数替换一下即可。剩下的两个和操作系统有关的文件是移植工作的重点。

    为了增强移植性,LwIP专门把和操作系统有关的数据结构和函数放在一起组成操作系统封装层,为诸如定时、进程同步和消息传递等操作系统服务提供统一的接口,移植时仅需针对不同的操作系统来实现特定的操作系统封装层,这些是由sys_arch.h和sys_arch.c实现的。其中sys_arch.h主要定义和操作系统相关的数据结构??信号量、邮箱和进程号,这些在uC/OS-II中都有对应的实体,要注意的是LwIP中的邮箱对应于uC/OS-II中的消息队列。

    sys_arch.c中要实现和操作系统有关函数的定义,包括系统的初始化及信号和邮箱的操作??创建、删除、投递和等待,这些功能只需要用uC/OS-II中相应的函数进行重新封装即可。另外,TCP/IP协议栈中需要许多定时器的功能,这在LwIP中是用sys_timeout结构体队列和相应的函数实现的  。每个sys_timeout结构体包括本线程的timeout时间长度,及超时后的回调处理函数

。sys_arch.c中sys_arch_timeouts()函数的功能就是返回当前进程所对应的sys_timeout结构体队列的头指针。本系统用的方法是在系统初始化的时候根据最大的LwIP进程数创建一个sys_timeout结构体指针的数组,以后每创建一个LwIP进程其优先级都从一个连续的已知区间进行分配,sys_arch_timeouts()函数通过调用OSTaskQuery()函数获得进程的优先级进而获得对应的sys_timeout结构体队列的头指针。

4.2 RTL8019AS驱动程式的编写

    RTL8019AS驱动程式做的工作主要是8019AS的初始化、发送和接收以太网数据包。

    初始化函数rtl8019_init()是在添加以太网络接口时由netif_add()函数调用,调用过程中首先初始化此接口对应的全局网络接口结构体,然后设置8019AS的各功能寄存器  。初始化完8019AS之后调用arp_init()函数启动ARP功能,然后用sys_timeout()函数启动ARP缓冲列表生命周期的定时器。

    数据包的发送首先从ARP缓冲队列中查找目的MAC地址,然后构造以太网数据帧的头部,最后调用底层的发送函数low_level_output()将数据帧发送出去。如果未找到对应的IP/MAC项,发送ARP请求数据帧。数据包的接收由中断处理函数rtl8019_ISR()调用,他的执行过程是先调用最底层的接收函数low_level_input()从8019AS中接收数据帧,如果接收的是IP数据包,则更新ARP缓冲队列并把数据包传给网络接口结构指定的函数进行处理。如果接收的是ARP数据包,则调用etharp_arp_input()函数处理。为了提高性能,最底层的接收发送函数采用的都是8019AS的远程DMA工作方式  。

5 总结

    嵌入式设备和Internet的结合代表着嵌入式系统的未来发展方向,目前已有不少科研机构和公司纷纷加入了嵌入式Internet技术的研究行列。在这种背景之下,本文设计了一种基于8位AVR单片机的多任务嵌入式Internet系统平台,并且已应用在研究课题“低码率视频信号的网络传输”系统中,对于嵌入式Internet技术的推广应用具有参考意义。本文作者创新点:将实时嵌入式操作系统和轻型TCP/IP协议栈结合起来,应用在8位AVR单片机上,实现了低成本的多任务嵌入式网络系统平台。

继续阅读
AVR单片机及其特点

AVR单片机是1997年由ATMEL公司研发出的增强型内置Flash的RISC(Reduced Instruction Set CPU) 精简指令集高速8位单片机。AVR的单片机可以广泛应用于计算机外部设备、工业实时控制、仪器仪表、通讯设备、家用电器等各个领域。

基于AVR单片机的嵌入式“瘦服务器”

本文的主要内容为:以AVR单片机为主控CPU芯片,提供“瘦服务器”的软件、硬件的组成框图。该“瘦服务器”的应用前途广泛,可以应用于各行各业的Internet远端监控系统中。主要应用于:(1)网络家电产品,通过该系统把数字化家电直接接入Internet网络,组成intelligentizedhome;(2)城市网络自动售货机;(3)城市交通Internet监控;(4)楼宇防火防盗Internet监控;(5)工厂生产设备Internet监控。

基于AVR单片机的电冰箱控制系统的设计

随着电冰箱在日常生活中的普及,人们对电冰葙的性能和控制功能的要求越来越高,为了满足人们实际生活中电冰箱的需要,以AVR单片机为核心,通过硬件和软件设计了电冰箱的控制系统,试验结果表明,该系统性能指标和功能达到了预期目的,具有功能齐全、操作简单、使用方便等优点。该系统在同类产品中处于较高水平,具有较高的实用价值。

AVR单片机在电冰箱控制系统中的设计

随着电冰箱在日常生活中的普及,人们对电冰葙的性能和控制功能的要求越来越高,为了满足人们实际生活中电冰箱的需要,以AVR单片机为核心,通过硬件和软件设计了电冰箱的控制系统,试验结果表明,该系统性能指标

基于AVR单片机的智能充电器的设计与实现

摘要 介绍了以AVR单片机为核心智能充电器的控制原理,讨论了充电器的硬件结构和软件设计思想。该充电器对充电过程进行全面管理,描述了充电检测的关键技术,实现了智能充电。并对充电电源、电压进行自动检测调

©2018 Microchip Corporation
facebook google plus twitter linkedin youku weibo rss