新聞中心

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

        S3C2440-IIS放音

        作者: 時間:2016-12-02 來源:網絡 收藏


        完成音頻文件的播放。IISFIFO為16位寬,深度為32。將音頻數組中的數據裝入IISFIFO,裝滿后IIS讀取IISFIFO中的數據,即放音,然后再將音頻數組中的數據讀入IISFIFO,周而復始,完成放音。

        #include "2440addr.h"
        #include "music.h"
        #define L3MODE 1<<2
        #define L3DATA 1<<3
        #define L3CLOCK 1<<4
        void WriteL3(unsigned char data, unsigned int mode){
        //mode = 0,地址模式;mode = 1,數據傳輸模式
        int i, k;
        if(mode == 0){
        rGPBDAT = rGPBDAT & "(L3MODE|L3DATA|L3CLOCK )|L3CLOCK;
        }
        else{
        rGPBDAT = rGPBDAT & "(L3MODE|L3DATA|L3CLOCK)|(L3CLOCK|L3MODE);
        }
        for(k = 0; k < 5; k++)
        ;
        for(i = 0; i < 8; i++){
        if(data & 0x1){
        rGPBDAT &= "L3CLOCK;
        rGPBDAT |= L3DATA;
        for(k = 0; k < 5; k++)
        ;
        rGPBDAT |= L3CLOCK;
        rGPBDAT |= L3DATA;
        for(k = 0; k < 5; k++)
        ;
        }
        else{
        rGPBDAT &= "L3CLOCK;
        rGPBDAT &= "L3DATA;
        for(k = 0; k < 5; k++)
        ;
        rGPBDAT |= L3CLOCK;
        rGPBDAT &= "L3DATA;
        for(k = 0; k < 5; k++)
        ;
        }
        data >>= 1;
        }
        rGPBDAT = rGPBDAT & "(L3MODE|L3DATA|L3CLOCK)|(L3CLOCK|L3MODE);
        }
        void PlayMusic(unsigned char buffer[], unsigned int length){
        int i, fifo;
        //UDA1341
        //STATUS模式
        rGPBDAT = rGPBDAT & "(L3MODE|L3DATA|L3CLOCK)|(L3CLOCK|L3MODE);
        WriteL3(0x14+2,0);
        //復位
        WriteL3(0x60,1);
        WriteL3(0x14+2,0);
        //00010000 系統時鐘頻率384fs
        WriteL3(0x10,1);
        WriteL3(0x14+2,0);
        //11000001 輸出增益,ADC關,DAC開
        WriteL3(0xc1,1);
        //IIS
        //DMA禁止,在接受空閑狀態,不產生IISLRCK信號,IIS預分頻使能
        rIISCON = (0<<5)|(0<<4)|(0<<3)|(1<<2)|(1<<1);
        //主設備時鐘PCLK,主設備模式,發送模式,串行數據16位,主時鐘是384fs,串行位時鐘32fs
        rIISMOD = (0<<9)|(0<<8)|(2<<6)|(0<<5)|(0<<4)|(1<<3)|(1<<2)|(1<<0);
        //預分頻都是N=3
        rIISPSR = (3<<5)|3;
        //發送FIFO正常,發送FIFO使能
        rIISFCON = (0<<15)|(1<<13);
        //IIS start
        rIISCON |= 0x1;
        for(fifo = 0; fifo <= length; fifo += 64){
        while(rIISCON &(1<<7));
        for(i = 0; i < 32; i++)
        rIISFIFO = (buffer[i*2+fifo]) + (buffer[i*2+1+fifo]<<8);
        }
        //IIS close
        rIISCON = 0x0;
        }
        int Main(){
        rGPBUP= rGPBUP& "(0x7<<2) | (0x7<<2); //The pull up function is disabled GPB[4:2] 1 1100
        rGPBCON = rGPBCON & "(0x3f<<4) | (0x15<<4); //GPB[4:2]=Output(L3CLOCK):Output(L3DATA):Output(L3MODE)
        rGPBDAT = 0x1ec;
        rGPEUP= rGPEUP& "(0x1f)| 0x1f; //The pull up function is disabled GPE[4:0] 1 1111
        rGPECON = rGPECON & "(0x3ff) | 0x2aa; //GPE[4:0]=I2SSDO:I2SSDI:CDCLK:I2SSCLK:I2SLRCK
        rMPLLCON = (150<<12)|(5<<4)|(0<<0);
        PlayMusic(music, sizeof(music));
        while(1);
        return 0;
        }

        上一頁 1 2 下一頁

        關鍵詞: S3C2440IIS放

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 湖口县| 邵东县| 东至县| 江陵县| 醴陵市| 方山县| 滨州市| 叶城县| 酉阳| 怀宁县| 平泉县| 虞城县| 孟州市| 荆门市| 大埔县| 合肥市| 重庆市| 绥化市| 正镶白旗| 根河市| 融水| 惠来县| 太湖县| 屏东市| 民乐县| 泾川县| 嘉禾县| 泊头市| 美姑县| 盘锦市| 赤水市| 鹿泉市| 阜新| 安仁县| 涞源县| 锡林郭勒盟| 芒康县| 沭阳县| 中山市| 贵港市| 蒲江县|