新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 三 ARM9(S3C2440)的串口UART——程序?qū)嵗v解

三 ARM9(S3C2440)的串口UART——程序?qū)嵗v解

作者: 時間:2016-11-27 來源:網(wǎng)絡(luò) 收藏
串口通信程序編寫步驟

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

本文引用地址:http://butianyuan.cn/article/201611/322168.htm

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

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

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

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

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;

設(shè)中斷服務(wù)函數(shù)入口地址,把中斷服務(wù)函數(shù)入口地址賦函數(shù)指針PISR_UARTn, 注意,接收中斷服務(wù)函數(shù)入口地址和發(fā)送中斷服務(wù)函數(shù)入口地址是一個,在中斷服務(wù)函數(shù)中根據(jù)

UTRSTATn [1]和UTRSTATn [0]狀態(tài)決定是發(fā)送中斷還是接收中斷。

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

rINTMSK=~(BIT_UART0);

rINTSUBMSK=~(BIT_SUB_TXD0);

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

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

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

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

int TSmain()
{
char buf,i;

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

buf=rURXH0;//讀取數(shù)據(jù)
while(!(rUTRSTAT0 & 0X04));//是否允許發(fā)送 =1允許

rUTXH0=buf;
if(buf==1)//判斷接收到的是哪一個數(shù)字
i=1;
else if(buf==2)
i=2;
else if(buf==3)
i=3;
else if(buf==4)
i=4;
switch(i){//使相應(yīng)的LED亮滅

case 1:
rGPBDAT^=(1<<5);
i=0;//將i清零防止下次收到其他數(shù)據(jù)時干擾
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 下一頁

關(guān)鍵詞: ARM9S3C2440串口UAR

評論


技術(shù)專區(qū)

關(guān)閉