毛片网站在线看_天堂俺去俺来也www久久婷婷_日韩av免费网站_18性欧美xxxⅹ性满足_一区二区三区韩国免费中文网站 _性xx色xx综合久久久xx_999亚洲国产精

Rss & SiteMap

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

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

標(biāo)題:WINCE驅(qū)動(dòng)開發(fā)之DMA的使用

1樓
wangxinxin 發(fā)表于:2010-11-26 9:22:53

以下是MSDN中的說法:

The Windows CE NDIS implementation does not support direct memory access (DMA). Do not use the NdisSetupDmaTransfer, NdisCompleteDmaTransfer, NdisMRegisterDmaChannel, NdisMDeregisterDmaChannel, NdisMAllocateMapRegisters, NdisMFreeMapRegisters, NdisMReadDmaCounter, and NdisGetSharedDataAlignment functions. 

Use the NdisMAllocateSharedMemory and NdisMFreeSharedMemory functions for PCI bus master DMA transfers. 


具體如何實(shí)現(xiàn)DMA呢?

在microsoft windows CE device driver kit中有一節(jié)是:Implementing DMA for NDIS Miniport Drivers 
專門提到了這個(gè)問題,當(dāng)前ce還沒有自己的DMA機(jī)制,然而開發(fā)人員可以在他們自己的小端口卡驅(qū)動(dòng)程序中實(shí)現(xiàn)相同的功能,但是寫的太簡單了

Implementing DMA for NDIS Miniport Drivers
DMA is important for efficient networking because it enables the layers in 
the networking architecture to share data without first copying that data

two categories of DMA: slave DMA and busmaster DMAB
 
Slave DMA
Slave DMA is appropriate for OEMs because it requires a block of memory that 
is pre-allocated in the device memory map of the Windows CE–based platform. 
Miniport drivers can map that block of physical memory to the driver’virtual
memory space, and then use the VirtualAlloc and VirtualCopy functions to move 
data in and out of that space
 
busmaster DMA 
To receive data, the driver allocates a shared memory block, transfers the 
data to buffers within that block, and uses NDIS functions to indicate that a 
packet has arrived. To send data, the driver uses the LockPages and 
UnlockPages functions to map the virtual memory to device memory, informs the 
NIC of the addresses of the data, and instructs the NIC to send the data. 
This method can be faster for larger data block sizes.

后來發(fā)MAIL給一位曾經(jīng)遇到此問題的朋友,回復(fù)如下:

事實(shí)上在使用DMA是的關(guān)鍵是得到一個(gè)連續(xù)的物理地址空間,然后將該空間的物理地址放入DMA控制器的源地址或者目的地址寄存器中(根據(jù)你使用DMA的方向決定);
然后等待DMA中斷;
由于DMA使用的是物理地址但是在wince中只能使用虛擬地址,所以在DMA中斷產(chǎn)生之后如需分析數(shù)據(jù)請(qǐng)使用虛擬地址;
特別提示參考一下的文章:
 DMA的使用
