Rss & SiteMap

曙海教育集團(tuán)論壇 http://www.bjzhda.cn

曙海教育集團(tuán)論壇
共1 條記錄, 每頁(yè)顯示 10 條, 頁(yè)簽: [1]
[瀏覽完整版]

標(biāo)題:wince下usb驅(qū)動(dòng)攻堅(jiān)戰(zhàn)

1樓
wangxinxin 發(fā)表于:2010-11-26 14:08:26
首先給出一個(gè)ED和TD的鏈表結(jié)構(gòu)圖,相信有了這個(gè)圖對(duì)代碼的理解就容易多了!
HeadPtr-->ED-->ED-->ED-->ED
ED-->TD-->TD-->TD...

    根據(jù)OHCI spec:每個(gè)ED(Endpoint Descriptor)描述USB設(shè)備的一個(gè)端點(diǎn)的所有數(shù)據(jù)傳輸,所有的ED被連接在一起;而TD(Transfer Descriptor)描述的才是最終要在USB總線上傳輸?shù)臄?shù)據(jù)包,屬于同一個(gè)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。可讀取注冊(cè)表,也可以通過(guò)程序自配
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()過(guò)程
1)CDeviceGlobal::Initialize()[usb/hcd/common/cdevice.cpp]
加載usbd.dll,并調(diào)用其中的HcdAttach()[usb/usbd/usbddrv.cpp]用hcddrv.cpp中的gc_HcdFuncs來(lái)設(shè)置usbd層的功能函數(shù)[pHcd->pHcdFuncs]
2)CHW::Initialize()[usb/hcd/ohcd2/chw.cpp]
初始化硬件,控制器寄存器,并創(chuàng)建線程用于處理HC的IST,并調(diào)用SignalCheckForDoneTransfer()來(lái)偵聽(tīng)傳輸?shù)耐瓿?br/>3)CHCCArea::Initialize()[usb/hcd/ohcd2/cpipe.cpp]
初始化CPipe的靜態(tài)變量,建立一個(gè)禎鏈表的空調(diào)度,同時(shí)建立中斷Queue Head樹(shù),創(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初始化時(shí)初始化其成員變量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;
 
故此:傳輸過(guò)程由HC根據(jù)各ED值來(lái)讀寫指定內(nèi)存,具體數(shù)據(jù)在各ED下的TDS鏈表中的各TD中,過(guò)程由HcControl和HcCommandStatus寄存器的各相應(yīng)位來(lái)控制。
共1 條記錄, 每頁(yè)顯示 10 條, 頁(yè)簽: [1]

Copyright © 2000 - 2009 曙海教育集團(tuán)
Powered By 曙海教育集團(tuán) Version 2.2
Processed in .01563 s, 2 queries.
主站蜘蛛池模板: 精品久久一区二区三区| avidolzhd| 色多多在线观看| 日本免费一区二区三区最新vr| 国产精品一区二区久久国产| 亚洲欧洲日产国码无码久久99| 99久久人妻无码精品系列蜜桃| 漂亮华裔美眉跪着吃大洋全集| 天天做天天爱夜夜爽毛片毛片| 人碰人碰人成人免费视频| hdmaturetube熟女xx视频韩国 | 欧美老人巨大xxxx做受视频| 一区二区三区视频在线观看| 四虎影院国产精品| 成人免费无码大片a毛片软件 | 国产日韩欧美视频二区| 日韩精品一区二区三区中文版 | 69pao精品视频在线观看| 亚洲欧美一区二区三区日产| 国产精品国产三级专区第1集| 最近更新2019中文字幕8| 西西人体444rt高清大胆| 三级黄色毛片网站| 亚洲欧美日韩人成在线播放| 国产男女猛烈无遮挡免费网站 | 欧美换爱交换乱理伦片老| 手机在线视频你懂的| 91丨九色丨蝌蚪3p| 日本最新免费二区三区| 国产一区二区高清| 一级毛片免费在线观看网站| 男人影院天堂网址| 国产精自产拍久久久久久| 亚洲va中文字幕无码久久| 青娱极品盛宴国产一区| 成人福利小视频| 人妻尝试又大又粗久久| 16668开场直播| 日本爆乳片手机在线播放| 又粗又硬又大又爽免费观看| 99精品无人区乱码在线观看|