保存桌面快捷方式 - - 设为首页 - 手机版
凹丫丫旗下网站:四字成语大全 - 故事大全 - 范文大全
您现在的位置: 范文大全 >> 理工论文 >> 电子通信论文 >> 正文

在TMS320VC5402上实现的嵌入式TCP/IP协议栈


>  ①物理层:主要完成以太网控制器RTL8019AS的复位,寄存器的初始化,并设置RTL8019AS的工作方式、中断响应、DMA通道接收缓冲区的地址设置等。
  
  初始化程序如下:
  
  WRITE0x21,CR/*设置命令寄存器,选中第0页*/
  
  WRITE0x4c,PSTART/*页起始地址寄存器初始化,设定接收缓冲区起始页地址*/
  
  WRITE0x80,PSTOP/*页停止地址寄存器初始化,设定接收缓冲区终止页地址*/
  
  WRITE0x4c,BNRY
  
  /*页边界地址寄存器初始化,设定从接收缓冲区读取数据的位置,读指针*/
  
  WRITE0x40,TPSR/*发送页地址寄存器初始化,设定发送缓冲区的起始页地址*/
  
  WRITE0xcc,RCR
  
  /*接收配置寄存器初始化,使用接收缓冲区,仅接收自己地址的数据包、广播地址数据包和多点播地址包,小于64字节的包丢弃,校验错的数据包不接收*/
  
  WRITE0xe0,TCR
  
  /*传输配置寄存器初始化,启用CRC自动生成和自动校验,工作在正常模式*/
  
  WRITE0xc9,DCR
  
  /*数据配置寄存器初始化,使用FIFO缓存,工作在正常模式,DMA传输数据16位宽*/
  
  WRITE0x01,IMR/*中断屏蔽寄存器初始化,使能数据包正确接收中断*/
  
  WRITE0xff,ISR/*复位中断状态寄存器*/
  
  WRITE0x61,CR/*设置命令寄存器,选中第1页*/
  
  WRITE0x4d,CURR
  
  /*当前页地址寄存器初始化,指向当前正在写的页的下一页,写指针*/
  
  其中WRITE为宏指令,其定义如下:
  
  WRITE.macrodata,reg
  
  STdata,*(net_reg)
  
  PORTW*(net_reg),reg
  
  RPT#(20-1)
  
  NOP
  
  .endm
  
  ②网络层:主要实现IP协议和ARP协议。当DSP接收到正确的以太网数据包以后,调用check_packet函数处理。如果是ARP请求,则发送一个ARP应答;如果是ARP应答,则把对方的IP地址和以太网地址放到ARP缓存中;如果是IP包,则调用IP处理模块处理,接收数据。
  
  check_packe函数如下:
  
  arp:CMPM*(databuf.ethernetpkt.protocol),#0x0608
  
  ;判断协议类型是否为ARP协议
  
  BCip,NTC
  
  CALLarp_process;调用ARP协议处理模块
  
  ST#taskfree,*(task);设置空闲任务指针
  
  Btaskfree;跳转到空闲任务
  
  Ip:CMPM*(databuf.ethernet.protocol),#0x0008;判断协议类型是否为IP协议
  
  CC
  
  
  
  ip_process,TC;若为IP协议,调用IP协议处理模块
  
  ST#taskfree,*(task);设置空闲任务指针
  
  Btaskfree;跳转到空闲任务
  
  arp_process:接收ARP请求后,封装好ARP数据报,调用send_packet函数完成发送。在本设计中,DSP工作复位时,ARP协议发送一个ARP请求,发送自己的IP地址和物理地址给PC机。
  
  ip_process:接收IP数据报后,判断协议,协议如果为17,即是UDP协议,则调用函数udp_process,处理UDP数据报,否则丢弃该数据报。在本设计中,正确接收一帧数据报后,会给PC机一个应答信息,通知PC机已经正确接收了数据报,可以继续发送数据。应答信息的封装首先调用create_udp_packet完成对应答信息的UDP协议的封装,然后调用create_ip_packet函数,这个函数完成了把封装好的UDP数据报再封装成IP数据报。最后调用send_packet函数完成发送。
  
  ③传输层:如果IP数据报中的协议类型为17,则为UDP数据报,需要调用udp_process函数处理数据报。正确接收了数据后,给发送一个应答信息,上面已经提到了具体过程,这里不再复述了。这里介绍一下UDP协议的一个难点—UDP数据的和校验。UDP和校验要求加上UDP伪首部以后再进行校验,伪首部格式包括32位源IP地址、32位目的IP地址、8位数据0、8位协议和16位UDP数据长度。作者根据接收缓冲区的内存管理特点,即接收缓冲区的成员结构共用同一块数据存储区,所以将IP协议的帧头从生存时间开始到帧头结束封装成UDP伪首部。其实这样做,只需将8位生存时间改为全0,16位首部和改为UDP数据长度即可,8位的协议、32位源IP地址和32位的目的IP地址不用改动。作UDP和校验的时候,从IP协议帧头的报文生存时间开始到IP数据报的数据部分结束作带进位的相加,最后比较对和校验就可以了。
  
  ④应用层:由于传输的是语音数据,将采集的数据经过A律压缩放到DSP数据缓冲区databuf中,应用TCP/IIP协议将其发送给PC机。将PC机发送来的语音数据A律压缩通过DSP的多通道缓冲串行口发送

《在TMS320VC5402上实现的嵌入式TCP/IP协议栈(第2页)》
本文链接地址:http://www.oyaya.net/fanwen/view/169927.html

★温馨提示:你可以返回到 电子通信论文 也可以利用本站页顶的站内搜索功能查找你想要的文章。