国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 操作系統 > 正文

S3C2410中文芯片手冊-11.串口

2024-06-28 13:21:44
字體:
來源:轉載
供稿:網友
S3C2410中文芯片手冊-11.串口

February 28, 2015 4:57 PM

[TOC]

11 UARTOverview

S3C2410x 提供3個獨立的異步串行I/O接口,每一個都可以工作在中斷或是 DMA 模式。UART 最高可以支持230.

4K bps波特率,通過使用系統時鐘。如果有外部設備給 UART 提供 UCLK, 那么 UART 可以達到更高的速度。每個 UART 通道包含2個16個字節的 FIFO 用于接收和發送數據。

S3C2410 的 UART 包括 可編程波特率,infra-red 發送/接收, 1~2個停止位, 5~8位數據位和奇偶校驗。

每個 UART 由波特率發生器、發送器、接收器和控制單元組成,如圖11-1所示。波特率發生器可以由 PCLK 或是 UCLK 提供時鐘。數據發送器和接收器包含16字節的 FIFO 和數據緩沖器。數據首先被寫入 FIFO 中,然后在發送前被拷貝到發送數據緩沖器中。這些數據之后被數據發送引腳(TxDn)發送。同時從接收引腳接收數據,然后將數據從緩沖器復制到 FIFO。

Featrues
  • RxD0, TxD0, RxD1, TxD1, RxD2 和 TxD2 帶有 DMA 和中斷操作。
  • UART 通道 0,1和2,帶有 IrDA 1.0 & 16-byte FIFO
  • UART 通道 0和1,帶有 nRTS0,nCTS0,nRTS1 和 nCTS1
  • 支持硬件握手發送/接收

選區_001.png

UART Operation

接下來的章節描述了 UART 的操作,包括數據發送、數據接收、中斷產生、波特率產生,回環模式,紅外模式和自動流控制。

Data Transmission

傳送的數據結構是可編程的。它包括一位起始位、5~8位數據位、一位可選的奇偶校驗位和1~2位停止位,這些都可以通過線性控制寄存器(ULCONn)來指定。發送器也可以通過強制串行口在一幀發送數據時間里輸出邏輯0來產生中止條件。這塊發送中止信號出現在發送字發送完之后。在發送中止信號之后,將繼續發送數據到 Tx 的 FIFO 中(Tx 將保持寄存器對于 Non-FIFO 模式來說)。

Data Reception

與發送一樣,接收到的數據結構同樣是可編程的。它包括一位起始位、5~8位數據位、一位可選的奇偶校驗位和1~2位停止位在線性控制寄存器中(ULCONn)。接收器可以探測 overrun error,parity error,frame error和break condition,每種錯誤都有相應的錯誤標志位。

  • overrun error 代表在舊數據被讀取前新數據已經將舊數據重寫。
  • parity error 代表接收器已經探測到不期望的奇偶校驗值。
  • frame error 代表接收到的數據沒有默認的停止位。
  • break condition 代表 RxDn 輸入保持在邏輯0的時間比一幀發送數據的時間長

當在3個字長時間內沒有接收到任何數據并且 Rx FIFO 在 FIFO 模式下非空,將會產生接收超時(Receive time-out condition)。

Auto Flow Control(AFC)

S3C2410X 的串口0和串口1支持自動流控制,并帶有 nRTS 和 nCTS信號。如果用戶想連接串口到終端,那么需要在 UMCONn 寄存器中取消自動流控制位并且用軟件控制 nRTS 信號。

在 AFC 模式中, nRTS 根據接收器的狀態和 nCTS 信號來控制發送器的操作。當 nCTS 信號被激活時(在 AFC 中,nCTS 代表其他串口的 FIFO 已經準備好接收數據),串口的發送器發送 FIFO 中的數據。在接收數據前,如果接收器的 FIFO 有超過兩個字節的空閑,那么 nRTS 信號將被激活;如果接收器的 FIFO 中空閑少于一個字節時, nRTS 信號將停止激活(在 AFC 模式中, nRTS 代表它本身的接收FIFO 已經準備好接收數據)。

