新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > S3C2440-IIS放音

        S3C2440-IIS放音

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

        下面這個程序完成從WAV音頻文件中提取出數組。

        #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); //獲得文件的結束地址
        fseek(stream,0,SEEK_SET);
        music = (unsigned char *)malloc(end-start); //動態分配一個buffer
        fwrite("unsigned char music[",1,20,fp);
        fwrite("]={",1,3,fp);
        fwrite("", 2, 1, fp);
        num = (end - start - 0x2c) / 16; //m每行16個
        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開始是音頻數據
        r &= 0xff;
        sprintf(ch,"0x%02x",r); //先轉化成一定格式
        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;
        }

        上一頁 1 2 下一頁

        關鍵詞: S3C2440IIS放

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 古蔺县| 正宁县| 清原| 涟源市| 利辛县| 肇州县| 独山县| 西丰县| 清丰县| 淮南市| 英德市| 万盛区| 大荔县| 平塘县| 德格县| 青川县| 龙口市| 和田市| 宽城| 志丹县| 仁寿县| 普陀区| 双鸭山市| 冀州市| 梁河县| 三门峡市| 平定县| 柳州市| 宝清县| 安西县| 卫辉市| 临漳县| 桂林市| 汉阴县| 山东省| 绥阳县| 白沙| 石家庄市| 土默特右旗| 勃利县| 高密市|