基于μC/OS-II的VG2以太网和USB接口设计
#define OS_TASK_SW() asm("swi 7"),通过软件中断指令来实现操作系统的任务切换函数:#defi-neOS_ENTER_CRITICAL()asm("clrl3"),#define OS_EXIT_CRITICAL asm("set 13"),通过对SR状态寄存器的中断控制位设置实现使能或禁止操作系统响应中断请求;#define OS_STK_GROWTH 1,定义VG2的堆栈由高到低。
(2)改写OS_CPU_C.C中部分函数
OSTaskStkInit()为任务栈结构的初始化函数。VG2响应中断请求信号后,将当前寄存器值按先入后出的顺序压入堆栈。
OSTaskStkInit()按照压入堆栈顺序对各任务栈初始化。
OSStartHighRdy()函数跳转到所有处于就绪状态任务中优先级最高的任务开始运行。操作系统首先得到最高优先级任务栈的指针,然后从任务栈中弹出所有寄存器值,实现跳转。
OSCtxSw()是任务级的任务切换函数。swi 7(软件中断)的中断向量指向该函数。当需要任务切换时,首先该函数将当前任务寄存器值压入堆栈。然后将当前任务任务栈指针保存到任务控制块中。最后判断出最高优先级任务,并弹出其任务栈内容,开始运行。
OSTickISR()为操作系统提供一个周期性的时钟源。VG2的定时器0被设定成第20 ms发出一个时钟中断信号,中断向量指向该函数。首先该函数保存当前任务状态,并将全局变量OSTime递增1。然后判断出最高优先级任务.并弹出其任务栈内容,开始运行。
OSIntCtxSw()为系统执行中断后任务调度函数。系统在中断响应后执行该函数判断出最高优先级任务,然后弹出其任务栈内容,开始运行。 3.2以太网接口的TCP/IP协议移植
由于嵌入式实时操作系统μC/OS-Ⅱ是一个操作系统内核,本身没有集成TCP/IP协议栈,所以需要移植合适的TCP/IP协议栈。LwIP协议栈是适用于8位、16位、32位微处理器嵌入式系统的一个小型TCP/IP协议栈,实现了ARP、TCP、UDP、IP这些最基本的协议。LwIP可以看作是为系统提供的函数,通过它来进行数据包的发送与接收。LwIP允许有多个网络接口,每个网络接口都对应一个structnetif,而且都包含相应网络接口的属性和收发函数。其中netif->input()指向IP层的接收函数ip_input(),netif->output()指向ne2k_send_packet()驱动程序中的发送函数。驱动程序可实现网络接口的接收、发送、初始化以及中断处理。本设计中采用中断方式来接收数据,使用VG2的外部中断INT6,在VG2的中断向量表中可以按照如下定义:
3.3 USB接口的PTD协议移植
VG2与ISP1161之间以PTD(Philips Transfer Descriptor)数据格式进行通信。PTD数据提供了USB通信的相关信息,如指令、状态和USB数据包等。VG2中PTD数据的物理存储介质是微处理器的系统RAM。对于ISP1161,存储介质为内部FIFO缓冲区RAM。ISP1161可使用PTD数据结构定义一块数据缓冲区,使其与USB终端设备进行通信。VG2设立这个数据缓冲区采存放当前帧(1 ms帧)。每帧传送的承载数据必须包含一个PTD作为传输头,以描述传输特性。PTD数据一般为DWORD(双字或4字节)格式,结构如表2所示。
PTD数据头为8个字节的数据结构,包含了ISP1161的传输类型、装载数据的发送位置、装载数据的实际大小、传输速度、传输对象等。当传输执行完毕后。其内部会作相应的改变,在PTD数据头中表征了本次传输结果.包括传输发生的错误信息等。
3.4部分程序流程
以太网收发任务程序流程如图2所示。USB通信任务程序流程如图3所示。
本设计采用的操作系统是实时操作系统,可以同时支持以太网通信和USB设备数据存储,系统能获得很高的效率和稳定性。
4 结束语
本文采用RTL8019AS通过TCP/IP协议规范及LwIP,实现了VG2的TCP/IP协议栈,通信波特率可达到10Mb/s。同时采用Philips公司的ISP1161,实现VG2的USB主/从控制接口扩展,符合USB1.1规范,通信速率可达到1.5Mb/s。该设计用于所研制的数字化家居智能控制器,通过以太网、USB和其他接口,将家用电器、家庭安防、门禁、四表自动抄表、有线电视网、电话和宽带网系统等独立单元的家居设施跨平台有机结合,实现远/近程操作控制和数据存储与交换。
参考文献:
[1]. RTL8019AS datasheet http://www.dzsc.com/datasheet/RTL8019AS_1096173.html.
[2]. ISP1161 datasheet http://www.dzsc.com/datasheet/ISP1161_410194.html.
- 详解μC/OS-II如何检测任务堆栈实际使用情况(11-27)
- μC/OS-II 移植笔记 1(FreeScale 68HCS12 核单片机)(11-20)
- μC/OS-II 移植笔记 2(FreeScale 68HCS12 核单片机)(11-20)
- 嵌入式实时操作系统 μC/OS-II 在S12单片机上的移(09-12)
- 基于μCOS-II的USB主机系统设计(12-27)
- 基于LPC2131嵌入式系统μCOS-II实现CAN通讯(09-12)