選區_002.png

NOTE: 串口2不支持 AFC 功能,因為 S3C2410X 沒有 nRTS2 和 nCTS2。

Example of Non Auto-Flow control(controlling nRTS and nCTS by software)

Rx operation with FIFO

  1. 選擇接收模式(Interrupt or DMA mode)。
  2. 在 UFSTATn 寄存器中檢查 Rx FIFO 中當前的字節數。如果數值少于15,用戶需要將 UMCONna[0] 的值設為1(激活 nRTS);如果大于等于15,用戶應把值設為0(取消 nRTS)。
  3. 重復執行第二步。

Tx operation with FIFO

  1. 選擇發送模式(Interrupt or DMA mode)。
  2. 檢查 UMSTATn[0] 的值。如果值為1(激活 nCTS),用戶可以將數據寫到 Tx FIFO 寄存器中。
RS-232C interface

如果用戶想把串口連接到終端上, nRTS, nCTS, nDSR, nDTR, DCD 和 nRI 信號是必須的。由于 AFC 不支持 RS-232C 接口,如果用戶要使用這種接口,需要通過軟件控制通用 I/O 接口來控制這些信號。

Interrupt/DMA Request Genration

S3C2410X 的每個串口有7種狀態:Overrun error, Parity error, Frame error, Break, Receive buffer data ready, Transmit buffer empty 和 Transmit shifter empty。所有這些狀態都通過相應的串口狀態寄存器(UTRSTATn/UERSTATn)表現出來。

Overrun error, parity error, frame error 和 break condition 是接收錯誤狀態,它們都能引發接收錯誤狀態中斷請求,如果接收錯誤狀態中斷使能位(receive-error-status-interrupt-enable)被設置成1在 UCONn 中。當接收錯誤狀態中斷請求(receive-error-status-interrupt-request)被檢測到,導致請求的信號可以通過讀取 UERSTSTn 的值來被識別。

如果在接收模式下控制寄存器(UCONn)中的值被設為1(Interrupt request or polling mode),在 FIFO 模式下,當接收器將接收緩沖器中的數據發送到接收 FIFO 中并且接收到的數據量達到 Rx FIFO 的觸發等級,Rx 中斷將會產生。在 Non-FIFO 模式中,如果設置為 Interrupt request and polling 模式,當把接收緩沖器中的數據發送到接收保持寄存器將會引起 Rx 中斷。

如果在發送模式下控制寄存器被設置為 Interrupt request or polling 模式,當發送器將發送 FIFO 中的數據發送到發送緩沖器并且發送 FIFO 中剩余的數據量達到 Tx FIFO 的觸發等級, Tx 中斷將會產生。在 Non-FIFO 模式中,如果設置為 Interrupt request and polling 模式,當把發送保持寄存器中的數據發送到發送緩沖器時將會引起 Tx 中斷。

如果控制寄存器被設為 DMAn request 模式,那么在上面提到的發送模式和接收模式中,DMAn 請求將會取代 Rx 或 Tx 中斷。

選區_003.png

UART Error Status FIFO

除了 Rx FIFO 寄存器,串口還有錯誤狀態隊列(error status FIFO)。這個錯誤狀態隊列記錄了 FIFO 寄存器中接收到的哪個數據是錯誤的。當帶有錯誤的數據準備被讀出時,錯誤中斷將會產生。為了清除錯誤狀態隊列(error status FIFO),需要讀取 URXHn 和 UERSTATn 寄存器。

For example

假設 UART Rx FIFO 連續地收到了 A,B,C,D 和 E 五個字符,并且當接收到 ‘B’ 時發生 frame error,接收到 ‘D’ 時發生 parity error。

實際上串口接收到錯誤將不會產生任何錯誤中斷,因為收到的錯誤字符還沒有被讀出來。當錯誤字符被讀出時發生錯誤中斷。

Figure 11-3 shows the UART receiving the five characters including the two errors.

