久久ER99热精品一区二区-久久精品99国产精品日本-久久精品免费一区二区三区-久久综合九色综合欧美狠狠

新聞中心

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

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

作者: 時間:2016-11-27 來源:網絡 收藏
串口通信程序編寫步驟

UART通信程序可以采用查詢、中斷和DMA模式。我們通過使用較多的中斷方式來介UART通信程序的編寫。簡單做法是,UART通信程序的編寫參照例子程序。

本文引用地址:http://cqxgywz.com/article/201611/322168.htm

選通道,通過函數Uart_Select();選UART0~UART2;

選波特率和波特率發生器時鐘,選波特率通過函數Uart_Pclk_En(int ch, int baud)或Uart_Pclk_En(int ch, int baud)來進行。時鐘選UCLK ,rUCON0|=0x400;時鐘選PCLK ,rUCON0&=0x3ff。

通信協議(rULCON0)設定,如果正常通信,一位停止位,8位數據位,無奇偶效驗: rULCON0=(0<<6)|(0<<3)|(0<<2)|(3);

通信控制字(rUCON0)設定,如時鐘選ULK做波特率發生器;Tx中斷脈沖觸發,Rx中斷脈沖觸發;接收超時中斷允許;產生接收錯誤中斷;正常模式發送:

rUCON0|=(TX_INTTYPE<<9)|(RX_INTTYPE<<8)|(0<<7)|(0<<6)|(0<<5)|(0<<4)|(1<<2)|(1);

I/O口初始化,因為UART通信使用H口的第二功能,所以H口要上拉禁止:rGPHUP|=0x1ff。H口控制寄存器nRTS1,nCTS1功能使能,rGPHCON&=0x3c0000,rGPHCON|=0x2faaa;

設中斷服務函數入口地址,把中斷服務函數入口地址賦函數指針PISR_UARTn, 注意,接收中斷服務函數入口地址和發送中斷服務函數入口地址是一個,在中斷服務函數中根據

UTRSTATn [1]和UTRSTATn [0]狀態決定是發送中斷還是接收中斷。

打開總中斷屏蔽和子中斷屏蔽等待中斷:

rINTMSK=~(BIT_UART0);

rINTSUBMSK=~(BIT_SUB_TXD0);

進入中斷后,先屏蔽發送和接收中斷,防止新來中斷干擾我們的正常發送和接收,正常發送和接收結束后,清中斷掛起和中斷源掛起寄存器:ClearPending(BIT_UART0),rSUBSRCPND=(BIT_SUB_TXD0(發送),rSUBSRCPND=(BIT_SUB_RXD0|BIT_SUB_ERR0)(接收);

取消中斷屏蔽,等下一次中斷。

下面是利用查詢方式的串口通信程序(FL2440開發板)

#include"2440addr.h"http://該程序是PC機通過串口工具向開發板發送1234這四個數字來控制四個LED的亮滅

int TSmain()
{
char buf,i;

rULCON0 &=0XFFFFFF00;
rULCON0 |=0X03;//1位起始位,8位數據位
rUCON0=0x05;//0X0805;//串口時鐘PCLK,查詢方式 東:PCLK為50M
rUBRDIV0 =325;//0X1A;//波特率115200****325時設置為9600
rGPBCON = 0x1dd7fc;//GPB5,6,8,10設置為輸出
rGPBDAT|=0x560;//4個LED全滅
while(1)
{
if(rUTRSTAT0 & 0X01)//接收是否完畢 =1結束
{

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){//使相應的LED亮滅

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;
}

}
}

return 0;
}


上一頁 1 2 下一頁

關鍵詞: ARM9S3C2440串口UAR

評論


技術專區

關閉