日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

s3c2440串口详解

發布時間:2023/12/19 综合教程 31 生活家
生活随笔 收集整理的這篇文章主要介紹了 s3c2440串口详解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、UART原理說明

通用異步收發器簡稱UART(Universal Asynchronous Receiver/Transmitter),它用來傳輸串行數據:發送數據時,CPU將并行數據寫入UART,UART按照一定的格式在一根電線上串行發出;接收數據時,UART檢測另一根電線上的信號,將串行數據收集放在緩沖區中,CPU就可以讀取UART獲得這些數據。串口之間以全雙工方式傳輸數據,最精簡的連線只有三根線:TxD用于發送數據,RxD用于接收數據,Gnd用于給雙方提供參考電平,連線如下圖:

UART使用標準的TTL/CMOS邏輯電平(0-5V、0-3.3V、0-2.5V、0-1.8V)來表示數據,高電平表示1,低電平表示0。為了增強數據的抗干擾能力、提高傳輸長度,通常將TTL/CMOS邏輯電平轉換為RS232邏輯電平,3-12V表示0,-3--12V表示1。

TxD、RxD數據線以‘位’為最小單位傳輸數據。幀由具體完整意義的、不可分割的若干位組成,它包含開始位、數據位、校驗位、停止位。發送數據之前UART之間要約定好數據的傳輸速率(每位所占用的時間,其倒數稱為波特率)、數據的傳輸格式(有多少數據位、是否使用校驗位、是奇校驗還是偶校驗,有多少個停止位)。

數據傳輸如下圖:

(1)、平時數據線處于“空閑”狀態(1狀態)
(2)、當要發送數據時,UART改變TxD數據線的狀態(變為0狀態)并維持1位的時間,這樣接收方檢測到開始位后,再等待1.5位的時間就開始一位一位地檢測數據線的狀態得到所傳輸的數據。
(3)、UART一幀中可以有5、6、7、8位數據,發送方一位一位地改變數據線的狀態將它們發送出去,首先發送最低位。
(4)、如果使用校驗功能,UART在發送完數據后,還要發送1個校驗位。有兩種校驗法:奇校驗、偶校驗(數據位連同校驗位中,“1”的數目是奇數還是偶數)。

(5)、最后,發送停止位,數據線恢復到“空閑”狀態。停止位的長度有3種:1位、1.5位、2位。

二、S3C2440 UART的特性
s3c2440中UART,有三個獨立的通道,每個通道都可以工作于中斷模式或DMA模式,即UART可以發出中斷或DMA請求以便在UART、CPU間傳輸數據。UART由波特率發生器、發送器、接收器和控制邏輯組成。

使用系統時鐘時,s3c2440可以達到115.2Kbit/s;s3c2440UART的FIFO深度為64字節。發送數據時,CPU先將數據寫入發送FIFO中,然后UART會自動將FIFO中的數據復制到“發送移位器”中,發送移位器將數據一位一位地發送到TxD數據線上(根據設定的格式,插入開始位、校驗位、停止位)。接收數據時,“接收移位器”將RxD數據線上的數據一位一位接收進來,然后復制到接收FIFO,CPU即可從中讀取數據。

UART結構圖

三、s3c2440UART的使用

在使用UART之前需要設置波特率、傳輸格式(有多少個數據位、是否使用校驗位、是奇校驗還是偶校驗、有多少個停止位、是否使用流量控制);對于s3c2440還要設置相應的管腳位UART功能、選擇UART通道工作模式為中斷模式還是DMA模式,設置好后,往某個寄存器寫入數據即可發送,讀取某個寄存器即可得到接收到的數據。可以查詢狀態寄存器或設置中斷來獲知數據是否已經發送完畢、是否已經接收完畢。

具體操作方法:

1、將所涉及的UART通道管腳設為UART功能
比如UART0,GPH2、GPH3分別用作TxD0、RxD0,要使用串口通道0時,先設置GPHCON寄存器將GPH2、GPH3引腳功能設置為TxD0、RxD0。
2、UBRDIVn寄存器:設置波特率
s3c2440UART的時鐘源有三種選擇:FLCK/n(n值通過UCON0-UCON2聯合設置)、UEXTCLK、PCLK。
根據給定的波特率、所選擇的的時鐘源的頻率。可以通過以下公式計算UBRDIVn寄存器(n為0-2)的值,
給出了計算公式、例子及誤差計算

