新聞中心

S3C2440-IIS放音

作者: 時(shí)間:2016-12-02 來(lái)源:網(wǎng)絡(luò) 收藏
S3C2440A的Inter-IC Sound(IIS)總線接口作為一個(gè)編解碼接口連接外部8/16位立體聲音頻解碼IC用于迷你碟機(jī)和可攜式應(yīng)用。IIS總線接口支持IIS總線數(shù)據(jù)格式和MSB-justified數(shù)據(jù)格式。該接口對(duì)FIFO的訪問(wèn)采用了DMA模式取代了中斷。它可以在同一時(shí)間接受和發(fā)送數(shù)據(jù)。S3C2440一共有5個(gè)引腳用于IIS:IISDO,IISDI,IISSCLK,IISLRCK和CDCLK。前兩個(gè)信號(hào)用于數(shù)字音頻信號(hào)的輸入輸出,另外3個(gè)引腳都與音頻信號(hào)的頻率有關(guān),可見(jiàn)要用好IIS,就要把信號(hào)頻率設(shè)置正確。IISSCLK為串行時(shí)鐘,每一個(gè)時(shí)鐘信號(hào)傳送一位音頻信號(hào),因此IISSCLK的頻率=聲道數(shù)*采樣頻率*采樣位數(shù),如采樣頻率為44.1kHz,采樣的位數(shù)為16位,聲道數(shù)2個(gè)(左,右兩個(gè)聲道),則IISSCLK的頻率=32fs=1411.2kHz。IISLRCK為幀時(shí)鐘,用于切換左右聲道,如IISLRCK為高電平表示正在傳輸?shù)氖亲舐暤罃?shù)據(jù),為低表示傳輸?shù)氖怯衣暤罃?shù)據(jù)。因此IISLRCK的頻率應(yīng)該正好等于采樣頻率。由于IIS只負(fù)責(zé)數(shù)字音頻信號(hào)的傳輸,而要真正實(shí)現(xiàn)音頻信號(hào)的放錄還需要額外的處理芯片(在這里我們使用UDA1341),CDCLK為該芯片提供系統(tǒng)同步時(shí)鐘,即編解碼時(shí)鐘,主要用于音頻的A/D,D/A采樣時(shí)的采樣時(shí)鐘,一般CDCLK為256fs或384fs。UDA1341使用L3接口,通過(guò)L3接口可以實(shí)現(xiàn)UDA1341和S3C2440控制信息的傳遞。L3指3根線,L3DATA(數(shù)據(jù)線,用于傳輸數(shù)據(jù)),L3MODE(模式線,用于選擇模式),L3CLOCK(時(shí)鐘線,用于傳輸時(shí)鐘)。先傳輸?shù)刂纺J綌?shù)據(jù),再傳輸數(shù)據(jù)模式數(shù)據(jù)。L3MODE為低時(shí)是地址模式,L3MODE為高時(shí)是數(shù)據(jù)傳輸模式。L3DATA和L3CLOCK相互作用,完成8位數(shù)據(jù)的傳輸,傳輸?shù)捻樞蚴窍鹊臀粩?shù)據(jù),再高位數(shù)據(jù)。地址模式用于選擇設(shè)備和定義目標(biāo)寄存器,在這種模式下,8位數(shù)據(jù)的含義是:高6位是設(shè)備地址(UDA1341的地址為000101),低兩位是后面數(shù)據(jù)模式的類(lèi)型(00:DATA0,01:DATA1,10:STATUS)。

下面這個(gè)程序完成從WAV音頻文件中提取出數(shù)組。

#include <stdio.h>
#include<stdlib.h>
#include <string.h>
#include <memory.h>
int main(){
FILE *stream, *fp;
unsigned char *music;
char ch[5];
int start, end, num, t, i, j, r;
if(((stream = fopen("D:music.wav","rb")) == NULL) || ((fp = fopen("D:music.h","wb+")) == NULL)){
printf("%s","cannot open output file.");
return 1;
}
fseek(stream,0,SEEK_SET);
start = ftell(stream); //獲得文件的起始地址
fseek(stream,0,SEEK_END);
end = ftell(stream); //獲得文件的結(jié)束地址
fseek(stream,0,SEEK_SET);
music = (unsigned char *)malloc(end-start); //動(dòng)態(tài)分配一個(gè)buffer
fwrite("unsigned char music[",1,20,fp);
fwrite("]={",1,3,fp);
fwrite("", 2, 1, fp);
num = (end - start - 0x2c) / 16; //m每行16個(gè)
t = (end - start - 0x2c) % 16;
fread(music, 1, end - start, stream);
for(i = 0; i < num; i++){
for(j = 0; j < 16; j++){
memset(ch,0,5);
r = (int)music[i*16+j+0x2c]; //從0x2c開(kāi)始是音頻數(shù)據(jù)
r &= 0xff;
sprintf(ch,"0x%02x",r); //先轉(zhuǎn)化成一定格式
fwrite(ch,sizeof(ch),1,fp);
fwrite(",",1,1,fp);
}
fwrite("",1,2,fp);
}
for(i = 0; i < t; i++){
memset(ch,0,5);
r = (int)music[i*16+j+0x2c];
r &= 0xff;
sprintf(ch,"0x%02x",r);
fwrite(ch,sizeof(ch),1,fp);
if(i != t-1)
fwrite(",",1,1,fp);
}
fwrite("};",1,2,fp);
fclose(stream);
fclose(fp);
system("pause");
return 0;
}

上一頁(yè) 1 2 下一頁(yè)

關(guān)鍵詞: S3C2440IIS放

評(píng)論


技術(shù)專(zhuān)區(qū)

關(guān)閉