RK系列开发板音频驱动适配指南(二)
背景:
上一篇文章RK系列開發(fā)板音頻驅(qū)動(dòng)適配指南-DAI模塊適配中已經(jīng)闡述音頻驅(qū)動(dòng)適配的DAI模塊適配步驟以及核心代碼的展示,本次主要介紹音頻驅(qū)動(dòng)適配中的DMA模塊適配。
RK系列開發(fā)板 DMA模塊適配:
DMA是一種無需要CPU的參與就可以讓外設(shè)與系統(tǒng)內(nèi)存之間進(jìn)行雙向數(shù)據(jù)傳輸?shù)挠布C(jī)制,其主要作用是實(shí)現(xiàn)音頻數(shù)據(jù)在SoC設(shè)備與內(nèi)存之間的傳輸,并對(duì)循環(huán)緩存中的數(shù)據(jù)進(jìn)行管理。ADM定義的DMA接口包括:DMA設(shè)備初始化、內(nèi)存的分配與釋放、DMA通道的申請(qǐng)與配置、DMA預(yù)處理、暫停與恢復(fù)、音頻數(shù)據(jù)的提交與懸掛和循環(huán)緩存管理共11個(gè)接口。
?在適配器模塊中實(shí)例化ADM定義的DAI兩個(gè)結(jié)構(gòu)體:PlatformData(DMA數(shù)據(jù)集)和AudioDmaOps(DMA操作集);在操作集模塊中實(shí)現(xiàn)DMA的業(yè)務(wù)接口函數(shù);配置DMA設(shè)備節(jié)點(diǎn)公有參數(shù),若有需要,則可配置DMA相關(guān)寄存器信息等私有參數(shù)。
RK系列開發(fā)板?DMA模塊關(guān)系
?RK系列開發(fā)板_dma-classes.puml
- RK系列開發(fā)板dmaadapter
- 實(shí)例化DMA操作集:g_dmaDeviceOps,核心成員字段值定義如下:
- DmaBufAlloc = RK系列開發(fā)板DmaBufAlloc;
- DmaBufFree = RK系列開發(fā)板DmaBufFree;
- DmaRequestChannel = RK系列開發(fā)板DmaRequestChannel;
- DmaConfigChannel = RK系列開發(fā)板DmaConfigChannel;
- DmaPrep = RK系列開發(fā)板DmaPrep;
- DmaSubmit = RK系列開發(fā)板DmaSubmit;
- DmaPending = RK系列開發(fā)板DmaPending;
- DmaPause = RK系列開發(fā)板DmaPause;
- DmaResume = RK系列開發(fā)板DmaResume;
- DmaPointer = RK系列開發(fā)板PcmPointer。
- 實(shí)例化DMA數(shù)據(jù)集:g_platformData,核心成員字段值定義如下:
- PlatformInit= RK系列開發(fā)板DmaDeviceInit;
- ops = &g_dmaDeviceOps,DMA操作集地址。
- 實(shí)例化HdfDriverEntry類型的DAI驅(qū)動(dòng)實(shí)體:g_platformDriverEntry,核心成員字段值定義如下:
- moduleVersion = 1,模塊版本號(hào);
- moduleName = "DMA_RK系列開發(fā)板",模塊名;
- Bind = DmaDriverBind;
- Init = DmaDriverInit;
- Release = DmaDriverRelease。
- DMA驅(qū)動(dòng)注冊(cè)到鴻蒙系統(tǒng):HDFINIT(gplatformDriverEntry)。
- 實(shí)現(xiàn)以下函數(shù):
- DmaDriverInit,DMA驅(qū)動(dòng)初始化函數(shù);
- DmaDriverBind,DMA驅(qū)動(dòng)綁定函數(shù);
- DmaDriverRelease,DMA驅(qū)動(dòng)釋放函數(shù)。
- RK系列開發(fā)板dmaops
- 實(shí)現(xiàn)以下函數(shù):
- RK系列開發(fā)板DmaDeviceInit,初始化DMA設(shè)備函數(shù);
- RK系列開發(fā)板DmaBufAlloc,分配數(shù)據(jù)內(nèi)存函數(shù);
- RK系列開發(fā)板DmaBufFree,釋放數(shù)據(jù)內(nèi)存函數(shù);
- RK系列開發(fā)板DmaRequestChannel,申請(qǐng)DMA通道函數(shù);
- RK系列開發(fā)板DmaConfigChannel,配置DMA通道函數(shù);
- RK系列開發(fā)板DmaPrep,DMA預(yù)處理函數(shù);
- RK系列開發(fā)板DmaPause,暫停函數(shù);
- RK系列開發(fā)板DmaResume,恢復(fù)函數(shù);
- RK系列開發(fā)板DmaSubmit,提交數(shù)據(jù)函數(shù);
- RK系列開發(fā)板DmaPending,懸掛數(shù)據(jù)函數(shù);
- RK系列開發(fā)板PcmPointer,管理數(shù)據(jù)緩存函數(shù)。
總結(jié):
本文詳細(xì)介紹DMA的適配步驟以及核心代碼,相信讀者會(huì)對(duì)音頻適配會(huì)有一個(gè)更清楚深入的了解,之后的文章中,會(huì)逐步更新音頻驅(qū)動(dòng)的Codec模塊適配、Audio HCS配置等。
總結(jié)
以上是生活随笔為你收集整理的RK系列开发板音频驱动适配指南(二)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 对垒以太网10BASE-T1S,CAN
- 下一篇: 三月模拟题——炉石传说