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