新聞中心

FL2440 UART的用法

作者: 時(shí)間:2016-11-11 來源:網(wǎng)絡(luò) 收藏
UART原理說明:

通用異步收發(fā)器簡(jiǎn)稱UART,即“Universal Asynchronous Receiver Transmitter”,它用來傳輸串行數(shù)據(jù):發(fā)送數(shù)據(jù)時(shí),CPU將并行數(shù)據(jù)寫入U(xiǎn)ART,UART按照一定格式在一根電線上串行發(fā)出;接收數(shù)據(jù)時(shí),UART檢測(cè)另一根電線上的信號(hào),將串行數(shù)據(jù)放在緩沖區(qū)中,CPU即可讀取UART獲得的數(shù)據(jù)。UART之間以全雙工方式傳輸數(shù)據(jù),最精簡(jiǎn)的連線方式只有三根電線:TxD用于發(fā)送數(shù)據(jù),RxD用于接收數(shù)據(jù),Gnd用于給雙方提供參考電平。連線如下圖所示:

本文引用地址:http://butianyuan.cn/article/201611/316626.htm
為了增強(qiáng)數(shù)據(jù)的抗干擾能力、提高數(shù)據(jù)傳輸長(zhǎng)度,通常將TTL/CMOS邏輯電平轉(zhuǎn)換為RS-232邏輯電平,3~12V表示0,-3~-12V表示1。S3C2440有3個(gè)獨(dú)立的UART通道,每個(gè)通道都可以工作于中斷、查詢或者DMA模式。
S3C2440UART的使用:
UART使用之前需要設(shè)置波特率、數(shù)據(jù)傳輸格式,配置相關(guān)管腳為UART功能,選擇工作模式是中斷、查詢還是DMA.。另外,S3C2440中每個(gè)UART都有一個(gè)深度為64字節(jié)的接收FIFO和發(fā)送FIFO。我們采用的配置方式不使用FIFO模式。
1. 將涉及的UART通道管腳設(shè)為UART功能
比如,UART通道0中,GPH2、GPH3分別用作TXD0、RXD0,即要使用UART通道0時(shí),必須先將GPHCON寄存器中GPH2/3配置為TXD0/RXD0。
2. UBRDIVn寄存器:設(shè)置波特率
S3C2440的時(shí)鐘源有PCLK 、UEXTCLK、FCLK/n,其中n值是通過UCON0~UCON2聯(lián)合設(shè)置。
根據(jù)給定的波特率、所選擇的時(shí)鐘源頻率,可以通過以下公式計(jì)算UBRDIVn寄存器。
UBRDIVn=(int)(UART CLOCK /(BUAD RATE * 16)) - 1
時(shí)鐘源選擇PCLK為50MHz,波特率設(shè)置為115200赫茲,所以計(jì)算出的值為26.13,取整之后為26,即把26存到寄存器UBRDIV0即可。
3. ULCONn:設(shè)置傳輸格式
設(shè)置數(shù)據(jù)寬度、停止位寬度、檢驗(yàn)?zāi)J?、紅外模式。
4. UCONn寄存器
通過該寄存器來設(shè)置S3C2440中UART的接收模式、發(fā)送模式、接收中斷方式、發(fā)送中斷方式、時(shí)鐘選擇、FCLK分頻系數(shù)(FCLK/n中n的值)等等。
5.UTRSTATn寄存器
UTRSTATn寄存器用來表明數(shù)據(jù)是否發(fā)送完畢,是否已經(jīng)接受到數(shù)據(jù)。第0位可以用來判斷接受緩存器內(nèi)是否有可接收的數(shù)據(jù),接收到數(shù)據(jù)自動(dòng)設(shè)置為1;第1位和第2位可以用來判斷發(fā)送緩存器中是否為空,為空時(shí)可以發(fā)送數(shù)據(jù)。寄存器格式如下:
接收到的數(shù)據(jù)是放到接收緩存器URXHn中,要發(fā)送數(shù)據(jù)時(shí),是把數(shù)據(jù)放入發(fā)送緩存器UTXHn中。由于UART是通過字節(jié)方式傳輸數(shù)據(jù)的,因此要區(qū)分是大端模式還是小端模式,也就是說這兩個(gè)寄存器在這兩種模式下,所在的地址是不同。
現(xiàn)在來看一段代碼,這段代碼采用的查詢的方式來使用UART的。每次完成一個(gè)字節(jié)的傳輸。

#include "2440addr.h"

void Main(void)

