ARM课程设计——UDP通信._第1页
ARM课程设计——UDP通信._第2页
免费预览已结束,剩余23页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、iUDP通信实验摘要】利用基于嵌入式实时操作系统卩 C/OSI 的 ZLG/IP 软件包, 利用实验板光盘提供的 UDPtest 软件可以实现实验板跟 PC 机的 数据收发。【关键词】ARM UDPpC/OS-II 操作系统2目录第 1 章 硬件实现 .1.1.1 RTL8019AS 网络控制器介绍 .1.第 2 章血/OS-ll 操作系统.3.2.1 Q/OS-II 系统简介 .3.2.2 C/OS-II 的特点.3.2.3 任务模式 .3.2.4 支持的指令集 .4.2.5 移植 C/OS-II.4.第 3 章 ZLG/IP 软件包结构和配置 .6.3.1 ZLG/IP 软件包结构 .6.

2、第 4 章 设计过程 .8.4.1 设计步骤 .8.4.2 实验程序1.0.4.2.1宏定义1.04.2.2RTL8019AS 监听任务.1 14.2.3UDP 通信程序.124.2.4创建系统任务并初始化1.44.2.5主程序1.54.2.6定时器中断控制 . 1.63第 5 章 实验结果.1.9.第 6 章 课程设计体会 .2.1.1第 1 章 硬件实现1.1RTL8019AS 网络控制器介绍RTL8019AS 是一种全双工即插即用的以太网控制器,它在一 块芯片上集成了RTL8019 内核和一个 16KB 的 SDRAM 存储器。 它兼容 RTL8019 控制软件和NE2000 8bit

