新聞中心

        S3C2440-DMA

        作者: 時間:2016-12-02 來源:網絡 收藏
        S3c2440A 支持位于系統總線和外設總線之間的4 個通道的控制器。每個DMA 控制器通道
        無限制地執行系統總線上的設備或外設總線上的設備之間數據搬移。換句話說,就是每個
        通道都操作一下四種情況:
        (1)源和目的設備都在系統總線上
        (2)源設備在系統總線上,目的設備在外設總線上
        (3)源設備在外設總線上,目的設備在系統總線上
        (4)源設備和目的設備都在外設總線上
        DMA 的主要有點就是其傳輸數據不需要CPU 的干涉。DMA 操作可由軟件或來自內設或外
        部請求引腳來初始化。
        DMA每次傳送2個字節,放到FIFO中,IIS就播放,FIFO空,導致DMA被再次觸發,直到傳輸計數器為0,產生DMA中斷,CPU進入中斷處理程序。在DMA傳送的時候,CPU可以處理其他事情。提高了系統效率。
        下面的程序使用IIS播放聲音同時跑流水燈。如果不用DMA,直接用上一篇的IIS程序,會發現聲音斷斷續續,因為IIS和流水燈一起分CPU的時間。如果使用DMA,則IIS需要的數據由DMA負責傳送,而CPU可以執行流水燈程序,互相不耽誤。當傳輸計數器為0時,產生DMA中斷,CPU進入中斷處理程序。其他時候,CPU可以執行流水燈。這樣就實現了流水燈和IIS放音同時執行。
        #include "2440addr.h"
        #include "music.h"
        #define L3MODE 1<<2
        #define L3DATA 1<<3
        #define L3CLOCK 1<<4
        #define _ISR_STARTADDRESS 0x33ffff00
        #define U32 unsigned int
        U32 flag, result, remain;
        void Delay(){
        int i, j, k;
        for(i = 0; i < 0xff; i++)
        for(j = 0; j < 0xff; j++)
        for(k = 0; k < 0xff; k++)
        ;
        }
        void Led(){
        int i;
        for(i = 3; i < 7; i++){
        rGPFDAT &= "(1<<i);
        Delay();
        rGPFDAT = 0xff;
        }
        }
        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);
        }
        上一頁 1 2 下一頁

        關鍵詞: S3C2440DMA控制

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 麻栗坡县| 沁水县| 定西市| 青冈县| 浑源县| 新田县| 连云港市| 惠州市| 阿拉尔市| 德保县| 佛坪县| 左云县| 鄂尔多斯市| 阿合奇县| 鹤壁市| 扶绥县| 菏泽市| 桦南县| 临海市| 西吉县| 法库县| 工布江达县| 聂荣县| 原阳县| 高台县| 青海省| 茂名市| 明溪县| 房产| 神农架林区| 南丰县| 明星| 呼玛县| 海阳市| 仁寿县| 禄劝| 乐安县| 海南省| 德江县| 嘉峪关市| 关岭|