2015-04-14 55 views
1

我是open source project that relies on the DMA controller to do PWM on Raspberry Pi IO pins的維護者。這項技術需要使用一個DMA通道。我們在歷史上對DMA通道0進行了硬編碼,但得到了多個錯誤報告,指出X在同一時間運行時程序無法正常工作(錯誤報告:herehere,etc)。如何在用戶空間分配DMA通道?

我們在Raspberry PI固件中找到了Mailbox API,它包含一個管理DMA通道等共享資源的API並找出哪些可用。

Pattrick Hueper gave this a try但它仍然報告通道0可用。也許X不會使用這個API來發布它正在使用的頻道。

我發現dma_request_channel()用於內核空間程序,但在用戶空間中不可用。

在計算機上成爲好公民並且避免與其他工具衝突時,從用戶空間使用DMA通道的正確方法是什麼?

回答

1

我已經能夠確認以下內容:

您包括:

#include <mach/dma.h> 

... 
int rc = bcm_dma_chan_alloc(
    BCM_DMA_FEATURE_NORMAL, /* Features found in mach/dma.h */ 
    &dma_base, 
    &dma_irq 
); 

RC返回負數,如果發生錯誤。當rc> = 0時,返回的是dma頻道 。

void __iomem *dma_base; /* returned */ 
int dma_irq;   /* returned */ 

要釋放:

bcm_dma_chan_free(dma_chan); 

到目前爲止,它已經回到了我DMA通道2:

[ 99.372778] chan = rc = 2, dma_base=f3007200, IRQ=77 
[ 99.372790] Returned DMA channel 2. 
[ 103.971670] Releasing DMA Channel 2 

和4(當我離開DMA 2未發行)。