1、 芯片DMA的使用要點(diǎn):
AK3224芯片的DMA使用中,RAM的地址作為DMA傳輸?shù)哪繕?biāo)地址、源地址,必須要4字節(jié)對(duì)齊。而且DMA的操作長度以內(nèi)的RAM地址,必須連續(xù)。
不過在使用中發(fā)現(xiàn):Nandflash驅(qū)動(dòng)中RAM地址作為目標(biāo)地址時(shí),只需要2字節(jié)對(duì)齊。RAM地址作為源地址可不需對(duì)齊。(其他情況需要逐一驗(yàn)證)
2、 wince中的DMA使用:
根據(jù)DMA一次操作的RAM地址必須連續(xù)的特性,在驅(qū)動(dòng)DMA使用時(shí),我們需要確保虛擬地址映射的物理地址是連續(xù)的。有3個(gè)途徑:
1:數(shù)據(jù)區(qū)地址是由應(yīng)用層或者其他進(jìn)程、線程傳入的,驅(qū)動(dòng)并不知道其虛擬地址對(duì)應(yīng)的物理地址是否一直連續(xù)。
由于wince的內(nèi)存申請(qǐng),是以4K字節(jié)為一個(gè)頁,一段數(shù)據(jù)的內(nèi)存申請(qǐng)可能跨越多個(gè)頁。因此,只要數(shù)據(jù)區(qū)長度大于1字節(jié),就有可能其物理地址是跨越的、不連續(xù)的。為了確保DMA操作,我們必須查詢這段數(shù)據(jù)區(qū)在RAM上的物理分布。
首先,得到數(shù)據(jù)區(qū)所在的虛擬頁: VirPageStart = (ULONG)pSourceBuffer & 0xFFFFF000;
其次,得到數(shù)據(jù)區(qū)在頁內(nèi)的偏移地址 :offset = (ULONG)pSourceBuffer & 0x0FFF;
計(jì)算數(shù)據(jù)區(qū)是否跨越頁段
if(offset + NumberOfBytes > 4096)
PageSize = WCE_UNIFORM_SIZE - offset;       //整個(gè)數(shù)據(jù)跨越此頁,則DMA傳輸需要分多個(gè)部分,一次一個(gè)頁段的傳
else
PageSize = NumberOfBytes;                //數(shù)據(jù)區(qū)沒有跨越頁
由得到的頁地址,查詢映射的物理地址。
if(!LockPages((LPVOID)VirPageStart, 4096, &TransAddr, LOCKFLAG_READ))
{
        //異常處理
}
UnlockPages((LPVOID)VirPageStart, 4096);
得到了映射的物理地址TransAddr后,根據(jù)RAM是目標(biāo)地址還是源地址,做進(jìn)一步的處理。
假設(shè)一個(gè)數(shù)據(jù)區(qū)作為DMA源地址,大小為9K。在虛擬地址首頁的偏移為4K。那么它必然跨越3個(gè)頁段。
首先查詢第一頁的物理地址發(fā)送,第一個(gè)頁的2K數(shù)據(jù)。然后查詢第二頁的物理地址,發(fā)送4K數(shù)據(jù)。最后查詢第三頁的物理地址,發(fā)送3K數(shù)據(jù)。

2:數(shù)據(jù)區(qū)的申請(qǐng)可以使用AllocPhysMem函數(shù)申請(qǐng)。
LPVOID AllocPhysMem(
DWORD cbSize,                 參數(shù)1:數(shù)據(jù)區(qū)大小
DWORD fdwProtect,             參數(shù)2:保護(hù)標(biāo)記
DWORD dwAlignmentMask,         參數(shù)3:0(default system)
DWORD dwFlags,                參數(shù)4:0(Reserved for future use)
PULONG pPhysicalAddress         參數(shù)5:得到數(shù)據(jù)區(qū)對(duì)應(yīng)的物理地址
);
AllocPhysMem函數(shù)返回值為指向申請(qǐng)后的虛擬地址指針。
如:pSerialHead->RxBufferInfo.RxCharBuffer =            //alloc physical memory
AllocPhysMem(pSerialHead->RxBufferInfo.Length + 16, PAGE_READWRITE, 0, 0, &RX_PhyAddr);
由于此函數(shù)必定申請(qǐng)到一片連續(xù)的物理地址,因此pSerialHead->RxBufferInfo.RxCharBuffer的使用不再需要查詢是否跨越多個(gè)頁段。
但是,AllocPhysMem函數(shù)申請(qǐng)的物理地址可能會(huì)跨越多個(gè)RAM CHIP。因此,在使用1片以上RAM芯片的系統(tǒng)中,依然需要查詢是否跨越CHIP。
       AllocPhysMem函數(shù)使用后,需要使用FreePhysMem函數(shù)進(jìn)行釋放。
3:數(shù)據(jù)區(qū)可以在系統(tǒng)config.bib文件中,預(yù)先定義好一片連續(xù)、不跨越CHIP的RAM空間。
如下,系統(tǒng)保留了虛擬地址0x80024000開始,大小為0x3000的一段RAM。
SER_DMA                80024000 00003000 RESERVED
那么驅(qū)動(dòng)DMA使用中,不再需要對(duì)這段內(nèi)存,進(jìn)行任何的查詢動(dòng)作。我們只需要在進(jìn)程空間中做映射即可。
pSerialHead->RxBufferInfo.RxCharBuffer = VirtualAlloc(0, RX_PhySize, MEM_RESERVE, PAGE_NOACCESS);
    if (pSerialHead->RxBufferInfo.RxCharBuffer == NULL)
    {
        DEBUGMSG(ZONE_ERROR, (TEXT("COM_Init:: VirtualAlloc failed!\r\n")));
        return(NULL);
    }
    else
    {
        if (!VirtualCopy((PVOID)pSerialHead->RxBufferInfo.RxCharBuffer, (PVOID)(RX_PhyAddr),
            RX_PhySize, (PAGE_READWRITE | PAGE_NOCACHE)))
        {
           DEBUGMSG(ZONE_ERROR, (TEXT("COM_Init:: VirtualCopy failed!\r\n")));
           return(NULL);
        }
    }
