以太网LED图文显示系统的设计 第15页
种用于netocnn的各种操作,netocnn是抽象化的网络连接。建立TCP接收、处理网络数据
的任务需要的neteonn函数主要有netconn-pwe、neteom牡delete、neteonn--bnid、
netconn-。onneet、neteonneslistne、neteom牡accPet、netconnjeev、neteom--iWnte和
netconnclose。下面将分别介绍一下这些函数:
s如etneetonn*neteonn‘pwe(nuxnenetcom--lt即et即e),建立一个新的连接数据结构,根据是要建立TCP还是UDP连接来选择参数值是砚TCONN一TCP还是N’ETC0阅火UCP。
调用这个函数并不会建立连接并且没有数据被发送到网络中。
voidneteom犯delete(s加etneteonn*eon)li,删除连接数据结构eonn,如果连接已经打
开,调用这个函数将会关闭这个连接。
流netconn少nid(surtetneteonn*eonn,s加et--Piaddr*addr,unsi,edshortpo)rt,为参
数ocml指定的连接绑定本地正地址和TCP或UDP端口号。如果dadr参数为NIJLL则本地正
地址由网络系统确定。
intneteonn-connect(surtetneteomt*eo,mrs加eti--Pdadr*dadr,unsingedshortport),对
UDP连接,该函数通过dadr和port参数设定发送的UDP消息要到达的远程主机的PI地址和
端口号。对TcP,netocm七c0nnec()t函数打开与指定远程主机的连接。
intneteonn‘listne(s加etnetconn*conn),使参数eonn指定的连接进入TCP监听(Tep
LISTNE)状态。
sturetnetconn*n啡eonn-aee即t(usrtctneteonn*eonn),阻塞进程直至从远程主机发出
的连接请求到达参数ocml指定的连接。这个连接必须处于监听(LISTEN)状态,因此在调
用netocnn‘accPeot函数之前必须调用netocm--llistneo函数。与远程主机的连接建立后,
函数返回新连接的结构。
surtetne化uf*neteo翻几--reev(surtetneteonn*eom)l,阻塞进程,等待数据到达参数eonn
指定的连接。如果连接已经被远程主机关闭,则返回NULL,其它情况,函数返回一个
包含着接收到的数据的nbetuf。
intneteonn二wnte(s恤etneteonn*eonn,void*data,intlne,皿51,edintflags),这个函
数只用于TCP连接。它把data指针指向的数据放在属于ocnn连接的输出队列。eln参数指
定数据的长度,这里对数据长度没有任何限制。这个函数不需要应用程序明确的分配缓
冲区伪ueffsr),因为这由协议栈来负责。flgas参数有两种可能的状态,如下所示:
#defineNETCONNNOCOPY0X00
#defineNETCONNCOPYx001
当nags值为NETcONN一COPY时,data指针指向的数据被复制到为这些数据分配的
内部缓冲区。这就允许这些数据在函数调用后可以直接修改,但是这会在执行时间和内
基于以太网的LED图文显示系统的设计
存使用率方面降低效率。如果flgas值为砚TCO闻火NOCoPY,数据不会被复制而是直
接使用data指针来引用。这些数据在函数调用后不能被修改,因为这些数据可能会被放
在当前指定连接的重发队列,并且会在里面逗留一段不确定的时间。当要发送的数据在
ROM中因而数据不可变时这很有用。如果需要更多的控制数据的修改,则可以联合使用
复制和不复制数据。
intnetco扭七close(sUcrttneteonn*conn),关闭参数conn指定的连接。
在wL正中,所有t叩/ip协议栈都在一个进程当中,这样tPc/ip协议栈就和操作系统内
核分开了。而应用层程序既可以是单独的进程也可以驻留在tPc/ip进程中。如果应用程序
是单独的进程可以通过操作系统的邮箱、消息队列等和tPc/Pi进程进行通讯。如果应用层
程序驻留tPc八p进程中,那应用层程序就利用内部回调函数口扭wa”)I和tPc/Pi协议栈通
讯。对于环co/s一11来说进程就是一个系统任务。在LWPI的进程模型中,整个t叩n/i协议
栈都在同一个任务(tPcI--Pthraed)中。应用层程序既可以是独立的任务,也可以在
t叩i刀hraed中利用内部回调函数口扭wa妙D和tPc八p协议栈通讯。
本设计中创建TCP任务的函数是这样的:osTaskcreatEextT(cPTas,k
(void*)0,
&TASKTC--Pstakc[499),
TASKTCPeeP班O,
TASKTCP‘D,
&TASKTCP_staek[0],
500,
(void*)o,
O);
该函数创建了一个名字叫TCPTask的任务,并将其作为应用程序的一部分,该任务
负责将网卡接收到的数据拷贝过来。上位机通过网络送过来的数据的主要部分是将要显
示的数据,但是不只是这些,还包还一些控制信息,比如,控制显示屏的显示方式,使
显示屏可以滚动显示、闪烁显示等。本设计中将数据包中的前四个字节定义为控制信息,
从第四个字节之后才是需要显示的信息。因此该任务接收到网络信息后需要将控制信息
和显示信息分开,之后将他们分别存储到两个全局的变量中。
存储控制信息的变量叫c0NTRO--LsTYEL,TCPTask任务首先将接收到的数据的前
四个字节取出来放到CoNTRO--LSTYLE中,然后将第四个字节之后的数据存到数组
DIS--P32中,本设计中做的显示屏为32*32像素的,为了便于显示方式的控制,DslP_32
定义成ulnt犯的具有32个字节的数组,如果显示屏的大小有变化,则需要根据实际情况
大连理工大学硕士学位论文
做一些变动。本设计中初步实现了闪烁显示、上移、下移、左移、右移、稳定显示辣种
显示方式,该任务的程序流程图如图5.3所示。到到DslPALL数组中中
图5.3TCP数据接收任务的程序流程图
Fig.5.3FlowehartofTCPdataereeivnig住巧k
5.1.4显示任务程序设计
本设计中使用了一路LPC2210的SPI口,SPI是一个全双工的同步串行接口,一个SPI
总线可以连接多个主机和多个从机,但是在同一时刻只允许有一个主机操作总线。在数
据的传输过程中,总线上只能有一个主机和一个从机通信。在一次数据传输中,主机总
是向从机发送一个字节数据(主机通过Mosl输出数据),而从机也总是向主机发送一个字
节数据(主机通过MISO接收数据)。SPI总线时钟总是由主机产生。
SPI的引脚有四个:SCK、SSEL、MISO、MOSI。SCK是串行时钟,用于同步SPI
接口间数据传输的时钟信号,它只有在数据传输时才被激活。SSEL为从机选择引脚,
它是一个低有效信号,用于指示被选择参与数据传输的从机。在主SPI模式下,该信号
基于以太网的LED图文显示系统的设计
不能用作GPoI。MSIO是一个单向的信号,它将数据由从机传输到主机。当器件为从机
时,串行数据从该端口输出。当器件为主机时,串行数据从该端口输入。当从机没有被
选择时,将该信号输出为高阻态。MOSI也是一个单向的信号,它将数据从主机传输到
从机。当器件为主机时,串行数据从该端口输出。当器件为从机时,串行数据从该端口
输入。本设计中SCK作为时钟输入信号接到所有SN74LS595N的管脚SRCKL,MOSI作
为第一个SN74LS595N的数据输入端。
sPI功能模块有5个寄存器,表5.1为它们的简单描述[Jl。通过设置寄存器sPCR的相
应位,将SPI设置为主模式,数据的移动方向为MSB(位7)在先。SPI发送数据使用的是下
面的这个小函数:
uintsMSneDdata(uintsdat)a
{
SOPDR=data;
while(0=(SOPSR&x080));//等待SP正置位,即等待数据发
送完毕
ertum(SOPDR);
表5.1SPI寄存器映射
Tba.5.1称gisertmPaPngiofhetSPI访问复位值
SPDR
SPCCR
SPINT
描述
SPI控制寄存器,该寄存器控制SPI的操作模式
SPI状态寄存器,用于监视SPI功能模块的状态
SPI数据寄存器,该双向寄存器为SPI提供发送和接收的数据。
发送数据通过写该寄存器提供,SPI接收的数据可从该寄存器读
出
SPI时钟计数寄存器,用于设置计数器寄存器
SPI中断标志寄存器,该寄存器包含了SPI接口的中断标志
LPC2210的引脚连接模块使同一个引脚可以具有多种功能,即引脚复用,通过配置
相关的寄存器P则SELO、P则SELI、P州SELZ控制多路开关来连接引脚与片内外设。
SN74LS595N的锁存信号选择的是管脚P0.8,DM74LS161A的时钟信号选择的是管脚
P0.22,DM74Ls16Al的数据载入信号选择的是管脚P.023,这三个管脚是通过引脚连接
模块将其设置为通用FO口。
创建显示任务DispTask的函数是:OsTaskCreateExtD(ispTask,
(void*)o,
<< 上一页 [11] [12] [13] [14] [15] [16] [17] [18] [19] [20] 下一页
以太网LED图文显示系统的设计 第15页下载如图片无法显示或论文不完整,请联系qq752018766