DIY编程器网

 找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 888|回复: 0
打印 上一主题 下一主题

[待整理] ENC28J60在嵌入式系统接口上的设计与实现

[复制链接]
跳转到指定楼层
楼主
发表于 2014-10-11 02:23:10 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
摘要:文章首先介绍了uC/OS-II在ARM上的移植。在此基础上,根据以太网控制器ENC28J60的特点,设计了该系统的硬件结构。阐述了如何在嵌入式实时操作系统μC/OS-II上移植实现LwIP这套TCP/IP协议栈,并详细地描述了ENC28J60网卡驱动的软件流程,给μC/OS-II加上了网络支持。
关键字:嵌入式系统、以太网、ENC28J60、LwIP

Abstract】The paper introduces the transplantation of uC/OS-II to ARM at first. Basic on this, the hardware frame is designed according to the features of Ethernet Controller ENC28J60. Then it expatiates how to realize the transplantation of LwIP protol stack to the embedded RTOS(Real-Time Operating System) μC / OS-Ⅱ, and describes the software flow of ENC28J60 network card drive in detail, which makes uC/OS-II become a true RTOS with networking utilities.
Keywords】Embedded System, Ethernet Network, ENC28J60, LwIP
一、引言

随着计算机技术的发展,嵌入式系统已成为计算机领域的一个重要组成部分,实时操作系统的应用也越来越受到重视。uC/OS-II是专门为嵌入式应用设计的实时操作系统内核,它具有以下几个优点:源代码公开,代码结构清晰,注释详尽,组织有条理,具有良好的可扩展性和可移植性,最多可以管理60个任务。uC/OS-II采用了基于优先级的占先式实时内核,它包含了实时内核任务管理、时间管理、任务间的同步(信号量、邮箱、消息队列)和内存管理等功能。正适合嵌入式操作系统体积小、速度快、可裁减、可移植的特性。
嵌入式系统在网络化开发的过程中,如何解决与网络连接,即如何将通用处理器的网络连接装置应用于嵌入式网络的开发是十分重要的。目前市面上有许多以太网络控制芯片,其中大多功耗高、功能复杂,不适用于价格低廉的嵌入式系统之中。并且目前市场上的大部分以太网控制器采用的封装均超过80引脚,而符合IEEE802.3协议的ENC28J60只有28引脚,就能既提供相应的功能,又可以大大简化相关的设计,并减小占板空间,再加上由Microchip免费提供的用于单片机的TCP/IP软件堆栈,使之成为目前市面上最小的嵌入式应用以太网解决方案。
二、uC/OS-II在ARM上的移植

ARM是目前嵌入式领域中应用最广泛的RISC微处理器结构,以其低成本、低功耗、高性能等优点占据了嵌入式系统应用领域的领先地位[1]。uC/OS-II可以简单地看作是一个多任务调度器,在这个任务调度器上完善地添加了与多任务操作系统相关的一些系统服务,如信号量、邮箱等。其90%的代码是用C语言写的,可以直接移植到有C语言编译器的处理器上。移植工作主要都集中在多任务切换的实现上,因为这部分代码用来保存和恢复CPU现场(即写/读相关寄存器),不能用C语言,只能使用汇编语言完成。uC/OS-II的全部源代码量大约是6000-7000行,共15个文件[1]。将uC/OS-II移植到ARM处理器上,需要修改三个与ARM体系结构相关的文件,代码量大约是500行。以下是这个三个文件的移植工作:
1)   OS_CPU. H 的移植
首先进行基本配置和数据类型定义,因为不同的编译器所提供的同一数据类型的数据长度并不相同。其次用#define 语句定义2 个宏开关中断:即
退出临界区宏定义: # define OS_EXITCRITICAL ( ) ARMDisable Int ( )   //关中断,
进入临界区宏定义# define OS_ENTERCRITICAL ( ) ARMEnableInt ( )   //开中断。
最后根据堆栈的方向定义OS_STK GROWTH。
2)   OS_CPU.C的移植
OS_CPU.C的移植包括任务堆栈初始化和相应函数的实现.在这里共有6个函数[2]:OSTaskStkInit( ),OSSTaskCreateHook( ),OSTaskDelHook( ),OSTaskSwHook( ),OSTaskStatHook( ),OSTimeTickHook( )。其中后面的5个HOOK函数又称为钩子函数,主要是用来对uC/OS-II进行功能扩展。这些函数为用户定义函数,由操作系统调用相应的HOOK函数去执行,在一般情况下,他们都没有代码,所以实现为空函数即可。而函数OSTaskStkInit( )对堆栈进行初始化,在ARM系统中,任务堆栈空间由高到低依次为PC,LR,R12,R11,…,R1,R0,CPSR,SP,SR。在进行堆栈初始化以后,OSTaskStkInit( )返回新的堆栈栈顶指针。
3)   OS_CPU A. S 的移植
uC/OS-II移植的最后还需要用户编写4个重要的汇编函数,包括OSStartHighRdy( )、OSCtxSw( )、OSIntCtxSw( )及OSTickISR( )。分别介绍如下:OSStartHighRdy( )函数由OSStart( )调用,用以运行优先级最高的就绪任务,其运行过程:调用用户定义的OSTaskSwHook( )函数→获取任务堆栈指针→置位全局;OSCtxSw( )函数,实时操作系统内任务级的切换是通过处理器的软中断实现的,并且软中断服务例程的向量地址必须指向OSCtxSw( )函数;OSIntCtxSw( )函数用于实现中断级任务切换,并用在最初清理堆栈(调整堆栈指针的位置);OSTicklSR( )函数实现任务切换,并使用内核定时器产生时钟节拍。
三、主要硬件选型及设计