{

char ch;

rGPBCON = 0x155551;

rGPBUP = 0x7ff;

rGPBDAT = 0x560;

rGPHCON = 0x00faaa; /*使用UART0功能 0000 0000 1111 1010 1010 1010 管腳使能*/

rGPHUP = 0x7ff;

rULCON0 = 0x3; /*設(shè)置UART0無奇偶校驗(yàn),一位停止位,8位數(shù)據(jù) 設(shè)定數(shù)據(jù)傳輸格式*/

rUCON0 = 0x245; /*PCLK為時(shí)鐘源,接收和發(fā)送數(shù)據(jù)為查詢或中斷方式[4]沒有break信號(hào)[7]禁止fifo*/

rUFCON0 = 0;

rUMCON0 = 0;

rUBRDIV0 = 26; /*設(shè)置波特率,PCLK為50MHz,波特率為115.2kHz*/

while(!(rUTRSTAT0 & 0x2)); /*等待并判斷發(fā)送緩存是否為空*/

rUTXH0 = 0xaa; /*是空,則發(fā)送0xAA字節(jié)*/

while(1)

{

while(!(rUTRSTAT0 & 0x1)); /*等待并判斷接收緩存是否準(zhǔn)備好*/

ch = rURXH0; /*接收一個(gè)字節(jié)數(shù)據(jù)*/

while(!(rUTRSTAT0 & 0x2)); /*等待并判斷發(fā)送緩存是否為空*/

rUTXH0 = ch; /*發(fā)送一個(gè)字節(jié)數(shù)據(jù)*/

switch(ch) /*根據(jù)所接收數(shù)據(jù)的不同,執(zhí)行不同的程序*/

{

case 0x11: /*滅LED*/

rGPBDAT |= 0x560;
break;

case 0x22: /*亮LED*/

rGPBDAT &= 0x1f;
break;

case 0x33: /*蜂鳴器不響*/

rGPBDAT &= 0x560;
break;

case 0x44: /*蜂鳴器響*/

rGPBDAT |= 0x1;
break;
default: /*LED滅,蜂鳴器不響*/

rGPBDAT = 0x560;
break;

}

}

}

中斷處理方式,UART有子中斷,要注意子中斷屏蔽的打開,由于UART中斷涉及到SUBSRCPND寄存器,因此在中斷處理程序中不僅要清SRCPND寄存器,還要清SUBSRCPND寄存器,它們的順序一定是先清SUBSRCPND寄存器,再清SRCPND寄存器,否則就會(huì)引起一個(gè)中斷兩次響應(yīng)的問題。因?yàn)槭欠裰袛嘤蒘RCPND寄存器決定,而SRCPND寄存器的相關(guān)狀態(tài)位由SUBSRCPND寄存器決定,如果先清SRCPND寄存器,而還沒有清SUBSRCPND寄存器的話,SRCPND寄存器的相關(guān)位還是會(huì)被置1,而一旦被置1,則一定還會(huì)引起中斷。

#include "2440addr.h"

#define U32 unsigned int

void __irq uartISP(void)

{

char ch;

rSUBSRCPND |= 0x3;

rSRCPND = 0x1<<28;

rINTPND = 0x1<<28;

if(rUTRSTAT0 & 1) /*接收數(shù)據(jù)處理部分*/

{

ch = rURXH0; /*接收字節(jié)數(shù)據(jù)*/

if(ch==0x55)

rGPBDAT = ~0x60; /*亮兩個(gè)LED,蜂鳴器響*/

else

rUTXH0 = ch; /*發(fā)送字節(jié)數(shù)據(jù)*/

}

else /*發(fā)送數(shù)據(jù)處理部分*/

{

rGPBDAT = ~0x561; /*亮4個(gè)LED*/

}

}

void Main(void)

{

rGPBCON = 0x155555;

rGPBUP = 0x7ff;

rGPBDAT = 0x560;

rGPHCON = 0x00faaa;

rGPHUP = 0x7ff;

rULCON0 = 0x3;

rUCON0 = 0x5;

rUFCON0 = 0;

rUMCON0 = 0;

rUBRDIV0 = 26;

rSRCPND = 0x1<<28;

rSUBSRCPND = 0x3;

rINTPND = 0x1<<28;

rINTSUBMSK = ~(0x3); /*打開UART0發(fā)送和接收中斷屏蔽*/

rINTMSK = ~(0x1<<28); /*打開UART0中斷屏蔽*/

pISR_UART0 = (U32)uartISP;

while(1)

{

}

}

在"2440addr.h"里面的關(guān)于rUTXH0/rURXH0的定義。arm指令默認(rèn)小端模式初始化,所以地址是這個(gè)。




關(guān)鍵詞: FL2440UAR

評(píng)論


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

關(guān)閉