久久中文视频-久久中文网-久久中文亚洲国产-久久中文字幕久久久久-亚洲狠狠成人综合网-亚洲狠狠婷婷综合久久久久

以文本方式查看主題

-  曙海教育集團(tuán)論壇  (http://www.xinguifushi.cn/bbs/index.asp)
--  WinCE系統(tǒng)定制與驅(qū)動開發(fā)  (http://www.xinguifushi.cn/bbs/list.asp?boardid=36)
----  wince下usb驅(qū)動攻堅戰(zhàn)  (http://www.xinguifushi.cn/bbs/dispbbs.asp?boardid=36&id=1833)

--  作者:wangxinxin
--  發(fā)布時間:2010-11-26 14:08:26
--  wince下usb驅(qū)動攻堅戰(zhàn)
首先給出一個ED和TD的鏈表結(jié)構(gòu)圖,相信有了這個圖對代碼的理解就容易多了!
HeadPtr-->ED-->ED-->ED-->ED
ED-->TD-->TD-->TD...

    根據(jù)OHCI spec:每個ED(Endpoint Descriptor)描述USB設(shè)備的一個端點(diǎn)的所有數(shù)據(jù)傳輸,所有的ED被連接在一起;而TD(Transfer Descriptor)描述的才是最終要在USB總線上傳輸?shù)臄?shù)據(jù)包,屬于同一個USB設(shè)備端點(diǎn)的TD被連接在一起,并掛在相應(yīng)的ED上。
1)ohcd.c
該文件在platform下,可替代wince自帶的system.c文件(在public/common/oak/drivers/usb/hcd/ohc/下)。該文件中的函數(shù)被hcddrv.c文件中的HCD_流形式接口函數(shù)調(diào)用。
2)hcddrv.cpp
該文件在public/common/oak/drivers/usb/hcd/common下面,文件中的具體設(shè)置函數(shù):
HcdMdd_CreateMemoryObject
HcdMdd_CreateHcdObject
HcdMdd_DestroyMemoryObject
HcdMdd_DestroyHcdObject
HcdMdd_PowerOn
HcdMdd_PowerDown
HcdMdd_SetCapability
又被ohcd.c中的函數(shù)調(diào)用
CUHcd-->CHW-->CHcd(繼承關(guān)系,CUHcd的實(shí)例被創(chuàng)建)
 
初始化函數(shù)調(diào)用流程
1)HCD_Init()[hcddrv.cpp]
2)HcdPdd_Init()[ohcd.c]
3)InitializeOHCI()[ohcd.c]
配置IOBASE,IRQ。可讀取注冊表,也可以通過程序自配
4)HcdMdd_CreateMemoryObject();HcdMdd_CreateHcdObject()[hcddrv.cpp]
HcdMdd_CreateMemoryObject()==>CPhysMem->InittedOK()[usb/hcd/common/cphysmem.hpp]
HcdMdd_CreateHcdObject()==>CHcd->DeviceInitialize()[usb/hcd/ohcd2/cuhcd.cpp]
 
CHcd::DeviceInitialize()過程
1)CDeviceGlobal::Initialize()[usb/hcd/common/cdevice.cpp]
加載usbd.dll,并調(diào)用其中的HcdAttach()[usb/usbd/usbddrv.cpp]用hcddrv.cpp中的gc_HcdFuncs來設(shè)置usbd層的功能函數(shù)[pHcd->pHcdFuncs]
2)CHW::Initialize()[usb/hcd/ohcd2/chw.cpp]
初始化硬件,控制器寄存器,并創(chuàng)建線程用于處理HC的IST,并調(diào)用SignalCheckForDoneTransfer()來偵聽傳輸?shù)耐瓿?br/>3)CHCCArea::Initialize()[usb/hcd/ohcd2/cpipe.cpp]
初始化CPipe的靜態(tài)變量,建立一個禎鏈表的空調(diào)度,同時建立中斷Queue Head樹,創(chuàng)建線程用于處理傳輸完成。
 
IoPortBase = USB_BASE 以及Sys_Irq的初始化流程
1)HcdPdd_Init()[ohcd.c]
2)InitializeOHCI()[ohcd.c]
3)ConfigureOHCICard()[ohcd.c]:在此配置;HcdMdd_CreateHcdObject()[hcddrv.cpp]
4)CreateHCDObject()[cuhcd.cpp]:在此new CUhcd并初始化其父類CHW,在CHW初始化時初始化其成員變量m_portBase[chw.cpp]
 
Transfer流程
所有的IssueTransfer最終都要調(diào)用CPipe::IssueTransfer()[cpipe.cpp]
1)new STransfer并配置
2)拷貝client buffer到out transfer
3)AddTransfer:設(shè)置TDs鏈表并加到相應(yīng)的ED下
4)ScheduleTransfer
5)CHW::ListControl()
 
[以下以bulk為例]
1)在CHW::Initialize()中有
CHW::m_pBulkHead = &m_portBase->HcBulkHeadED;
2)在各pipe類的::OpenPipe()中有
*(CHW::m_pBulkHead) = (pa)m_pED;
 
故此:傳輸過程由HC根據(jù)各ED值來讀寫指定內(nèi)存,具體數(shù)據(jù)在各ED下的TDS鏈表中的各TD中,過程由HcControl和HcCommandStatus寄存器的各相應(yīng)位來控制。

主站蜘蛛池模板: 成年女人毛片免费视频永久vip | 夜色www国产精品资源站 | 欧美日韩精品高清一区二区 | 久久精品中文字幕首页 | 亚洲视频 欧美视频 | 国产呦精品系列在线 | 小屁孩cao大人免费网站 | 日本三级午夜 | 美女被拍拍拍拍拍拍拍拍 | 欧美日韩一级黄色片 | 三级大片网站 | 9久久免费国产精品特黄 | 免费看黄网 | 女人张开腿给男人桶爽免费 | 欧美色大成网站www永久男同 | 免费看一级欧美毛片 | 成人看免费一级毛片 | 欧美日韩免费播放一区二区 | 中文字幕日韩一区二区 | 欧美成人一区二区 | 亚洲欧美成人在线 | 狠狠色狠狠色综合 | 手机看片日韩日韩国产在线看 | 99视频有精品视频免费观看 | 国产乱肥老妇精品视频 | 中文欧美一级强 | 成人欧美一区二区三区黑人免费 | 91热国产| 毛片aaa| 成年人在线观看免费 | 韩国一级毛片在线观看 | 在线成人97观看 | 香蕉久久久 | 欧美成人免费tv在线播放 | 她也啪97在线视频 | 成人a视频在线观看 | 国产下药迷倒白嫩丰满美女j8 | 天干天干天啪啪夜爽爽色 | 神马三级我不卡 | 亚洲天堂免费 | 伊人国产在线视频 |