日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

WinCE CEDDK之DMA相关函数

發布時間:2025/3/8 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 WinCE CEDDK之DMA相关函数 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

CEDDK提供了DMA的相關函數,在CEDDK/DDK_DMA/ddk_dma.c中定義。實際上里面最有用的就兩個函數,HalAllocateCommonBuffer(..)和HalFreeCommonBuffer(..)分別用于為DMA申請和釋放

  首先介紹一下會用到的DMA適配器結構,在ceddk.h中定義,如下:

typedef struct _DMA_ADAPTER_OBJECT_

{

  USHORT ObjectSize;        //該結構的大小

  INTERFACE_TYPE InterfaceType;  //接口類型,一般用做DMA時設置為Internal

  ULONG BusNumber;         //一般設置為0

} DMA_ADAPTER_OBJECT, *PDMA_ADAPTER_OBJECT;

  下面介紹一下函數:

  1. DMA內存分配函數:

  PVOID HalAllocateCommonBuffer(PDMA_ADAPTER_OBJECT DmaAdapter, ULONG Length, PPHYSICAL_ADDRESS LogicalAddress, BOOLEAN CacheEnabled)

  DmaAdapter:    DMA適配器結構指針

  Length:        要分配的內存的大小

  LogicalAddress:  分配成功后,內存的物理起始地址

  CacheEnabled:  是否使用Cache

  實際上該函數通過調用AllocPhysMem函數來分配一段物理地址連續的內存,這段內存默認是64KB字節對齊的,這完全可以理解,DMA操作的物理內存必須是連續的。該函數調用成功以后,返回值是虛擬地址,可以在

  2. DMA內存釋放函數:

  VOID HalFreeCommonBuffer(PDMA_ADAPTER_OBJECT DmaAdapter, ULONG Length, PHYSICAL_ADDRESS LogicalAddress, PVOID VirtualAddress, BOOLEAN CacheEnabled)

  DmaAdapter:    DMA適配器結構指針

  Length:        內存的大小

  LogicalAddress:  內存的物理起始地址

  VirtualAddress:  內存的虛擬地址

  CacheEnabled:   是否使用Cache

  該函數通過調用FreePhysMem函數來完成內存的釋放,所以在使用該函數的時候,只有函數的第四個參數是必須的,也就是內存的虛擬地址,其他的都可以忽略。

  下面給個使用上面兩個函數的例子:

DMA_ADAPTER_OBJECTdmaAdapter;

//初始化DMA適配器

dmaAdapter.ObjectSize=sizeof(dmaAdapter);

dmaAdapter.InterfaceType=Internal;

dmaAdapter.BusNumber=0;

//分配DMA內存

m_pDMABuf=(PBYTE)HalAllocateCommonBuffer(&dmaAdapter,256*1024,&m_pDMABufPhys,FALSE);

//將物理地址賦值給DMA控制器

vm_pDMAreg->DST=(int)m_pDMABufPhys.LowPart;

  

...

  

//釋放DMA內存

if(m_pDMABuf!=NULL)

{

  HalFreeCommonBuffer(NULL,0,0,m_pDMABuffer,FALSE);

  m_pDMABuf=NULL;

}

  在ddk_dma.c中,還可以看到其他很多DMA相關的

  一般來說,DMA驅動會配合其他設備驅動來完成數據傳輸,所以很少會被單獨作為一個設備來使用,大多數情況我們開發設備驅動時需要用到DMA的時候,會用到上面兩個函數來申請和釋放內存。

本文來自CSDN博客,轉載請標明出處:http://blog.csdn.net/xinchow/archive/2010/04/12/5477723.aspx

轉載于:https://www.cnblogs.com/gmh915/archive/2010/06/12/1945412.html

總結

以上是生活随笔為你收集整理的WinCE CEDDK之DMA相关函数的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。