以太网LED图文显示系统的设计 第14页
5软件设计
5.1基于LpC2210的L印图文显示屏控制器软件设计
5.1,1LpC2210的控制器软件整体设计和启动代码
嵌入式开发所使用的语言通常为汇编语言和C语言。汇编语言的代码生成效率很高,
程序执行速度快,但是不同系列的处理器支持的汇编语言指令差别很大,程序的可读性
和可移植性都较差、程序开发周期比较长。C语言则是比较通用的程序设计语言,既可
用来编写计算机的系统程序,也可用来编写一般的应用程序。C程序最大的优点就是可
读性强,移植性很好,但是与汇编语言相比,其代码生成效率要低10一20%。
综合考虑,本设计采用C语言和汇编语言嵌套的方式。对时间有严格要求的任务切
换函数、中断入口和出口程序采用汇编语言编写;而由于主程序实现功能较多,而且对
时间要求不太严格,因此采用可读性和移植性很强的C语言编写。
()l控制器软件的整体设计
初初始化此/S0一工工、TCP/IPPP
协协议栈栈
创创建显示任务、接受网络图5.1显示屏控制部分总体软件框图
Fig.5.1Softwarebloekdiagrmofhetsereen,eonrtoller
首先对显示数据做一下介绍,它可分为两类,一类是固化在FLASH之中的固定数据,
另一类是从上位机接收的存储于SDRAM之中的显示数据。固化的显示数据在开机时进
行显示,直到LPC221O接收到上位机下载的显示数据之后,改为显示新收到的数据。安
基于以太网的LED图文显示系统的设计
排固化数据的显示,一方面在开机时不会出现显示空白,使显示屏具有一开就亮的效果,
适应人们使用的心理状态,另一方面也便于脱开上位机进行文修。
控制器软件的主要功能是接收上位机控制软件发送过来的显示数据及显示控制信
息。应用软件部分首先建立了两个任务:TCP数据接收任务和显示屏显示任务。TCP数
据接收任务不断的询问是否收到了新的显示数据,如果收到了,就将其存储到应用程序
空间中;显示屏显示任务根据显示方式控制信号将显示数据区中的数据送到显示屏上显
示。接收以太网数据采用的是中断方式,当控制器的网卡检测到上位机送给本显示屏的
数据后,网卡产生中断信号,处理器获得此事件后,将接收到的数据存储起来,以方便
应用程序的使用。显示屏控制部分的程序状态图如图5.1所示。
(2)启动代码
启动代码是芯片复位后进入C语言的manio函数前执行的一段代码,主要是为运行C
语言程序提供基本的运行环境,如初始化外围部件、存储器系统等。因此启动代码的功
能有点类似PC机中的BIOS和Vxwokrs中的Bootloader。由于飞利浦未提供该芯片的启动
代码,所以需要自己编写启动代码。
开开始始
设设置存储器映射模式式
初初始化部分引脚脚
初初始化存储器加速模块块
初初始化串口口
初初始化实时时钟钟
禁禁止相关中断断
结结束束
图5.2系统基本初始化TargeRtesentltiO流程图
Fig.5.2Flowhcartofhtesyst咖atiebasieniitial九netionTargeRtesetli五to
启动代码可以划分为五个文件:Startup.s、仅Q.s、stack.s、hePa.s和target.c。st叭Pu.s
包含了异常向量表和系统初始化代码,写好之后一般无需改动;RIQ.s包含中断服务程
大连理工大学硕士学位论文
序与c程序的接口代码,可根据实际使用的中断情况进行少量修改;stac.ks和hepa.s保存
C语言使用的堆和栈的开始位置;target.c包含目标板特殊的代码,包括异常处理程序和
目标板初始化程序,可根据程序的需要修改。图5.2给出一个很重要的目标板初始化程序
中的函数TgaretResethi(ti)的流程图,从中可以看出在进入maino函数前对系统进行的基
本初始化工作的具体步骤。
5.飞.ZR丁LSO1A9s网卡控制器的驱动程序设计
LW正的网络驱动有一定的模型,/scrn/eti厂ethmeetif。文件即为驱动的模板,用户为
自己的网络设备实现驱动时可以参照此模板。在Lw正中可以有多个网络接口,每个网络
接口都对应了一个Sturctnetif,这个neti泡含了相应网络接口的属性、收发函数。LW护
调用neti哟方法neti-f>iPnutO及neti-f>。Pututo进行以太网packet的收、发等操作。在驱动
中主要做的,就是实现网络接口的收、发、初始化以及中断处理函数[35]。驱动程序工作
在正协议模型的网络接口层,它提供给上层(正层)的接口函数如下:
()l网卡初始化函数
voidethemeti--fnilt(sUrtetnetif*netiD
该函数对网络接口的属性、即表进行初始化设置,同时对网卡芯片RTL8019As进
行一下复位和初始化工作。对网卡的操作过程如下:
①使芯片处于停止模式,亦可延时10一20ms,以确保芯片进入停止模式。②设置中
断屏蔽寄存器n姓R,屏蔽所有中断。③设置接收、发送缓冲区的范围,构造缓冲环,此
过程通过设置寄存器TPSR、PSTART、PSTOP来实现。④初始化读缓冲环指针BNRY、
写缓冲环指针CIJRR。⑤设置接收配置寄存器RCR、发送配置寄存器TCR、数据配置寄
存器DCR。⑥设置多址寄存器MARO~MARS,一般设置为xooo,设置网卡地址寄存器
PARO~PARS。⑦清除所有中断标志位,开启中断。CR二x022,启动芯片。
(2)网卡接收数据函数
voidehtmeeti--fiPnut(s加ctnetif*neti勺
该函数从网络接口接收以太网数据包并把其中的正报文向正层发送。在中断方式下,
由网卡sIR调用。该函数大致的实现过程如下:
①关闭中断,接收数据时不允许中断介入,防止接收的数据被破坏。读取寄存器
BNRY、CURR,利用这两个寄存器的值判断是否真的收到了数据,如果没有,返回,
否则进行下面的步骤。
②取出4个字节的8019首部,第一个字节表示接收的状态,第二个字节表示下一个
包的指针,第三、四个字节表示接收包的长度。
基于以太网的LED图文显示系统的设计
③根据首部做一下判断,如果接收状态错误或者下一个包的指针错误或者接收包
的长度大于1536,则不作接收处理,返回。如果没有错误,则继续往下进行。
④写读页地址寄存器RSARO、RSARI,也就是缓冲环的写指针,表示从此处读取
数据。写想要读取的字节数寄存器RSCRO、RSCRI。并将数据存储起来。
⑤更新寄存器BNRY,打开中断,之后将接收到的数据交给上层协议处理。
(3)网卡发送数据函数
e几tehtemeti妙Putut(sturetnetif*neti,fsUrtetPbuf*P,s恤etiP一addr*Piadd)r
该函数给正层传过来的PI报文加上以太网包头并通过网络接口发送。大致的实现过
程如下:
①根据上层传过来的数据*p,得到数据的长度。
②写读页地址寄存器RSARO、RSARI,也就是缓冲环的写指针,表示从此处写入
数据。写想要写入的字节数寄存器RSCRO、RSCRI。启动远程DMA,将数据存储起来。
③终止远程DMA,设置要发送的页的起始地址,即发送页寄存器TPSR。
④设置要发送的字节数寄存器TBCRO、TBCRI。启动发送命令,将数据发送出去。
⑤检测发送状态寄存器TPSR,如果发送成功,则函数返回,否则重发,可以限制
重发次数,例如不能大于6次。
(4)网卡中断处理函数SIR
voidhet彻eti匀sr(void)
当RTL8o19AS接收到数据或者发送完数据都会产生中断,处理器响应该中断,并进
入中断处理函数,函数RTL8019ASJSRO实现中断处理,具体实现过程如下:
①读取中断状态寄存器,如果芯片复位了或者接收溢出了,就重新初始化,调用
函数ResetA刀dnliNtie()。
②如果正确接收了一个数据包,则告知接收函数可以接收。如果接收的数据包有
误,则丢弃接收到的包。
③如果正确发送了一个数据包,则中断返回,否则,重发此数据包。
以上的函数都可以分为协议栈本身的处理和对网络接口硬件的操作两部分,但硬件
操作是对上层屏蔽的。
5.1.3丁Cp接收、处理网络数据的任务
Lw护提供了一些正式的API,这种API的实现实际上是在系统中单独建立了一个
ctPip任务,由这个任务调用RAw妙I来处理网络通信,其他的网络任务都是利用消息机
制与tPcPI任务通信来收发数据。可以看到这种好I只能用于多任务系统中。具体的好I
函数分为两种,一种用来对收发的数据包nehtu哒行操作,nehtu屿Pbu卜一对应。另一
<< 上一页 [11] [12] [13] [14] [15] [16] [17] [18] [19] [20] 下一页
以太网LED图文显示系统的设计 第14页下载如图片无法显示或论文不完整,请联系qq752018766