系统主要采用ENC28J60+LPC2212/LPC2214,其信息终端模块硬件系统框图,如图1所示。

图1 信息终端模块硬件系统框图                           

    图2  网卡芯片的配置原理图部分电路图

硬件由以下几部分组成:
1)      单片机及其外围器件:LPC2214、PLL(10KHz晶体等)、LED指示灯;
2)      以太网控制器部分:ENC28J60、耦合变压器、RJ45插座、25MHz晶体;
3)      电源部分:由一片7805提供5V的直流电压,SPX1117M3-1.8 提供1.8V的直流电压  SPX1117M3-3.3提供3.3V的直流电压。
系统采用LPC2212/LPC2214单片机,LPC2212/LPC2214是一款基于16/32位ARM7TDMI-S,并支持实时仿真和跟踪的CPU,带有128/256 k字节(kB)嵌入的高速Flash存储器。128位宽度的存储器接口和独特的加速结构使32位代码能够在最大时钟速率下运行。对代码规模有严格控制的应用可使用16位Thumb模式将代码规模降低超过30%,而性能的损失却很小。
ENC28J60是Microchip Technology(美国微芯科技公司)近期推出的28引脚独立以太网控制器,它采用业界标准的SPI串行接口,具有10 Mbps SPI接口,符合IEEE802.3协议,内置了10 Mbps以太网物理层器件(PHY)及介质访问控制器(MAC),可按以太网协议可靠地收发信息包数据[3]。另外,它还具有可编程8 KB双端口SRAM缓冲器,此缓冲存储器具有灵活可靠的数据管理机制,以高效的方式进行信息包的存储、检索和修改,以减轻主控单片机的内存负荷。该系统用到的网卡芯片配置原理部分电路图,如上图2所示。
四、软件及其程序设计

系统软件的核心是uC/OS-II 内核通过ENC28J60以太网控制器以TCP/IP协议栈LwIP为协议和以太网相连接,在该系统中主要完成以下三个方面的设置与实现:
1) TCP/IP协议栈的精简与实现;2) ENC28J60以太网控制器驱动程序的实现;3) 整个系统的流程图及实现。该系统的软件框图,如图3所示。

<p>[table=98%]            [tr]            [td]                        图3  系统软件框图
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|文字版|手机版|DIY编程器网 ( 桂ICP备14005565号-1 )

GMT+8, 2025-1-11 00:35 , 耗时 0.085481 秒, 22 个查询请求 , Gzip 开启.

各位嘉宾言论仅代表个人观点,非属DIY编程器网立场。

桂公网安备 45031202000115号

DIY编程器群(超员):41210778 DIY编程器

DIY编程器群1(满员):3044634 DIY编程器1

diy编程器群2:551025008 diy编程器群2

QQ:28000622;Email:libyoufer@sina.com

本站由桂林市临桂区技兴电子商务经营部独家赞助。旨在技术交流,请自觉遵守国家法律法规,一旦发现将做封号删号处理。

快速回复 返回顶部 返回列表