3、ULCONn寄存器:設置傳輸格式

4、UCONn寄存器:串口控制寄存器

UCONn寄存器用來選擇UART時鐘源、設置UART中斷方式等。

n的值有UCON0、UCON1、UCON2這3個寄存器的[15:12]一起來確定。

5、UFCONn寄存器、UFSTATn寄存器
UFCONn寄存器用于設置是否使用FIFO,設置各FIFO的觸發閾值,即發送FIFO中有多少個數據時產生中斷、接收FIFO中有多少個數據時產生中斷。并可以通過設置這個寄存器來復位各個FIFO。
讀取USTATn寄存器可以知道各個FIFO是否已滿、其中有多少個數據。
不適用FIFO時可以認為FIFO深度為1,使用FIFO時s3c2440FIFO深度64。
6、UMOCONn寄存器、UMSTATn寄存器
這兩類寄存器用于流量控制。
7、UTRSTATn寄存器
這個寄存器用來表示數據是否已經發送完畢、是否接收完畢。
8、UERSTATn寄存器
用來表示各種錯誤是否發生。
9、UTXHn寄存器
CPU將數據寫入這個寄存器,UART就會將它保存到緩沖區中,并自動發送出去
10、URXHn寄存器
當UART接收到數據,CPU讀取這個寄存器,就可以獲取數據。

四、UART使用程序

serial.h

void uart0_init(void);
void putc(unsigned char c);
unsigned char getc(void);
int isDigit(unsigned char c);
int isLetter(unsigned char c);

serial.c

#include "s3c24xx.h"
#include "serial.h"

#define TXD0READY   (1<<2)
#define RXD0READY   (1)

#define PCLK            50000000    // init.c中的clock_init函數設置PCLK為50MHz
#define UART_CLK        PCLK        //  UART0的時鐘源設為PCLK
#define UART_BAUD_RATE  115200      // 波特率
#define UART_BRD        ((UART_CLK  / (UART_BAUD_RATE * 16)) - 1)

/*
 * 初始化UART0
 * 115200,8N1,無流控
 */
void uart0_init(void)
{
    GPHCON  |= 0xa0;    // GPH2,GPH3用作TXD0,RXD0
    GPHUP   = 0x0c;     // GPH2,GPH3內部上拉

    ULCON0  = 0x03;     // 8N1(8個數據位,無較驗,1個停止位)
    UCON0   = 0x05;     // 查詢方式,UART時鐘源為PCLK
    UFCON0  = 0x00;     // 不使用FIFO
    UMCON0  = 0x00;     // 不使用流控
    UBRDIV0 = UART_BRD; // 波特率為115200
}

/*
 * 發送一個字符
 */
void putc(unsigned char c)
{
    /* 等待,直到發送緩沖區中的數據已經全部發送出去 */
    while (!(UTRSTAT0 & TXD0READY));
    
    /* 向UTXH0寄存器中寫入數據,UART即自動將它發送出去 */
    UTXH0 = c;
}

/*
 * 接收字符
 */
unsigned char getc(void)
{
    /* 等待,直到接收緩沖區中的有數據 */
    while (!(UTRSTAT0 & RXD0READY));
    
    /* 直接讀取URXH0寄存器,即可獲得接收到的數據 */
    return URXH0;
}

/*
 * 判斷一個字符是否數字
 */
int isDigit(unsigned char c)
{
    if (c >= '0' && c <= '9')
        return 1;
    else
        return 0;       
}

/*
 * 判斷一個字符是否英文字母
 */
int isLetter(unsigned char c)
{
    if (c >= 'a' && c <= 'z')
        return 1;
    else if (c >= 'A' && c <= 'Z')
        return 1;       
    else
        return 0;
}

總結

以上是生活随笔為你收集整理的s3c2440串口详解的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。