TimeSequence FlowError InterruptNote
#0When no character is read out--
#1A,B,C,D,and E is received--
#2After A is read outThe frame error (in B) interrupt occurs.The 'B' has to be read out
#3After B is read out--
#4After C is read outThe parity error (in D) interrupt occurs.The 'D' has to be read out
#5After D is read out--
#6After E is read out--

選區_004.png

Baud-Rate Generation

每個串口的波特率發生器給發送器和接收器提供串行時鐘。波特率發生器的時鐘源可以選擇 S3C2410S 的內部系統時鐘或 UCLK。換句話說,分頻因子是可以選擇的通過設置 UCONn 中的時鐘選項。波特率時鐘是通過在串口波特率分頻因子寄存器(UART baud-rate divisor register) UBRDIVn 中設置16位的分頻因子來分頻時鐘源(PCLK or UCLK)。 UBRDIVn 可以通過下面的公式確定:

UBRDIVn = (int)(PCLK/(bps * 16)) - 1

分頻因子的范圍1~(2^16^-1)。

為了準確地操作串口,S3C2410X 還支持使用 UCLK 作為分頻源。如果 S3C2410X 使用外部串口設備或系統提供的額 UCLK,那么串口的串行時鐘將和 UCLK 同步。因此用戶可以更加準確的操作串口。UBRDIVn 可以通過下面公式確定:

UBRDIVn = (int)(UCLK/(bps * 16)) - 1

分頻因子的范圍1~(2^16^-1),并且 UCLK 應該比 PCLK 小。

For example:如果波特率是115200 bps 并且 PCLK 和 UCLK 是 40 MHz, UBRDIVn 如下確定:

UBRDIVn = (int)(40000000/(115200 * 16)) - 1        = (int)(21.7) - 1        = 21 - 1 = 20
UART baud-rate generator error tolerance

串口10位數據的時間錯誤(time error)應該小于 1.87%(3/160)

tUPCLK = (UBRDIVn + 1) * 16 * 10 / PCLK        tUPCLK:Real UART 10-bit timetUEXACT = 10 / baud-rate        tUEXACT:Ideal UART 10-bit timeUART error = (tUPCLK - tUEXACT) / tUEXACT * 100%
Loopback Mode

S3C2410X 的串口提供了一個測試模式能夠幫助隔離通信線路中的錯誤,叫做回環模式。這個模式能開啟串口中 RXD 和 TXD 的連接。因此在這個模式中,發送的數據能夠經過自身的 RXD 接收到接收器中。這個特性可以允許處理器檢驗內部發送和接收數據的頻道路徑。這個模式可以在串口控制寄存器(UCONn)中回環位(loopback bit)進行設置。

Break Condition

Break 信號被定義為一幀發送數據時間內輸出的發送數據中連續的低電平信號。

Infra-Red(IR) Mode

S3C2410X 的串口模塊可以通過設置串口線性控制器(ULCONn)的紅外模式位(Infra-red-mode bit)來支持紅外發送和接收。 Figure 11-4 舉例說明如何執行 IR 模式。

在 IR 發送模式中,發送脈沖發出正常的串行發送率 3/16;在 IR 接收模式中,接收器一定要在 3/16 脈沖期間去識別出 0 值。

選區_005.png選區_006.png選區_007.png選區_008.png

UART SPECIAL REGISTERSUART LINE CONTROL REGISTER

在串口模塊中有3個串口線性控制寄存器,分別是 ULCON0,ULCON1 和 ULCON2。

選區_009.png

UART CONTROL REGISTER

在串口模塊中有3個串口控制寄存器,分別是 UCON0,UCON1 和 UCON2。

選區_010.png

UART CONTROL REGISTER(CONTINUED)

選區_011.png

NOTE: 在帶有 FIFO 的 DMA 模式下,當串口沒有達到 FIFO 的觸發等級并且在3個字的時間內(接收超時)沒有收到數據, Rx 中斷將會產生同時用戶應該檢查 FIFO 的狀態并把剩下的數據讀完。

