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


曙海教育集團論壇Win CE 專區WinCE系統定制與驅動開發 → wince下usb驅動攻堅戰


  共有6785人關注過本帖樹形打印

主題:wince下usb驅動攻堅戰

美女呀,離線,留言給我吧!
wangxinxin
  1樓 個性首頁 | 博客 | 信息 | 搜索 | 郵箱 | 主頁 | UC


加好友 發短信
等級:青蜂俠 帖子:1393 積分:14038 威望:0 精華:0 注冊:2010-11-12 11:08:23
wince下usb驅動攻堅戰  發帖心情 Post By:2010-11-26 14:08:26

首先給出一個ED和TD的鏈表結構圖,相信有了這個圖對代碼的理解就容易多了!
HeadPtr-->ED-->ED-->ED-->ED
ED-->TD-->TD-->TD...

    根據OHCI spec:每個ED(Endpoint Descriptor)描述USB設備的一個端點的所有數據傳輸,所有的ED被連接在一起;而TD(Transfer Descriptor)描述的才是最終要在USB總線上傳輸的數據包,屬于同一個USB設備端點的TD被連接在一起,并掛在相應的ED上。
1)ohcd.c
該文件在platform下,可替代wince自帶的system.c文件(在public/common/oak/drivers/usb/hcd/ohc/下)。該文件中的函數被hcddrv.c文件中的HCD_流形式接口函數調用。
2)hcddrv.cpp
該文件在public/common/oak/drivers/usb/hcd/common下面,文件中的具體設置函數:
HcdMdd_CreateMemoryObject
HcdMdd_CreateHcdObject
HcdMdd_DestroyMemoryObject
HcdMdd_DestroyHcdObject
HcdMdd_PowerOn
HcdMdd_PowerDown
HcdMdd_SetCapability
又被ohcd.c中的函數調用
CUHcd-->CHW-->CHcd(繼承關系,CUHcd的實例被創建)
 
初始化函數調用流程
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,并調用其中的HcdAttach()[usb/usbd/usbddrv.cpp]用hcddrv.cpp中的gc_HcdFuncs來設置usbd層的功能函數[pHcd->pHcdFuncs]
2)CHW::Initialize()[usb/hcd/ohcd2/chw.cpp]
初始化硬件,控制器寄存器,并創建線程用于處理HC的IST,并調用SignalCheckForDoneTransfer()來偵聽傳輸的完成
3)CHCCArea::Initialize()[usb/hcd/ohcd2/cpipe.cpp]
初始化CPipe的靜態變量,建立一個禎鏈表的空調度,同時建立中斷Queue Head樹,創建線程用于處理傳輸完成。
 
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最終都要調用CPipe::IssueTransfer()[cpipe.cpp]
1)new STransfer并配置
2)拷貝client buffer到out transfer
3)AddTransfer:設置TDs鏈表并加到相應的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根據各ED值來讀寫指定內存,具體數據在各ED下的TDS鏈表中的各TD中,過程由HcControl和HcCommandStatus寄存器的各相應位來控制。

支持(0中立(0反對(0單帖管理 | 引用 | 回復 回到頂部

返回版面帖子列表

wince下usb驅動攻堅戰








簽名
主站蜘蛛池模板: 欧美成人久久 | 国产理论视频在线观看 | 特级做a爰片毛片免费看一区 | 亚洲最大情网站在线观看 | 欧美视频在线网站 | 国产精品亚洲综合网站 | 国产精品视频免费 | 欧美一区二区三区精品国产 | 九九精品免费观看在线 | 欧美三级在线看 | 手机看片神马午夜片 | 在线中文 | 99精品福利视频在线一区 | 在线观看国产精成人品 | vvvv99日韩精品亚洲 | 免费一级做a爰片久久毛片 免费一级做a爰片性色毛片 | 国产一区二区三区欧美精品 | 欧美成人精品手机在线观看 | 成人免费在线网站 | 亚洲精品久久久久午夜三 | 国产精品一区二区av | 亚洲精品字幕一区二区三区 | a一级毛片录像带 录像片 | 久久女同互慰一区二区三区 | 毛片在线免费视频 | 国产一级做a爱免费观看 | 中文字幕在线一区二区三区 | 国产伦精品一区二区三区免费 | 国产成人精品日本亚洲语音1 | 欧美人成在线观看网站高清 | 成人网18免费视频 | 国产男女爽爽爽爽爽视频 | 99久久视频 | 久久久国产精品视频 | 未成人做爰视频www 窝窝午夜精品一区二区 | 亚洲一级毛片欧美一级说乱 | 亚洲第一成人天堂第一 | 亚洲成年www | av国产精品 | 国产精品成人不卡在线观看 | 五月激情丁香婷婷综合第九 |