www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當前位置:首頁 > 單片機 > 單片機
[導(dǎo)讀]S3C2416裸機開發(fā)系列十八_音頻驅(qū)動實現(xiàn)(2)標簽:WM8960IIS音頻驅(qū)動s3c2416裸機開發(fā)2014-06-10 09:50853人閱讀評論(0)收藏舉報分類:s3c2416裸機開發(fā)(24)版權(quán)聲明:本文為博主原創(chuàng)文章,未經(jīng)博主允許不得轉(zhuǎn)載。目錄

S3C2416裸機開發(fā)系列十八_音頻驅(qū)動實現(xiàn)(2)

標簽:WM8960IIS音頻驅(qū)動s3c2416裸機開發(fā)

2014-06-10 09:50853人閱讀評論(0)收藏舉報

分類:

s3c2416裸機開發(fā)(24)

版權(quán)聲明:本文為博主原創(chuàng)文章,未經(jīng)博主允許不得轉(zhuǎn)載。

目錄(?)[+]


S3C2416裸機開發(fā)系列十八音頻驅(qū)動實現(xiàn)(2)


象棋小子 1048272975


IIS模塊實現(xiàn)IIS.c如下:

#include"s3c2416.h"

#include "IIS.h"

#include"Exception.h"

#include"UART0.h"

#defineDEBUG_IIS

#ifdef DEBUG_IIS

#defineDebug(x...) Uart0_Printf(x)

#else

#defineDebug(x...)

#endif

staticunsigned char TX_Channel; // 發(fā)送音頻的聲道數(shù)

staticunsigned char TX_BitLen; // 發(fā)送位長

staticunsigned char RX_Channel; // 接收音頻的聲道數(shù)

staticunsigned char RX_BitLen; // 接收位長

staticvolatile unsigned char TxBufferFlag;

staticvolatile unsigned char RxBufferFlag;

staticunsigned int TxCount; // 播放時記錄緩存中的寫位置

staticunsigned int RxCount; // 錄音時記錄緩存中的讀位置

// 插放與錄音均采用雙緩存,DMA傳輸?shù)闹鞔媾ccache會有數(shù)據(jù)一致性問題

// 音頻DMA緩存分配到不開啟cache的內(nèi)存區(qū)域

staticunsigned int TxBuffer0[4*1024] __attribute__((section("No_Cache"),zero_init));

staticunsigned int TxBuffer1[4*1024] __attribute__((section("No_Cache"),zero_init));

staticunsigned int RxBuffer0[4*1024] __attribute__((section("No_Cache"),zero_init));

staticunsigned int RxBuffer1[4*1024] __attribute__((section("No_Cache"),zero_init));

static voidDMA_IRQ(void)

