freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

基于tic6416dsk的tlv320aic23音頻編解碼芯片驅(qū)動(dòng)的一般實(shí)現(xiàn)-資料下載頁

2024-11-17 21:45本頁面

【導(dǎo)讀】TLV320AIC23立體聲音頻編解碼芯片進(jìn)行音頻信號(hào)的輸入輸出。了音頻信號(hào)的采集與回放系統(tǒng)。最后,結(jié)合CCS開發(fā)工具闡述了編解碼芯片驅(qū)動(dòng)。的軟件設(shè)計(jì),并給出了具體代碼和實(shí)現(xiàn)方法。

  

【正文】 通道緩沖串口 (McBSP)以及其他一些外圍設(shè)備等,幫助開發(fā)人員快速開發(fā)外設(shè)管理程序 。 與 McBSP 的接口 軟件 設(shè)計(jì) 的初始化配置 音頻編解碼芯片 AIC23 使用兩個(gè)多通道緩沖串口 McBSP 分別作為其控制通道( McBSP1)和數(shù)據(jù)傳輸通道( McBSP2)。編解碼器的控制通道 McBSP1 被用來設(shè)置AIC23 的內(nèi)部控制寄存器 。 AIC23 在開始工作以前,必需進(jìn)行初始化配置以設(shè)置其工作狀態(tài),如音量,采樣率等。其配置參數(shù)如下: AIC23_Params config = { 0x0017, // 0 DSK6416_AIC23_LEFTINVOL 左聲道線路輸入音量 控制 0x0017, // 1 DSK6416_AIC23_RIGHTINVOL 右聲道線路輸入音量控制 0x00d8, // 2 DSK6416_AIC23_LEFTHPVOL 左聲道耳機(jī)音量控制 0x00d8, // 3 DSK6416_AIC23_RIGHTHPVOL 右聲道耳機(jī)音量控制 0x0011, // 4 DSK6416_AIC23_ANAPATH 模擬音頻路徑控制 0x0000, // 5 DSK6416_AIC23_DIGPATH 數(shù)字音頻路徑控制 0x0000, // 6 DSK6416_AIC23_POWERDOWN 節(jié)電模式 0x0043, // 7 DSK6416_AIC23_DIGIF 數(shù)字音頻接口形式 0x0001, // 8 DSK6416_AIC23_SAMPLERATE 采樣率控制 0x0001 // 9 DSK6416_AIC23_DIGACT 激活數(shù)字接口 }。 這些參數(shù)將通過 McBSP1 寫入到編解碼器 AIC23 的控制寄存器中。 基于 C6416DSK 的音頻編解碼芯片驅(qū)動(dòng)程序開發(fā) 26 多通 道緩沖串口 McBSP 的初始化配置 多通道緩沖串口 McBSP 通過去內(nèi)部的控制寄存器對(duì)其工作狀態(tài)進(jìn)行控制,因此在使用 McBSP 之前,我們要對(duì)其控制寄存器進(jìn)行參數(shù)配置,這些寄存器包括串口控制寄存器( SPCR),接收控制寄存器( RCR),發(fā)送控制寄存器( XCR),采樣率產(chǎn)生寄存器( SRGR),多通道控制寄存器( MCR),管腳控制寄存器( PCR)。 使用 void MCBSP_config(MCBSP_Handle hMcbsp,MCBSP_Config *Config)函數(shù)可對(duì) McBSP 控制寄存器進(jìn)行參數(shù)配置,其中 第二個(gè)參數(shù)為 McBSP 的參數(shù)配置結(jié)構(gòu)體,其形式如下: MCBSP_Config MyConfig = { 0x00012020, /* spcr */ 0x00010140, /* rcr */ 0x00010140, /* xcr */ 0x00000000, /* srgr */ 0x00000000, /* mcr */ 0x00000000, /* rcere0 */ 0x00000000, /* rcere1 */ 0x00000000, /* rcere2 */ 0x00000000, /* rcere3 */ 0x00000000, /* xcere0 */ 0x00000000, /* xcere1 */ 0x00000000, /* xcere2 */ 0x00000000, /* xcere3 */ 0x00000000 /* pcr */ }。 該函數(shù)中的第一個(gè)參數(shù),是一個(gè)表示相應(yīng) McBSP 通道的 HANDLE,它需要在我們對(duì)McBSP 進(jìn)行參數(shù)配置之前,通過函數(shù) MCBSP_Handle MCBSP_open()獲得,對(duì)于McBSP2,該函數(shù)寫為: hMcbsp2 = MCBSP_open(MCBSP_DEV2, MCBSP_OPEN_RESET); 第四章 編解碼芯片驅(qū)動(dòng)的軟件實(shí)現(xiàn) 27 對(duì)于 McBSP1,該函數(shù)寫為: hMcbsp1 = MCBSP_open(MCBSP_PORT1, MCBSP_OPEN_RESET); 在一個(gè) McBSP 通道可以使用之前,我們還需要使用 MCBSP_start()進(jìn)行開始。 的 McBSP 控制程序 多通道緩沖串口 McBSP1經(jīng)過初始化配置以后,便可以由其完成對(duì)音頻編解碼芯片AIC23 的控制參數(shù)配置和初始化。如果 這個(gè)函數(shù)是第一次被調(diào)用,將會(huì)完成對(duì)編解碼器 AIC23 的初始化。 Void AIC23_setParams(AIC23_Params *params) { Int i。 MCBSP_Handle hMcbsp。 /* McBSP1 的參數(shù)配置和初始化 */ hMcbsp = MCBSP_open(MCBSP_PORT1, MCBSP_OPEN_RESET)。 MCBSP_config(hMcbsp, amp。mcbspCfg1)。 MCBSP_start(hMcbsp, MCBSP_XMIT_START | MCBSP_SRGR_START | MCBSP_SRGR_FRAMESYNC, 220)。 /*復(fù)位 AIC23 */ aic23Rset(hMcbsp, AIC23_RESET, 0)。 /* 將參數(shù)寫入每一個(gè)寄存器 */ for (i = 0。 i AIC23_NUMREGS。 i++) { aic23Rset(hMcbsp, i, paramsregs[i])。 } } /*設(shè)置編解碼器中寄存器中的數(shù)值 */ static Void aic23Rset(MCBSP_Handle hMcbsp, Uint16 regnum, Uint16 regval) { regval amp。= 0x1ff。 基于 C6416DSK 的音頻編解碼芯片驅(qū)動(dòng)程序開發(fā) 28 while (!MCBSP_xrdy(hMcbsp))。 /*將 16 位數(shù)據(jù)寫入 McBSP 的數(shù)據(jù)發(fā)送寄存器 DXR*/ MCBSP_write(hMcbsp, (regnum 9) | regval)。 while (MCBSP_xrdy(hMcbsp))。 } 數(shù)據(jù)的 EDMA 傳輸 緩沖區(qū) 在實(shí)現(xiàn)音頻信號(hào)的采集與回放過程中中,我們選擇 使用 EDMA 控制器 的方式 進(jìn)行數(shù)據(jù)傳輸而不需要 CPU 的干涉。 EDMA 將到達(dá) McBSP2 的音頻數(shù)據(jù)送至內(nèi)存中的緩沖區(qū),待 CPU 對(duì)緩沖區(qū) 中的數(shù)據(jù) 進(jìn)行處理后再由 EDMA 將其送回 McBSP2 進(jìn)行發(fā)送。 當(dāng)我們進(jìn)行實(shí)時(shí)的音頻信號(hào)的采集與回放時(shí), 使用單緩沖區(qū) 進(jìn)行數(shù)據(jù)的接收 和發(fā)送是難以實(shí)現(xiàn)的,因?yàn)橄鹊竭_(dá)的數(shù)據(jù)還沒有來得及 處理就會(huì)被后到達(dá)的數(shù)據(jù)所覆蓋 ,因?yàn)殡y以實(shí)現(xiàn)數(shù)據(jù)實(shí)時(shí)的傳輸和處理 。 PingPong 緩沖區(qū)的方法解決了這樣的問題。在這里,我們?cè)O(shè)置如 下 4個(gè)緩沖區(qū) : Int16 gBufferXmtPing[BUFFSIZE] Int16 gBufferXmtPong[BUFFSIZE] Int16 gBufferRcvPing[BUFFSIZE] Int16 gBufferRcvPong[BUFFSIZE] gBufferXmtPing 和 gBufferXmtPong 用于數(shù)據(jù)的發(fā)送而 gBufferRcvPing 和 gBufferRcvPong 用于數(shù)據(jù)的接受。 EDMA 先將到達(dá) McBSP2 的數(shù)據(jù)寫入 BufferRcvPing 同時(shí)將 BufferXmtPing 中的數(shù)據(jù)發(fā)送給 McBSP2,當(dāng)寫入和發(fā)送完 成時(shí), EDMA 再將數(shù)據(jù)寫入 BufferRcvPong 同時(shí)將 BufferXmtPong 中的數(shù)據(jù)發(fā)送,這樣,先前寫入緩沖區(qū) BufferRcvPing 的數(shù)據(jù)就不會(huì)被新的數(shù)據(jù)所覆蓋了。而在Pong 緩沖區(qū)進(jìn)行寫入和發(fā)送時(shí),先前寫入 Ping 緩沖區(qū)的數(shù)據(jù)就有充足的時(shí)間 由第四章 編解 碼芯片驅(qū)動(dòng)的軟件實(shí)現(xiàn) 29 CPU 對(duì)其 進(jìn)行處理,并將其轉(zhuǎn)移至 gBufferXmtPing,當(dāng) Pong 緩沖區(qū)的 EDMA 傳輸完成時(shí),剛剛轉(zhuǎn)移至 gBufferXmtPing 的數(shù)據(jù)將被發(fā)送,而 gBufferRcvPing 又將被重新寫入,如此循 環(huán)往復(fù),使得 EDMA 傳輸和數(shù)據(jù)的處理同時(shí)而連續(xù)的進(jìn)行 。PingPong 緩沖方式的連續(xù)執(zhí)行,總是保持一個(gè)緩沖區(qū)激活用于數(shù)據(jù)傳輸,而另一個(gè)緩沖區(qū)保持靜態(tài)穩(wěn)定的由 CPU處理數(shù)據(jù) , 互不影響。 鏈接傳輸 不同緩沖區(qū)與 McBSP 之間的 EDMA 傳輸要通過不同的 EDMA 通道來完成,這些EDMA 通道的配置參數(shù)是不同的 ,比如源地址和目的地址 。 為了和 PingPong 緩沖區(qū) 相對(duì)應(yīng),我們?cè)O(shè)置如下 4 個(gè)對(duì)應(yīng)的 EDMA 通道: EDMA_Handle hEdmaReloadXmtPing EDMA_Handle hEdmaReloadXmtPong EDMA_Handle hEdmaReloadRcvPing EDMA_Handle hEdmaReloadRcvPong 當(dāng)一個(gè) EDMA 通道的傳輸完成時(shí) 會(huì) 產(chǎn)生一個(gè)中斷,中斷處理器必需載入 McBSP與下一個(gè)緩沖區(qū)之間的 EDMA 通道的配置參數(shù) ,以便開始新的 EDMA 通道的傳輸,而這對(duì)于實(shí)時(shí)的 EDMA 傳輸來說在時(shí)間上是緊迫的 。為了能夠使 EDMA 傳輸連續(xù)的進(jìn)行,我們使用 EDMA 鏈接 傳輸?shù)姆绞健? 我們把將要使用的 各個(gè) EDMA 通道的參數(shù)預(yù)先配置好并且由 EDMA 控制器將這些參數(shù)鏈接起來 。在程序中我們通過函數(shù) void EDMA_link( EDMA_Handle parent, EDMA_Handle child ) 進(jìn)行 EDMA 的鏈接,實(shí)際上, EDMA 控制器將傳輸參數(shù)入口和后一個(gè) EDMA 通道的傳輸參數(shù)地址連接起來,位于鏈接地址的傳輸參數(shù)被讀入 16個(gè)事件參數(shù)空間中的對(duì)應(yīng)事件的傳輸參數(shù)入口,為下一個(gè) EDMA 通道的傳輸做好了準(zhǔn)備。 這樣,當(dāng)一個(gè) EDMA基于 C6416DSK 的音頻編解碼芯片驅(qū)動(dòng)程序開發(fā) 30 通道傳輸完成的時(shí)候,雖然仍然產(chǎn)生一個(gè)中斷,但它只是通知 CPU 可以對(duì)剛剛傳輸?shù)臄?shù)據(jù)進(jìn)行處理而 EDMA 控制器無需再對(duì)新的 EDMA 通道參數(shù)的配置。 在數(shù)據(jù)的接收端: EDMA_link(hEdmaReloadRcvPong,hEdmaReloadRcvPing) EDMA_link(hEdmaReloadRcvPing,hEdmaReloadRcvPong) 在數(shù)據(jù)的發(fā)送端: EDMA_link(hEdmaReloadXmtPong,hEdmaReloadXmtPing) EDMA_link(hEdmaReloadXmtPing,hEdmaReloadXmtPong) 這樣,一個(gè) EDMA 傳輸?shù)耐瓿蓪㈤_始下一個(gè) EDMA 傳輸, EDMA 的 Ping 通道和 Pong通道在接收端和發(fā)送端分別相互鏈接, PingPong 緩沖區(qū)的交替的 EDMA 傳輸將連續(xù)不斷的進(jìn)行下去。 通道的初始化配置 每一個(gè) EDMA 通道在使用之前,必需根據(jù)其在 EDMA 傳輸中的不同作用,載入不同的配置參數(shù)。 EDMA 配置參數(shù)包括 6 個(gè)部分,分別是通道選擇參數(shù) OPT,通道源地址參數(shù)( SRC),傳輸計(jì)數(shù)參數(shù)( CNT) ,通道目的地址參數(shù)( DST),通道索引參數(shù)( IDX), 計(jì)數(shù)重載和鏈接地址參數(shù)( RLD) 。 EDMA 通道參數(shù)的配置由以下這個(gè)函數(shù)來完成: void EDMA_config( EDMA_Handle hEdma, EDMA_Config *config ) 第二個(gè)參數(shù)為 EDMA 參數(shù)配置結(jié)構(gòu)體,形式如下: EDMA_Config myConfig = { 0x41202000, /* OPT */ 0x80000000, /* SRC */ 0x00000040, /* CNT */ 第四章 編解碼芯片驅(qū)動(dòng)的軟件實(shí)現(xiàn) 31 0x80010000, /* DST */ 0x00000004, /* IDX */ 0x00000000 /* RLD */ } 第一個(gè)參數(shù)為表示指定 EDMA 通道的 HANDLE,由 EDMA_Handle EDMA_open( int chaNum, Uint32 flags )函數(shù)獲得。 對(duì)于我們所需要的 EDMA 通道來說, OPT 參數(shù)進(jìn)行如下配置: EDMA_FMKS(OPT, PRI, HIGH) | // 優(yōu)先級(jí) EDMA_FMKS(OPT, ESIZE, 16BIT) | // 單元大小 EDMA_FMKS(OPT, 2DS, NO) | // 是否是 2 維源 EDMA_FMKS(OPT, SUM, INC) | // 源更新模式 EDMA_FMKS(OPT, 2DD, NO)
點(diǎn)擊復(fù)制文檔內(nèi)容
試題試卷相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1