上面這段程序中,先使用函數(shù)VirtualAlloc,在進(jìn)程空間中申請(qǐng)一段保留的虛擬地址空間。然后使用VirtualCopy,把需要使用的物理地址空間,映射到已經(jīng)申請(qǐng)好的虛擬地址上。使用完畢,必須使用函數(shù)VirtualFree進(jìn)行釋放。
LPVOID VirtualAlloc(
LPVOID lpAddress,                  
DWORD dwSize,
DWORD flAllocationType,
DWORD flProtect
);
BOOL VirtualCopy(
LPVOID lpvDest,
LPVOID lpvSrc,
DWORD cbSize,
DWORD fdwProtect
);
BOOL VirtualFree(
LPVOID lpAddress,
DWORD dwSize,
DWORD dwFreeType
);

共1 條記錄, 每頁顯示 10 條, 頁簽: [1]

Copyright © 2000 - 2009 曙海教育集團(tuán)
Powered By 曙海教育集團(tuán) Version 2.2
Processed in .02344 s, 2 queries.
毛片网站在线看_天堂俺去俺来也www久久婷婷_日韩av免费网站_18性欧美xxxⅹ性满足_一区二区三区韩国免费中文网站 _性xx色xx综合久久久xx_999亚洲国产精
国产乱码字幕精品高清av| 欧美成人性战久久| 91福利区一区二区三区| www日韩大片| 天堂久久一区二区三区| 91福利社在线观看| 亚洲欧洲日产国码二区| 国产激情视频一区二区在线观看| 91精品国产综合久久福利软件| 夜夜爽夜夜爽精品视频| 99国产精品国产精品久久| 中文字幕成人在线观看| 国产精品一区二区黑丝| 精品国产一区二区精华| 久久精品国产精品青草| 欧美一卡二卡在线| 日本va欧美va欧美va精品| 欧洲精品在线观看| 亚洲欧美日韩国产另类专区| 色婷婷综合久久久久中文| 国产精品福利在线播放| 丁香婷婷综合激情五月色| 久久久精品日韩欧美| 国产激情偷乱视频一区二区三区| 久久九九全国免费| 成人av综合一区| 中文字幕av资源一区| 99久久99久久精品国产片果冻| 国产精品理论片在线观看| 波多野结衣在线aⅴ中文字幕不卡 波多野结衣在线一区 | 日韩一级完整毛片| 久久精品99国产精品| 精品少妇一区二区三区日产乱码 | 中文字幕在线免费不卡| 99久久免费精品| 亚洲一区二区综合| 欧美美女喷水视频| 精品一区二区三区在线播放视频| 欧美—级在线免费片| 成人高清视频在线观看| 夜夜精品视频一区二区 | 国产aⅴ精品一区二区三区色成熟| 欧美激情艳妇裸体舞| 99精品久久久久久| 午夜一区二区三区在线观看| 在线不卡免费欧美| 国产精品一区在线观看乱码 | 一区二区三区视频在线观看| 欧美挠脚心视频网站| 精品一区二区在线视频| 国产精品乱码一区二区三区软件 | 91成人网在线| 理论电影国产精品| 中文字幕一区av| 欧美三级电影一区| 国产呦萝稀缺另类资源| 亚洲精品国产无天堂网2021 | 国产一区二区三区在线观看免费视频 | 97精品电影院| 亚洲亚洲精品在线观看| 欧美xxxxx牲另类人与| 99久久精品免费看国产| 日本欧美肥老太交大片| 国产精品成人一区二区艾草| 日韩一区二区视频| www.亚洲在线| 黄色资源网久久资源365| 亚洲黄色在线视频| 久久久噜噜噜久噜久久综合| 欧美日精品一区视频| 风流少妇一区二区| 免费观看久久久4p| 1区2区3区精品视频| 日韩一区二区三区免费观看| 91麻豆免费看片| 国产精品白丝av| 午夜欧美2019年伦理| 国产精品无码永久免费888| 在线综合视频播放| 91美女在线看| 丁香激情综合国产| 美日韩黄色大片| 亚洲观看高清完整版在线观看| 中日韩av电影| 欧美日韩成人一区二区| 91麻豆成人久久精品二区三区| 国产美女精品人人做人人爽| 日本v片在线高清不卡在线观看| 亚洲日韩欧美一区二区在线| 精品国产凹凸成av人网站| 欧美日韩国产综合久久| 色视频一区二区| 成人免费视频网站在线观看| 国内精品伊人久久久久影院对白| 亚洲国产三级在线| 亚洲欧美视频在线观看| 国产精品少妇自拍| 国产蜜臀av在线一区二区三区| 精品国产凹凸成av人网站| 日韩欧美一区在线| 欧美久久久久久久久| 欧美日韩视频一区二区| 欧美日韩一区二区三区高清| 色噜噜夜夜夜综合网| 91久久精品日日躁夜夜躁欧美| 91麻豆精品秘密| 91麻豆免费观看| 91久久精品一区二区| 91久久精品一区二区| 色系网站成人免费| 色哟哟一区二区| 欧洲一区二区三区免费视频| 欧美综合久久久| 欧美精品一卡二卡| 日韩一区二区高清| 日韩视频免费观看高清完整版在线观看 | 制服丝袜中文字幕一区| 欧美美女一区二区| 日韩一区二区影院| 久久老女人爱爱| 国产精品毛片a∨一区二区三区| 国产精品久久午夜夜伦鲁鲁| 亚洲欧洲日韩一区二区三区| 亚洲精品欧美专区| 亚洲成av人片观看| 三级一区在线视频先锋| 免费观看一级欧美片| 精品一区二区影视| 成人亚洲精品久久久久软件| 一本一道久久a久久精品| 欧美色手机在线观看| 91精品国产一区二区三区| 久久久亚洲综合| 成人欧美一区二区三区白人 | 一区二区三区资源| 天天综合天天做天天综合| 免费成人美女在线观看| 国产一区二区三区国产| 97se狠狠狠综合亚洲狠狠| 欧美日韩成人综合在线一区二区| 日韩免费电影网站| 国产精品欧美一区二区三区| 自拍偷在线精品自拍偷无码专区| 午夜av区久久| 国产精品一区在线观看乱码| 色婷婷国产精品| 欧美岛国在线观看| 中文字幕一区二区三区不卡在线| 日韩在线a电影| 国产乱码精品1区2区3区| 色婷婷综合久久久| 日韩欧美一级二级| 国产精品二区一区二区aⅴ污介绍| 一区二区三区四区视频精品免费 | 欧美精品精品一区| 久久女同互慰一区二区三区| 一区二区三区小说| 国内精品国产成人国产三级粉色 | 色婷婷av一区| 久久午夜色播影院免费高清| 亚洲精品v日韩精品| 久久av资源网| 色婷婷av一区二区三区gif| 久久婷婷一区二区三区| 一区二区视频在线| 国产传媒一区在线| 欧美高清你懂得| 最新高清无码专区| 久久精品国产秦先生| 欧美亚洲国产一区二区三区| 久久综合国产精品| 午夜私人影院久久久久| 99天天综合性| 国产欧美日韩在线视频| 免费看欧美女人艹b| 欧美天堂一区二区三区| 中文字幕久久午夜不卡| 免费人成黄页网站在线一区二区| 色综合夜色一区| 国产午夜精品美女毛片视频| 五月婷婷欧美视频| 色婷婷av久久久久久久| 国产精品久久久久久久久免费樱桃| 日韩国产欧美三级| 欧美在线视频日韩| 亚洲特黄一级片| 成人精品小蝌蚪| 国产亚洲一区字幕| 蜜臀国产一区二区三区在线播放| 在线亚洲精品福利网址导航| 国产精品久久久爽爽爽麻豆色哟哟| 韩国女主播一区二区三区| 91精品国产91热久久久做人人| 亚洲大片免费看| 91国模大尺度私拍在线视频| 1024成人网| 99免费精品在线观看| 成人欧美一区二区三区白人 | 精品毛片乱码1区2区3区| 日韩 欧美一区二区三区|