>
电子设备日趋网络化的背景下,作为目前广泛使用的以太网以及TCP/IP 协议已经成为事实上最常用的网络标准之一,它以高速、可靠、分层以及可扩充性使得它在各个领域的应用越来越灵活,很多情况下运用以太网和TCP/IP,能够简化结构和降低成本。但是,目前关于嵌入式以太网的设计方案不是很多,在这不多的方案中,大多是基于单片机或DSP 的。两者都存在要外扩很多外设的问题,并且前者速度太慢,后者成本又太高,这在一些对设备尺寸要求很小的场合是不行的。
本设计中,采用了基于ARM 内核的微处理器S
S
1)拓展存储控制器(带FP/EDO/SDRAM 控制器,片选逻辑)。
2)8KBCache/SRAM。
3)LCD控制器(可直接控制DSTN/STN 的各种灰度/256 彩色LCD 屏,最大支持分辨率为1600 × 1 600)。
4)2通道UART,波特率可高达115200B/s,并内置16字节FIFO,同时兼容Irdal.0规范。
5)I
6)71个通用I/O 端口和8 个外部中断。
7)5路PWM 定时器和1 路内部定时器。
8)8通道10位ADC(采样速率为100Kbit/s)。
9)2路GDMA/2路外围DMA 。
10)电源控制器。
11)看门狗。
12)实时时钟。
硬件电路组成
本方案硬件电路使用的芯片主要有微处理器S
*跳线方式,网卡的I/O和中断由跳线决定。
*即插即用方式,由软件进行自动配置plug and play。
*免跳线方式,网卡的I/O和中断由外界的
在嵌入式应用场合,如果不使用
RTL8019AS是性价比高且带有即插即用功能的全双工以太网控制器,它的主要特点包括:符合EthernetⅡ与IEEE802.3标准;全双工,收发可同时达到10Mbit/s的速率;内置16KB的SRAM,用于收发缓冲,减低对主处理器的要求;支持UTP、AUI、BNC自动检测,还支持对10BaseT拓扑结构的自动极性修正;允许4个诊断LED 引脚编程输出。RTL8019AS内部有2个RAM区:1块16KB,地址为0x4000~0x7fff;1块32 B,地址为0x0000~0x
本方案中将RTL8019AS 的RAM 的前12 页(0x4000~0x4Bff)作为发送缓冲区,后52页(0x
RTL8019AS 具有32 个输出/ 输出地址,地址偏移量为00H~1FH。其中00H~0FH 具有16 个地址为寄存器的地址,寄存器分为page0~page3,由RTL8019AS 中的命令寄存器CR中的PS1 和PS0 位来决定要访问的页。复位端口包括18H~1FH 共8 个地址,用于RTL8019AS 的复位。
软件设计
编写控制以太网接口程序的步骤。
(1)μ C/OS Ⅱ实时操作系统的移植
μ c/os Ⅱ是一种开放源码的实时嵌入式操作系统,是一个可移植,可裁减,可固化的占先式多任务操作系统,已被应用到多种微处理器上,其大部分源码是ANSI C 语言编写的。
移植工作包括以下几个内容:a.设置:OS_CPU.H 中与处理器和编译器相关的代码。b.用C 语言改写OS_CPU_C.C 中6个与操作系统相关的简单函数。c. 用汇编语言改写OS _CPU _ A..ASM 中的4 个与处理器相关的函数。
1)OS_CPU.H 文件包括#define、typedef定义与CPU相关信息。因不同的处理器有不同的字长,所以μ C/OS Ⅱ的移植包括一系列的类型定义,以确保可移植性。如INT16U 数据类型总是代表16 位无符号整数,将μ C/OS Ⅱ移植到32 位处理器上,也就意味着INT16U 实际上为无符号短整型数而不是无符号整型数。
2)OS _ CPU _ C.C 文件OSTaskCreatHook()、OSTaskDelHook()、OSTaskSwhook()、OSTaskStatHook()、OSTaskCreakHook(),这些函数为用户定义,实际需要修改的只有OSTaskStkIinit()函数。OSTaskStkIinint()用来初始化任务堆栈,初始状态的堆栈模拟发生一次中断后的堆栈结构。由于在ARM 中堆栈是按32 位数据类型来进行操作,所以堆栈数据类型OS _ STK 声明为32 位无符号整数。
3)OS _ CPU _ A.ASM 文件这里要实现4 个汇编函数改写:多任务启动函数中调用OSSTartHightRdy()、任务切换函数OSCtxSw()、中断任务切换OSIntCtxSw()和时钟节拍服务函数OSTickISR()。任务切换函数OSCtxSw(),由任务切换函数OS _ TASK _ SW()进入。如果任务执行了某个函数,其结果改变了当前任务的状态[如OSTaskSuspend()、OSTimeDly()],或者是改变了别的任务的状态[OSTaskResum()、O S T i m e D l y R e s u m e ( ) ]都要引起新的任务调度函数[OSSched()]执行OS _ TASK _ SW()。OSIntCtxSw()是在ISR中被调用的,其代码与OSCtxSw () 类似。OSStartHightRdy()由OSStart ()函数调用,功能是运行优先级最高的任务。OSTickISR()是时钟节拍中断,用户应该在OSStart()运行
后,μ C/OS Ⅱ启动运行的第一个任务中初始化节拍中断。
(2)初始化RTL8019AS
初始化部分完成RTL8019AS 在使用之前的初始化工作,设置相关工作模式的寄存器,分配和初始化接收和发送缓冲区,初始化网卡接收地址。
(3)传输数据包
发送部分只要把数据写入缓冲区, 启动执行命令,RTL8019AS 自动发送。一般在RAM 内开辟2 个以太网数据包的空间作为发送缓冲区。作为一个集成的以太网芯片,数据的发送校验,总线数据包的碰撞检测与避免是由芯片自己完成的。只需要配置发送数据的物理层地址、源地址、目的地址、数据包类型以及发送的数据就可以了。
(4)接收数据包
它是完成数据接收任务,RTL8019AS 接收到以太网数据包后自动将其存在接收缓冲区并发出中断信号,S