新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 三 ARM9(S3C2440)的串口UART——程序實例講解

        三 ARM9(S3C2440)的串口UART——程序實例講解

        作者: 時間:2016-11-27 來源:網絡 收藏

        下面是利用中斷的串口通信程序


        #include"2440addr.h"
        void __irq UART0RX_isr()
        {
        char buf,i;
        rINTMSK=0xffffffff;
        ClearPending(BIT_UART0);

        if(rUTRSTAT0 & 0X01)//接收是否完畢 =1結束
        {
        ClearSubPending(BIT_SUB_RXD0);
        buf=rURXH0;//讀取數據
        while(!(rUTRSTAT0 & 0X04));//是否允許發送 =1允許

        rUTXH0=buf;
        if(buf==1)
        i=1;
        else if(buf==2)
        i=2;
        else if(buf==3)
        i=3;
        else if(buf==4)
        i=4;
        switch(i){

        case 1:
        rGPBDAT^=(1<<5);
        i=0;//將i清零防止下次收到其他數據時干擾
        break;
        case 2:
        rGPBDAT^=(1<<6);
        i=0;
        break;
        case 3:
        rGPBDAT^=(1<<8);
        i=0;
        break;
        case 4:
        rGPBDAT^=(1<<10);
        i=0;
        break;
        default:break;
        }

        }
        EnableIrq(BIT_UART0);
        EnableSubIrq(BIT_SUB_RXD0);
        EnableIrq(BIT_EINT0|BIT_EINT2|BIT_EINT3|BIT_EINT4_7);
        }
        static void __irq Key_ISR()
        {
        char key;//用來標識是哪一個按鍵按下

        //EnterCritical(&r);
        rINTMSK=0xffffffff;
        if(rINTPND==BIT_EINT0) {
        ClearPending(BIT_EINT0);
        key=1;
        }
        else if(rINTPND==BIT_EINT2) {
        ClearPending(BIT_EINT2);
        key=2;
        }
        else if(rINTPND==BIT_EINT3) {
        ClearPending(BIT_EINT3);
        key=3;
        }
        else if(rINTPND==BIT_EINT4_7){
        rEINTPEND=(1<<4);
        ClearPending(BIT_EINT4_7);
        key=4;
        }
        switch(key){
        case 1:
        rGPBDAT^=(1<<5);
        break;
        case 2:
        rGPBDAT^=(1<<6);
        break;
        case 3:
        rGPBDAT^=(1<<8);
        break;
        case 4:
        rGPBDAT^=(1<<10);
        break;
        }

        //ExitCritical(&r);
        EnableIrq(BIT_EINT0|BIT_EINT2|BIT_EINT3|BIT_EINT4_7);
        EnableIrq(BIT_UART0);
        EnableSubIrq(BIT_SUB_RXD0);



        }
        int TSmain()
        {


        rULCON0 &=0XFFFFFF00;
        rULCON0 |=0X03;//1位起始位,8位數據位
        rUCON0=0x05;//0X0805;//串口時鐘PCLK,查詢方式 東:PCLK為50M
        rUBRDIV0 =325;//0X1A;//波特率115200****325時設置為9600
        rGPHUP=0x1ff;//H口上拉禁止
        rGPHCON&=0x3c0000;
        rGPHCON|=0x2faaa;
        rGPBCON = 0x1dd7fc;//GPB5,6,8,10設置為輸出
        rGPBDAT|=0x560;//4個LED全滅
        rGPFCON &=~((3<<0)|(3<<4)|(3<<6)|(3<<8)) ;
        rGPFCON |= ((2<<0)|(2<<4)|(2<<6)|(2<<8)) ;//GPF0,GPF2,GPF3,GPF4工作在第二功能狀態,即中斷
        rEINTPEND=(1<<4);
        ClearPending(BIT_EINT0|BIT_EINT2|BIT_EINT3|BIT_EINT4_7);
        ClearSubPending(BIT_SUB_RXD0);
        ClearPending(BIT_UART0);
        pISR_EINT0= pISR_EINT2 =pISR_EINT3 = pISR_EINT4_7=(int)Key_ISR;
        EnableIrq(BIT_EINT0|BIT_EINT2|BIT_EINT3|BIT_EINT4_7);
        EnableIrq(BIT_UART0);
        EnableSubIrq(BIT_SUB_RXD0);
        rEINTMASK=~(1<<4);
        pISR_UART0=(unsigned) UART0RX_isr;

        while(1)
        {

        }

        return 0;
        }


        上一頁 1 2 下一頁

        關鍵詞: ARM9S3C2440串口UAR

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 乌兰察布市| 象州县| 宁城县| 墨竹工卡县| 平阴县| 炎陵县| 乌鲁木齐县| 辰溪县| 洛南县| 杨浦区| 夹江县| 高雄市| 延吉市| 博爱县| 永胜县| 山阳县| 夹江县| 张家界市| 弥勒县| 项城市| 潍坊市| 江都市| 海晏县| 柳州市| 西乌珠穆沁旗| 舞钢市| 滁州市| 山阳县| 南昌县| 白水县| 巴林左旗| 泾源县| 随州市| 凌源市| 古丈县| 特克斯县| 乌拉特后旗| 商水县| 台山市| 锦屏县| 元氏县|