UART FIFO CONTROL REGISTER

在串口模塊中有3個串口 FIFO 控制寄存器,分別是 UFCON0,UFCON1 和 UFCON2。

選區_012.png

NOTE: 在帶有 FIFO 的 DMA 模式下,當串口沒有達到 FIFO 的觸發等級并且在3個字的時間內(接收超時)沒有收到數據, Rx 中斷將會產生同時用戶應該檢查 FIFO 的狀態并把剩下的數據讀完。

UART MODEM CONTROL REGISTER

在串口模塊中有2個串口終端控制寄存器,分別是 UMCON0 和 UMCON1。

選區_013.png

NOTE:串口2不支持 AFC 功能,因為 S3C2410X 沒有 nRTS2 和 nCTS2。

UART TX/RX STATUS REGISTER

在串口模塊中有3個串口 TX/RX 狀態寄存器,分別是 UTRSTAT0,UTRSTAT1 和 UTRSTAT2。

選區_014.png

UART ERROR STATUS REGISTER

在串口模塊中有3個串口 Rx 錯誤狀態寄存器,分別是 UERSTAT0,UERSTAT1 和 UERSTAT2。

選區_015.png

NOTE:當串口錯誤狀態寄存器被讀過之后,這些位將會自動被清0。

UART FIFO STATUS REGISTER

在串口模塊中有3個串口 FIFO 狀態寄存器,分別是 UFSTAT0,UFSTAT1 和 UFSTAT2。

選區_016.png

UART MODEM STATUS REGISTER

在串口模塊中有2個串口終端狀態寄存器,分別是 UMSTAT0 和 UMSTAT1。

選區_017.png

UART TRANSMIT BUFFER REGISTER(HOLDING REGISTER & FIFO REGISTER)

在串口模塊中有3個串口發送緩沖寄存器,分別是 UTXH0,UTXH1 和 UTXH2。UTXHn 有8位發送數據。

選區_018.png

NOTE:(L):The endian mode is Little endian.     (B):The endian mode is Big endian.
UART RECEIVE BUFFER REGISTER(HOLDING REGISTER & FIFO REGISTER)

在串口模塊中有3個串口接收緩沖寄存器,分別是 URXH0,URXH1 和 URXH2。URXHn 有8位接收數據。

選區_019.png

NOTE:當發生 overrun error 時,需要讀取 URXHn 寄存器。否則,即使清空 UERSTATn 中的 overrun 標志位,當再次接收到數據時同樣將產生 overrun error。

UART BAUD RATE DIVISOR REGISTER

在串口模塊中有3個串口波特率分頻寄存器,分別是 UBRDIV0,UBRDIB1 和 UBRDIV2。存儲在波特率分頻寄存器(UBRDIVn)中的值如下確定串行 Tx/Rx 的時鐘頻率:

     UBRDIVn = (int)(PCLK / (bps * 16)) - 1     or     UBRDIVn = (int)(UCLK / (bps * 16)) - 1

分頻因子的范圍1~(2^16^-1),并且 UCLK 應該比 PCLK 小。

For example:如果波特率是115200 bps 并且 PCLK 和 UCLK 是 40 MHz, UBRDIVn 如下確定:

UBRDIVn = (int)(40000000/(115200 * 16)) - 1        = (int)(21.7) - 1        = 21 - 1 = 20

選區_020.png


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 丘北县| 津市市| 镇康县| 武安市| 平阴县| 肃南| 行唐县| 石阡县| 温州市| 田阳县| 安丘市| 沁源县| 县级市| 英德市| 北海市| 司法| 哈密市| 边坝县| 开平市| 资溪县| 沧源| 广宁县| 瑞丽市| 古交市| 双江| 涞水县| 苏州市| 武宁县| 北碚区| 南安市| 清徐县| 兴文县| 郧西县| 禄丰县| 长寿区| 治多县| 张家川| 治多县| 绥德县| 托里县| 和龙市|