3、或 16bit 的传输,支持 UTP,AUI,BNC 和 PNP 自动检测模式,支持外接闪烁存储器读写操 作,支持 I/O 口地址的完全解码,具有 LED 指示功能。其接口符 合 Ethernet2 和 IEEE802.3 (10Base5,10Base2,10BaseT 标准。RTL8019AS 采用 100 脚 PQFP 封装,其主要引角功能如 下:引角 1 4, 97 1 00:中断控制 INT0-7;引角 33:复位控制;引脚 34:使能控制角 AEN,低电平有效;引脚 6,7,70, 89:数字电源, 5V; 引脚 14,28,83,86:数字地 GND;引脚 47,57:模拟电源:

4、 5V;引脚 44,52:模拟地;引脚 713,15,16,1827: ISA 地址总线; 引脚 3643,87,88,9095:ISA 数据总线; 引脚 31: Boot ROM 读操作控制; 引脚 32: Boot ROM写操作控制; 引脚 62: RX 接收数据显示 LED1 脚; 引脚 63: TX 发送数据显示 LED2 脚; 引脚 58,59:接收数据 TP IN+/-;引脚 45,46:发送数据 TP OUT+/-;引脚 50,51:外接晶体。20LEK W TFtH-1图 1 RTL8019AS 接线图3第 2 章 /OS-ll 操作系统2.1Q/OS-II 系统简介C/OS-

5、II 读做“ microCOS2 ”,意为“微控制器操作系统版本2”。C/OS-II 是著名的、源码公开的实时内核,可用于各类8 位、16 位和 32 位单片机、arm 或 DSP 等等。C/OS-II 是一个完整的、可移植、可固化、可 剪裁的占先式实时多任务内核。应用程序处于整个系统的顶层.每个任务都可以认为自己独占了 CPU,因而可以设计成为一个无限循环。2.2Q/OS-II 的特点可移植性( portable) 可固化 (ROMmable) 可剪裁(scalable) 可剥夺 (preemptive) 多任务 可确定性 任务栈 系统服务 中断管理 稳定性与可靠性多任务是指:pC/OS-I

6、I 可以管理 64 个任务,然而, uC/OS-ll 的作者 建议用户保留 8 个给 yC/OS-ll。这样,留给用户的应用程序最多可有 56 个任务。系统服务指:pC/OS-II 提供很多系统服务,例如信号量、互斥信号 量、时间标志、消息邮箱、消息队列、块大小固定的内存的申请与释放及 时间管理函数等。中断管理指:中断可以使正在执行的任务暂时挂起,如果优先级更高 的任务被中断唤醒,则高优先级的任务在中断嵌套全部退出后立即执行, 中断嵌套层数可达 255层。2.3任务模式ARM7 处理器核具有用户、系统、管理、中止、未定义、中断和快中 断七种模式 。用户模式 (USER MODE) 是 ARM

7、通常执行状态,用于执行大多数应用 程序;快速中断模式 (FIQ MODE) 支持数据传输或通道处理;中断模式 (IRQ MODE) 用于通用中断处理;超级用户模式 (SVC MODE) 是一种操作系统受 保护的模式:数据中止模式 (ABT MODE) 指令预取指中止、数据中止时进 入该模式;未定义模式 (UNDMODE) 当执行未定义的指令时进入该模式; 系统模式 (SYS MODE) 是操作系统一种特许的用户模式。除了用户模式之外,其他模式都归为特权模式,特权模式用于中断服 务、异常或者访问受保护的资源4特权模式中除系统模式之外另 5 种模式又称为异常模式,在移植过程 中必须设置中断向量表来

8、处理异常。uCOS II 的移植主要处理标准中断 (IRQ) 、快速中断 (FIQ)和软件中断 (SWI) 。2.4支持的指令集带 T 变量的 ARM7 处理器核具有两个指令集:标准 32 位 ARM 指令集 和 16位 Thumb 指令集,两种指令集有不同的应用范围,Q/OS-II 包含了这些指令集的切换 (TaskIsARM() 和 TaskIsTHUMB() 用于改变指令集 )。2.5移植 Q/OS-IIC/OS-II 要求所有.C 文件的都要包含都文件includes.h,这样使得用户项目中的每个 .C 文件不用分别去考虑它实际上需要哪些头文件。 使用 includes.h 的缺点是它

9、可能会包含一些实际不相关的头文件,这意味着每个 文件的编译时间可能会增加,但却增强了代码的可移植性。在本移植中另 外增加了一个头文件 config.h ,我们要求所有用户程序必须包含 config.h , 在 config.h 中包含 includes.h 和特定的头文件和配置项。而pC/OS-II 的系统文件依然只是包含includes.h,即(1C/OS-II 的系统文件完全不必改动。所有的配置改变包括头文件的增减均在 config.h 中进行,而 includes.h 定下 来后不必改动(pC/OS-II 的系统文件需要包含的东西是固定的)。这样,pC/OS-II 的系统文件需要编译的次

10、数大大减少,编译时间随之减少。(JCOS-II 不使用 C 语言中的 short、nt、long 等数据类型的定义,因为它们与处理器类型有关, 隐含着不可移植性。 代之以移植性强 的整数数据类型,这样,既直观又可移植。在使用周立功提供的pC/OS-II 模板的任何功能之前,必须调用函数OSInit(),它完成 yC/OS-ll 的初始化并建立空闲任务。在开始多任务之前, 必须建立至少一个用户任务(不包括pC/OS-II 的空闲任务),这是通过调用函数 OSTaskCreate()或函数 OSTaskCreateExt()实现。最后函数 main()调用函数 OSStart()将控制权交给yC/

11、OS-ll 内核 main()函数也就结束了。C/OS-II应用程序主函数如下:程序清单 1int main (void)OSInit();/ 初始化uC/OS-II5OSTaskCreate(TaskStart,(void *)0, &TaskStartStk127, 3); /创建起动任务OSStart();/开始多任务6第 3 章 ZLG/IP 软件包结构和配置3.1ZLG/IP 软件包结构为了使软件可移植性强、易维护,该软件包采用分层的方法编 写。包括网络传输用到的协议、硬件驱动及 卩 C/OSI 的结构进行 分层。ZLG/IP 包相关文件说明如表格 1表格 1 软件包相关文件

12、说明文件名简要说明ARP.C地址解析协议CRC.C循环冗余码校验Ethernet.C以太网标准HARDWARE.C硬件驱动IP.C网络互联协议ICMP.C因特网控制消息协议Socket.C本地端口协议TCP.C传输控制协议UDP.C用户数据包协议传输层有两个协议传输数据:传输控制协议 TCP 和用户数据报协议 UDP。TCP 协议是面向连接的一个协议,可靠性高,费用 也高;UDP 协议是提供最少服务和费用的传输层协议。UDP 是最简单的传输层协议,它具有以下特点:无连接:UDP 不基于连接来传输数据。不可靠:UDP 的数据报发送时没有定序,所以 UDP 传送的数据是不可靠的,只有靠应用层协议中

13、增加超时重 发等功能才能提供可靠的服务。提供应用层协议标识:UDP 报头有定义应用层协 议标识和目标应用层标识。提供 UDP 报的校验和:UDP 报头包含有整个 UDP 报(包括报头和有效负载)及伪报头的校验和,计算方法 与计算IP 数据报校验和的计算方法相同。缓冲:UDP 协议不提供任何数据接收或发送的缓7冲区。缓冲区应该由应用层协议提供。分段:UDP 协议不提供分段传输方式,所以应用 层协议要尽量发送小的包。SOCKET 接口 函数是 TCP/IP 的 API。使用 SOCKET API 函 数编写 UDP 通信的任务时,分为服务器方式两种。服务器方式是 先接收到数据再进行处理,而客户机则

14、是先发生数据后等待回应处 理,它们用到的 SOCKET API 函数都是相同的。如图 2 所示就 是 UDP 通信时服务器端和客户机通信函数应用过程图。图 2 UDP 通信是 SOCKET API 函数的应用服务器端客户机端8第 4 章设计过程4.1设计步骤由于使用 DM9000 的网络控制芯片的 Magic2200 的实验箱有 点问题,后来我们改用使用 RTL8019AS 网络控制芯片的 EasyARM2200 教学实验平台。1) 启动 ADS1.2,使用 ARM Executable Image for COS-II(Ipc22xx )工程模板建立一个工程 shiya n。2) 把 pCO

15、S-II 内核源码和移植文件,ZLG/IP 软件包目录拷贝 到已建工程目录下,如图 3 所示,arm 目录为移植文件目录,Source 目录为 pCOS-II 内核源码,tcpip 目录为 ZLG/IP 软件包目录。图 3 项目目录结构3)修改 tcpipincludecfg_net.h 文件,修改 MAC 地址为:0 x00,0 x14,0 x97,0 x0F,0 x 仆,0 x9D 子网掩码为 255.255.0.0 IP 地址:172.30.172.77 本地网关地址为 PC 机 IP: 172.30.172.125 如程序 清单 29程序清单 2 MAC 和 IP 设置/* first

16、 Net Port Config*/#defi ne My_Mac_1ID0 x00,0 x14,0 x97,0 x0F,0 x1F,0 x9D / 将RTL8019 的物理地址存储在程序空间?#defi ne IP_MARK_1ID255,255,0,0/255.255.255.0 子网掩码#defi ne MY_IP_1ID172,30,172,77#defi ne MY_GATEWAY_1ID172,30,172,1254)修改 shiyansrcos_cfg.h 文件,OS_MAX_EVENTS 改为 42,OS_LOWEST_PRIO 改为 62, OS_MAX_QS 改为 10。5