{

static unsigned char TxBufferChannel = 0;

static unsigned char RxBufferChannel = 0;

unsigned int DMA_Channel;

DMA_Channel = rSUBSRCPND;

if (DMA_Channel &(1<

if (TxBufferChannel == 0) {

rDISRC0 = ((unsigned int)TxBuffer1);// 開始使用Buffer1緩存

TxBufferFlag &= ~(1<<0);// 發(fā)送標志0位清空,說明Buffer0數(shù)據(jù)需填充

TxBufferChannel = 1; // 正在發(fā)送Buffer1緩存

} else {

rDISRC0 = ((unsignedint)TxBuffer0);// 開始使用Buffer0緩存

TxBufferFlag &= ~(1<<1);// 發(fā)送標志1位清空,說明Buffer1數(shù)據(jù)需填充

TxBufferChannel = 0; // 正在發(fā)送Buffer0緩存

}

rDCON0 = (rDCON0&(~0xfffff)) |(sizeof(TxBuffer0)/4);

rDMASKTRIG0 = (1<<1); // IIS TX打開DMA0通道

rSUBSRCPND |= (1<

}

if (DMA_Channel &(1<

if (RxBufferChannel == 0) {

rDIDST1 = ((unsigned int)RxBuffer1);// DMA1目的地址

RxBufferFlag |= (1<<0); // 接收緩存0位置位,說明Buffer0數(shù)據(jù)準備好

RxBufferChannel = 1; // 下一次使用Buffer1

} else {

rDIDST1 = ((unsigned int)RxBuffer0);// DMA1目的地址

RxBufferFlag |= (1<<1); // 接收緩存1位置位,說明Buffer1數(shù)據(jù)準備好

RxBufferChannel = 0; // 下一次使用Buffer0

}

rDCON1 = (rDCON1&(~0xfffff)) |(sizeof(RxBuffer0)/4);

rDMASKTRIG1 = (1<<1); // IIS RX打開DMA1通道

rSUBSRCPND |= (1<

}

rSRCPND1 |= (1 << INT_DMA);

rINTPND1 |= (1 << INT_DMA);

}

unsignedint IIS_WriteBuffer(unsigned char *pData, unsigned int MaxLen)

{

unsigned int i;

unsigned int nCount; // 能寫入buffer中數(shù)據(jù)長度(以字計,fifo 32位長)

unsigned int *pBuffer;

unsigned char *pTemp = pData;

if (pTemp==0 || MaxLen==0) {

return 0; // 參數(shù)錯誤,數(shù)據(jù)未寫入緩存

}

if ((TxBufferFlag&0x3) == 0x3) {

return 0; // Buffer0,Buffer1均已寫滿

}

if (!(TxBufferFlag & (1<<0))) { //Buffer0需填充

pBuffer = &TxBuffer0[TxCount];

} else { // Buffer1需填充

pBuffer = &TxBuffer1[TxCount];

}

nCount = (sizeof(TxBuffer0)/4) - TxCount;

switch (TX_BitLen) {

case 8:

if (TX_Channel != 1) { // 雙聲道

if (MaxLen/2 == 0) {// 左右聲道fifo中有兩個8位有效音頻數(shù)據(jù)

pTemp += MaxLen; // 不足一個采樣2字節(jié)數(shù)據(jù),丟棄寫入buffer中

}

MaxLen = MaxLen/2; // 32位的fifo中有兩個8位有效音頻數(shù)據(jù)

if (MaxLen < nCount) {

nCount = MaxLen;

}

for (i=0; i

*pBuffer++ = (((unsignedint)pTemp[1]<<16)+

((unsignedint)pTemp[0]<<0));

pTemp += 2; // 2個8位的聲道數(shù)據(jù)已寫入buffer中

}

} else { // 單聲道

if (MaxLen < nCount) {// 32位的fifo中有一個8位有效音頻數(shù)據(jù)

nCount = MaxLen;

}

for (i=0; i

*pBuffer++ = (unsignedint)pTemp[0]<<0;

pTemp += 1; // 1個8位的聲道數(shù)據(jù)已寫入FIFO中

}

}

break;

case 16:

if (TX_Channel != 1) { // 雙聲道

if (MaxLen/4 == 0) {// 左右聲道fifo中有四個8位有效音頻數(shù)據(jù)

pTemp += MaxLen; // 不足一個采樣4字節(jié)數(shù)據(jù),丟棄寫入buffer中

}

MaxLen = MaxLen/4; // 32位的fifo中有四個8位有效音頻數(shù)據(jù)

if (MaxLen < nCount) {

nCount = MaxLen;

}

for (i=0; i

*pBuffer++ = (((unsignedint)pTemp[0]<<0) +

((unsignedint)pTemp[1]<<8)) +

本站聲明: 本文章由作者或相關(guān)機構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

IIC是Philips推出的芯片間串行傳輸總線,它以二根連線實現(xiàn)完善的全雙工同步數(shù)據(jù)傳送,可以極方便地構(gòu)成多機系統(tǒng)和外圍器件擴展系統(tǒng)。由于其接口簡單靈活,很多外圍器件均提供了IIC接口,如手機、平板常用的重力傳感器

關(guān)鍵字: s3c2416 裸機開發(fā) iic驅(qū)動

現(xiàn)在主要講解一下在GCC移植UCGUI,Makefile工程如何加入目錄,加入源碼,c標準庫,編譯選項的設(shè)置。筆者的Makefile模板提取自uboot,工程中加入目錄,加入源碼都是很簡單的,詳細的介紹請參考前面章節(jié)”...

關(guān)鍵字: gcc s3c2416 ucgui 移植 裸機開發(fā)

jpeg格式是一種針對相片影像而廣泛使用的一種失真壓縮標準,其壓縮技術(shù)十分先進,用有損壓縮方式去除冗余的圖像數(shù)據(jù),在獲得極高壓縮率的同時,能展現(xiàn)十分豐富生動的圖像,能用最少的磁盤空間得到較好的圖像品質(zhì)。由

關(guān)鍵字: s3c2416 移植 裸機開發(fā) libjpeg

在消費電子產(chǎn)品中,往往都會用到音頻系統(tǒng)來播放音樂、進行通話等多媒體應(yīng)用,此外,對于一些需語音提示的產(chǎn)品,音頻部分都是不可或缺的功能。筆者此處就s3c2416的音頻驅(qū)動實現(xiàn)作一個簡單的介紹。1. IIS音頻總線s3c24

關(guān)鍵字: s3c2416 裸機開發(fā) 音頻驅(qū)動

很多的嵌入式系統(tǒng)都需要人機交互,對于輸出設(shè)備,LCD以其顯示質(zhì)量高、畫面效果好等優(yōu)點得到了極其廣泛的應(yīng)用。s3c2416包含了一個LCD控制器,筆者此處就s3c2416的LCD應(yīng)用作一個簡單的介紹。1、LCD控制器概述1...

關(guān)鍵字: s3c2416 裸機開發(fā) rgb屏 驅(qū)動顯示

/*** 有待學(xué)習(xí) *****/ Linux 下的IIS 音頻驅(qū)動程序主要都在/kernel/drivers/sound/s3c2410-uda1341.c 文件中。 在音頻驅(qū)動程序中有2個比較重要的結(jié)構(gòu)體:typede...

關(guān)鍵字: iis s3c2410 音頻驅(qū)動

在嵌入式設(shè)計中,由于Nand Flash具有大容量,擦寫次數(shù)高,接口簡單等優(yōu)點,常用作固化存儲器。S3C2416支持Nand啟動,因此Nand存儲器可以直接保存固化代碼以及其它的數(shù)據(jù)。筆者在此簡單的介紹Nand flas...

關(guān)鍵字: nand驅(qū)動 s3c2416 裸機開發(fā) nand啟動

筆者前面章節(jié)簡單介紹了s3c2416啟動代碼的實現(xiàn)過程,啟動代碼就是用來處理cpu體系結(jié)構(gòu)中一些底層內(nèi)容,一個功能強大的啟動代碼是可以當作bootloader(如uboot)來用的。有了啟動代碼,用戶就可以專注于用c來作...

關(guān)鍵字: mdk s3c2416 啟動代碼 裸機開發(fā)

啟動代碼是處理器上電復(fù)位后最先運行的一段代碼。主要是用來把處理器初始化到一個確定的狀態(tài),為c運行環(huán)境作好準備。如設(shè)置異常向量表,初始化系統(tǒng)時鐘,初始化外部內(nèi)存,把用戶代碼拷貝到外部內(nèi)存,初始化棧,清0全

關(guān)鍵字: s3c2416 啟動代碼 流水燈 裸機開發(fā)

S3C2416裸機開發(fā)系列十九_Fatfs下播放錄音wav音頻文件標簽:wavfatfs音頻播放s3c2416sd驅(qū)動2014-06-11 09:551938人閱讀評論(0)收藏舉報分類:s3c2416裸機開發(fā)(24)版...

關(guān)鍵字: s3c2416 裸機開發(fā) 播放錄音 音頻文件
關(guān)閉