您当前的位置:五五电子网电子知识单片机-工控设备嵌入式系统-技术TCP/IP协议栈的引入和LAN91C111驱动的编写 正文
TCP/IP协议栈的引入和LAN91C111驱动的编写

TCP/IP协议栈的引入和LAN91C111驱动的编写

点击数:7430 次   录入时间:03-04 12:04:03   整理:http://www.55dianzi.com   嵌入式系统-技术

    (1) DSP设置receive control寄存器中的RXEN位,允许接收包。

    (2)含有正确地址的包被接收到,从MMU请求存储空间,并分派一个packet number,内部的DMA逻辑产生连续的地址,并将接收到的字写到memory中,如果超界,包被丢弃,存储空间被释放。当检测到包的结束,状态字被写到接收包的最前面,byte count写到第二个字。如果CRC校验正确,packet number被写到RX FIFO,由于RX FIFO非空,产生RCV INT中断;如果CRC校验不正确,存储空间被释放,而且不产生中断。

    (3) DSP接收到中断后开始执行中断处理程序,它读入中断状态寄存器,如果产生接收中断(RCV INT位为1),则可以从FIFO ports寄存器得到接收的包的packet number,而且可以从数据寄存器将接收包传送到DSP的内存或外存中。当处理结束,DSP向处理器发布REMOVE AND RELEASE FROM TOP OF RX命令(即设置寄存器MMUCOM,即0x0060),释放使用的存储空间和packet number.

    软件的调试与验证

    调试环境包括我们做的TMS320LF2407A+LAN91C111板、PC机、仿真器、网线等。首先,新建工程,脱离操作系统和TCP/IP协议的环境下,单独调试通过LAN91C111的驱动程序,初始化,接收发送数据成功之后,另建工程集合μCOS-Ⅱ和LwIP结合驱动程序进行调试,在μCOS-Ⅱ中初始化LwlP,并创建TCP或UDP任务进行测试了。值得注意的是LwIP的初始化必须在μCOS-Ⅱ完全启动之后也就是在任务中进行,因为它的初始化用到了信号量等OS相关的操作。关键部份的代码和说明如下:

    main(){OSlnit();OSTaskCreate(Iwip_init_task, Null, &Iwip-init-stk[TASK_STK_SIZE-1 ], 0);OSStart();}

    主程序中创建了初始化LwIP任务Lwip_init_task(优先级0). Iwip_init_task任务中初始化硬件时钟和LwIP,还创建了tcpip_thread(优先级5)和tcpecho_thread(优先级6)两个任务。实际上tcpip_thread才是LwIP的主线程,多线程的Berkley API也是基于这个线程实现的,即上面的tcpecho_thread线程也要依靠tcpip_thread线程来与外界通信,这样做的好处是编程简单,结构清晰。

    编译运行后,用PINg IP地址命令可以得到ICMP reply响应。用telnet IP地址命令可以看到echo server的回显效果。说明ARP,ICMP,IP、下CP协议都已正确运行,调试通过。

    结语

    按课题的需求,这套系统用于电力保护系统的现场板卡的管理与和上下位机的通讯,现场采集的数据经处理后,通过数据线路连接到该板(本文所讨论的系统)。由该DSP板集中进行管理并实现和上位机的通讯。该系统目前效果令人满意,并且可以根据课题的需要,灵活地进行扩展。还可用于智能家电等领域,具有很好的发展前景。



上一页  [1] [2] 


本文关键字:IP协议  嵌入式系统-技术单片机-工控设备 - 嵌入式系统-技术