- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
DSP NDK Packet Driver编程接口分析-0.1
DSP642 NDK Packet Driver
编程接口分析
上海交通大学
网络系统与信息安全研究中心
版本说明
版本 作者 修改日期 修改说明 0.1 李晓勇 2004-05-11 初始版本。
文档说明
本文档主要分析 TI DSP642 NDK(Network Development Kit)中以太网驱动程序的接口和使用方法。
基本原理
DRIVER支持两种工作模式:中断和轮询。不管在哪个模式,Driver在收到包后都将其放到一个全局的队列(但是不知道在哪个模块中定义,dirver还是协议栈,还是ctrl)。
同时,上层程序必须提供一个回调函数:
void EtherRxPacket( PBM_Handle hPkt )
当上层程序调用 _llPacketServiceCheck( fEvents ); 或 llPacketService() 来询问是否有包到达时,DRIVER将调用EtherRxPacket( PBM_Handle hPkt )将包传递给上层程序。
在中断模式中,DRIVER收到包后将通过信号量的方式通知上层程序。
Ethernet Driver中使用了“零拷贝”技术。在接收帧,处理完毕后必须是否packet buffer。
但是,目前从头文件和帮助文件中还无法找到如何设置DRIVER使用哪一种模式。
使用举例
if( !_mmInit() ) /* 初始化MM */
return;
// Initialize our event object
// 创建stack 事件对象,DRIVER将通过该对象来
// 通知发生的事件,并通过信号量来唤醒上层程序
STKEVENT_init( stkEvent, (SEM_create( 0, 0 )) );
// Open the packet buffer manager
// 初始化PACKET BUFFER管理模块
PBM_open();
// Initialize the Timer device
// 是否需要?
_llTimerInit( stkEvent, 0 );
// Initialize the packet drivers
// 初始化 Packet Driver
_llPacketInit(stkEvent) ;
// 打开一个Ethernet 设备
llPacketOpen( 1, 0 ) ;
// 获得以太网地址
llPacketGetMacAddr( 1, macaddr );
/*发送举例*/
if( !(pPkt = PBM_alloc(testsize)) )
{
printf(Could not get buffer!\n);
return(0);
}
memcpy( pPkt-pDataBuffer, TestPacket, testsize );
pPkt-ValidLen = testsize;
pPkt-DataOffset = 0;
llPacketSend( 1, pPkt );
/*接收举例*/
/* 等待信号量(中断模式),是否可以????*/
SEM_pend( stkEvent.hSemEvent, SYS_FOREVER );
SEM_reset( stkEvent.hSemEvent, 0 );
// Check for a Ethernet event and flag it
if( stkEvent.EventCodes[STKEVENT_ETHERNET] ) {
stkEvent.EventCodes[STKEVENT_ETHERNET] = 0;
llEnter(); // Enter Kernel Mode
llPacketService(); /* 接收包*/
llExit(); // Exit Kernel Mode
}
参考文献
D:\ti\c6000\NDK\emacutil\emactest\common\emactest.c
D:\ti\c6000\NDK\docs\pg303.pdf 10.5节: Low Level Packet Driver (llPacket)
Page 4 of 4
您可能关注的文档
最近下载
- 2023年5月23日福建省福安市教师县乡选调《教育综合知识》真题试卷及标准答案【有解析】_2969.doc VIP
- 春江花月夜(说课课件).ppt VIP
- 2025年湖南铁道职业技术学院单招职业技能测试题库带答案.docx VIP
- 自考00814中国古代文论选读(河北)考前密押120题及答案含解析.docx VIP
- 结婚2周年纪念日感言PPT.pptx VIP
- 《旧唐书·郭孝恪传》原文及翻译译文 .docx VIP
- 2023年2月13日福建省邵武市乡村教师招聘考试《教育综合知识》真题试卷及标准答案【有解析】_2053.doc VIP
- 直流系统考试题.pdf VIP
- 高考英语任务型阅读高频词汇.docx VIP
- 小学四年级英语阅读理解20篇(附答案).docx VIP
文档评论(0)