17、)在 ADS 的项目窗口中添加 TCPIP 的文件组;然后把目录下的 ARPArp.c、ETHERNETEthernet.c、HARDWAREHardware.c、IPlp.c、PINGIcmp.c、SOCKETzlg_socket.c 和 TCPTcp.c、UDPUdp.c 等文件添加到该文件组,最后把程序编好添加到 ADS 项目窗口的 user 文件组中,如shiyan.mep|檢Del.熬也Ram* 猫粤b laEnd Net Port ConfigFilsCodeDath 黑-tTcnp棒覇Arp.亡嚟翳eWKjrdwu-*.c寧勢Ip. 嘩E lump, c事B ilLsocket.

18、c竇Q Top.c曦翰W-亡D*-h帘+j口旺血疗3 O t*rgatsOc/os-iiK 2 3 o 4Z7閃別的4188200513513692B4B 46620 0G521321QOO 2QB13K KIK 35K 12S03606633K69KJ7K14S&HOB24121HS83610Fill | Link Order | Targets图 4 shiyan 工程窗口116)在 Startup.s 文件的 ResetInit 子程序中,修改存储器接口Bank3 总线配置,如程序清单程序清单 3 存储器接口 Bank3 总线配置LDRRO, =BCFG3;设置 BCFG3 寄存

19、器LDRR1, =0 x10001460STRR1, R04.2实验程序4.2.1 宏定义首先对程序进行初始化宏定义,如程序清单4程序清单 4 初始化宏定义#ineludecon fig.h#inelude./i nclude/cfg_net.hvoid Timerlni t(void);#defi neTASK_START_.ID0#defi neTASK_1_ID1#defi neTASK_2_ID2#defi neTASK_3_ID3#defi neTASK_4_ID4#defi neTASK_5_ID5#defi neTASK_6_ID6#defi neTASK_START_PRIO1

20、0#defi neTASK_1_PRIO11#defi neTASK_2_PRIO12#defi neTASK_3_PRIO13#defi neTASK_4_PRIO14#defi neTASK_5_PRIO15#defi neTASK_6_PRIO16#defi neMSG_QUEUE_SIZE2012OS_EVENTOS_EVENTOS_EVENTOS_EVENT*RecPackedFIag; *RecBufOverFIowFIag;*RecTcpPackedFIag; *RecPingPackedFlag;OS_STK task0_stack3000;OS_STK task1_stack

21、1000;OS_STK task2_stack2000;OS_STK task3_stack1000;OS_STK task4_stack2000;422RTL8019AS 监听任务网络控制器监听程序,如程序清单5程序清单 5 网卡监听任务void TaskB(void *pdata)重要的监听 RTL8019AS 任务void * UdpTemp;uint8 eer;while (1)UdpTemp=OSQPe nd(RecUdpQFIag,0,&eer);if(eer=OS_NO_ERR)Udp_Process(Rec_Ptr *)UdpTemp); eer=eer;423UDP

