新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > 单片机图像采集与网络传输

单片机图像采集与网络传输

作者:时间:2012-03-20来源:网络收藏

上面说到,“IP组播地址”范围是224.0.0.0到239.255.255.255。而以太网帧用到的“MAC组播地址”范围是 01:00:5E:00:00:00-01:00:5E:7F:FF:FF 。MAC组播地址的构成方法是:前3个字节固定用01:00:5E,后3个字节则用IP组播地址的后3个字节。所以我们用234.5.6.7作IP组播地址时,对应的MAC组播地址就是 01:00:5E:05:06:07。

在下面的程序中,RTL8019AS用查询方式进行发送操作。
UCHAR code dest_hwaddr[6] = { 0x01, 0x00, 0x5E, 0x05, 0x06, 0x07}; // 目标MAC组播地址
UCHAR code my_hwaddr[6] = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06 }; // 源MAC地址
void eth_send(UCHAR xdata * outbuf, UINT Data_len) // (例程7--以太网帧封装和发送):
{ UINT i , send_len; ETH_HEADER xdata * eth; eth = (ETH_HEADER xdata *)outbuf;
for(i=0;i6;i++)
{ eth->dest_hwaddr[i]= dest_hwaddr[i]; // 装入目的MAC地址。
eth->source_hwaddr[i]= my_hwaddr[i]; // 装入源MAC地址。
}
eth->frame_type = IP_PACKET; // 数据类型为IP数据报
// send_len为实际要发送的以太网帧长度,它不能小于60字节:
send_len = (Data_len>=60) ? Data_len : 60 ;
reg00=0x22; // 选择0页寄存器,启动芯片。
while( reg00 0x04 ); // 原来的数据发送完没有?完了往下执行
reg08=0x00; reg09=0x40; // 设置发送缓冲区开始地址为4000H。
//设置(RBCR0-1)远端DMA传送数据包长度(高、低字节):
reg0a=(unsigned char)(Data_len); reg0b=(unsigned char)(Data_len>>8);
reg00=0x16; // 设置远端DMA写,启动远端DMA传送数据到发送缓冲区
for(i=0;iData_len;i++) reg10=outbuf[i]; // 往RTL8019AS的I/O端口传送数据
reg04=0x40; // 设置发送缓冲区开始地址高字节
//设置(TBCR0-1)发送字节计数器的计数长度(高、低字节):
reg05=(unsigned char)(send_len); reg06=(unsigned char)(send_len>>8);
reg00=0x26; // 启动本地DMA操作,向网络发送数据。
}

上述程序先设置好远端DMA开始地址(RSAR)和远端DMA数据字节数(RBCR),并设置远端DMA写( reg00=0x16),就可以把数据写入RTL8019AS的数据缓冲区。给出发送缓冲区首地址和数据包长度后,启动发送命令 (reg00=0x26), RTL8019AS就会按以太网协议将图像数据发送到网络上。

4. 结束语

TCP/IP协议较复杂,嵌入式系统自身的资源又很有限,动辄几十K的TCP/IP协议栈,使很多入门者望而却步。其实要在嵌入式系统实现TCP/IP协议,只不过就是编制各个符合TCP/IP协议规则的软件模块罢了。根据自己系统的具体情况编制专门的功能模块,也可以实现相当简化的TCP/IP协议栈。本文在此给出了一个可供借鉴的实例。

参考文献:
[1] 吴礼发, 网络程序设计教程[M],北京:希望电子出版社,2002.1
[2] RTL8019AS SPECIFICATION[EB/OL],REALTEKSEMI-CONDUCTOR CO., LTD , 2000.8.20
[3] 与TCP/IP网络[EB/OL], HTTP:// WWW.LAOGU.COM


上一页 1 2 3 4 下一页

评论


相关推荐

技术专区

关闭