22、通信程序UDP 通信程序见程序清单 613程序清单 6 UDP 服务器void TaskD(void *pdata)uint8 add36=ZLGMCUyhbabcdefghijklmnopqrstuvwxyz;/当接收到“ A”时发送的数据uint8 add110=123456789; 当出错是发送的数据uin t8 rec_buffer100;/ 发送缓存区SOCKET s;ui nt8 couter_byte=5;重复发送的次数int rec_coute,se nd_coute;uint16 iii;struct sockaddr servaddr,clie ntaddr;OSTimeD

23、ly(60);servaddr.sin_family=0; 设置客户机 IPservaddr.sin_addr0=172;servaddr.s in _addr1=30;servaddr.sin_addr2=172;servaddr.sin_addr3=125;servaddr.sin_port=1026; /设置服务器端口号OSTimeDly(60);s=*socket( 0, SOCK_DGRAM, UDP_PROTOCOL);建立 SOCKETclientaddr.sin_family=O; /设置本地 IPclie ntaddr.sin_addr0=172;clie ntaddr.si

24、n_addr1=30;clie ntaddr.sin_addr2=172;clie ntaddr.sin_addr3=77;clientaddr.sin_port=1025; /设置本地监听端口号iii=b in d(SOCKET*)&s,(structsockaddr*)&clie ntaddr,sizeof(clie ntaddr); 绑定服务器地址while (1)14rec_coute=recvfrom( s, rec_buffer, 100, 0, (structsockaddr*)&servaddr, &iii ); / 接收数据if(rec_cou

25、te0) if(rec_bufferO=A)/ 如果第一个数据是“ A ”couter_byte=5;elsesen d_coute=se ndto(s, rec_buffer, rec_coute, 0,(stru sockaddr*)&servaddr, sizeof(servaddr) ); /把接收的数据返回while(couter_byte!=O) / 循环发送数据sen d_coute=se ndto(s, add, 34,0, (structsockaddr* )&servaddr, sizeof(servaddr);if(se nd_coute=34) OSTi

26、meDly(40);elsesen d_coute=se ndto(s, add1, 9,0, (structsockaddr*)&servaddr, sizeof(servaddr) ); /出错后发送的数据OSTimeDly(40);couter_byte-;424创建系统任务并初始化创建系统任务并初始化如程序清单 7程序清单 7 系统任务void taskO(void *pdata)ct15 /*在第 1 个任务中设置定时器 0 及中断*/UBYTE iii;#if OS_CRITICAL_METHOD = 3OS_CPU_SR cpu_sr;#en difTargetI nit

27、();OSTaskCreateExt(TaskB,/ 重要的RTL8019AS 任务(void *)0,&task1_stack999,TASK_1_PRIO,TASK_1_ID,&task1_stack0,1000,(void *)0,0);OSTaskCreateExt(TaskD,接受数据和发送数据(void *)0,& task3_stack999,TASK_3_PRIO,TASK_3_ID,& task3_stack0, 1000,(void *)0,0);16SetNetPort();InitNic(O);/RTL8019 芯片初始化,在 globa

28、l.c 中定义In itial_arp();Tcp_I nitial();Udp_I ni tial();while(1)OSTimeDly(4);doiii=Rec_Packet();while(iii!=0);void Uart_Se ndChar(INT8U data)while(U0LSR & 0 x00000020) = 0);U0THR = data;425主程序程序清单 8 主程序int main (void)UBYTE iii;Timer1_I nit();OSI nit();OSTaskCreateExt(task0,(void *)0,&task0_stac

29、k2999,TASK_START_PRIO,TASK_START_ID,17& taskO_stackO, 3000,(void *)0,0);RecPackedFlag= OSSemCreate(0); RecBufOverFlowFlag=OSSemCreate(0); RecTcpPackedFlag=OSSemCreate(0);RecPi ngPackedFlag= OSSemCreate(0);Se ndFlag=OSSemCreate(1);ReclcmpQFIag=OSQCreate(&ReclcmpQ0,Q_Max_Size);RecTcpQFlag=OSQC

30、reate(&RecTcpQ0,Q_Max_Size);RecUdpQFIag=OSQCreate(&RecUdpQ0,Q_Max_Size);OSStart();426定时器中断控制程序清单 9 中断控制void Timer1ni t(void)OS_ENTER_CRITICAL();T1IR = 0 xffffffff;T1TC =();T1TCR=:0 x01;T1MCR :=0 x03;T1MR0=0 xffffff;OS_EXIT_CRITICAL();void Timerl(void)18staticuin t8m_10sec=0;staticuin t8p_sec=0;staticuin t8p_mi n=0;uin t8 num;OS_ENTER_CRITICAL();T1IR = 0 x01;m_10sec+; if(m_10sec=100)p_se

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论