- 嵌入式系統(tǒng)設(shè)計與實踐:Linux篇
- 季江民
- 475字
- 2020-04-03 09:21:48
4.4 異步串行口
S3C2410自帶3個異步串行口控制器,每個控制器有16個字節(jié)的FIFO,最大波特率115.2Kbit/s, UART行控制寄存器ULCONn、控制數(shù)寄存器UCONn、讀寫狀態(tài)寄存器UTRSTAT、FIFO控制寄存器UFCONn、UART MODEM控制寄存器UMCONn、讀寫狀態(tài)寄存器UTRSTATn、FIFO狀態(tài)寄存器UFSTATn、波特率分頻寄存器UBRDIVn。
(1)端口H控制寄存器功能如表4.19所示,端口H控制寄存器共有引腳21個,0~20腳,每2個位控制1個引腳。如果控制位為00時引腳為輸入,控制位為01時引腳為輸出,控制位為10時引腳為特殊功能,控制位為11時引腳為保留功能。
表4.19 端口H控制寄存器及功能

(2)端口上拉寄存器(GPBUP-GPHUP)
0接上拉電阻,1不接上拉電阻
(3)S3C2410中UART行控制寄存器ULCONn如表4.20所示。
表4.20 UART行控制寄存器VLCONn

(4)S3C2410中FIFO控制寄存器UFCONn如表4.21所示。
表4.21 FIFO控制寄存器UFCONn

(5)S3C2410中UART MODED控制寄存器UMCONn如表4.22所示。
表4.22 UARTMODED控制寄存器UMCONn

S3C2410中每個UART的寄存器有11個之多(共有3個UART),考慮比較簡單的情況,用到的寄存器也有8個。不過初始化就用去了5個寄存器,剩下的3個用于接收、發(fā)送數(shù)據(jù)。下面應(yīng)用實例說明串行通信的應(yīng)用。
例1:假設(shè)在數(shù)據(jù)傳送中設(shè)置傳送8個數(shù)據(jù)位,1個停止位,無校驗,正常操作模式,發(fā)送、接收都使用中斷或查詢方式,請根據(jù)實際需求設(shè)置異步通信寄存器,實際操作過程如下:
(1)初始化
① 把使用到的引腳GPH2、GPH3定義為TXD0、RXD0。
GPHCON |= 0xa0 //10100000 GPHUP |= 0x0c //上拉
② 設(shè)置ULCON0
如把ULCON0(UART channel 0 line control register)設(shè)定為:8個數(shù)據(jù)位,1個停止位,無校驗,正常操作模式(與之相對的是Infra-Red Mode,此模式表示0、1的方式比較特殊)。則ULCON0值為0x03。
③ 設(shè)置UCON0
如把UCON0設(shè)定為除了位[3:0],其他位都使用默認(rèn)值。位[3:0]=0b0101表示:發(fā)送、接收都使用“中斷或查詢方式”,則把UCON0值賦為0x05。
④ 設(shè)置UFCON0
如把UFCON0的功能設(shè)定為不使用FIFO,則設(shè)為默認(rèn)值0。
⑤ 設(shè)置UMCON0
如果把UMCON0設(shè)定為不使用流控,則設(shè)為默認(rèn)值0x00。
⑥ 設(shè)置UBRDIV0
UBRDIV0未使用PLL,采用PCLK=12MHz,設(shè)置波特率為57600Bd,則由公式:
UBRDIVn = (int)(PCLK / (bps x 16))-1
可以計算得UBRDIV0 = 12,根據(jù)S3C2410數(shù)據(jù)手冊的誤差公式,驗算此波特率是否在可容忍的誤差范圍之內(nèi),如果不在,則需要更換另一個波特率。經(jīng)驗算UBRDIV0可設(shè)為12。
(2)發(fā)送數(shù)據(jù)
① 設(shè)置UTRSTAT0
如果把UTRSTAT0功能設(shè)置如下:
位[2]:無數(shù)據(jù)發(fā)送時,自動設(shè)為1。當(dāng)使用串口發(fā)送數(shù)據(jù)時,先讀此位以判斷是否有數(shù)據(jù)正在占用發(fā)送口。
位[1]:發(fā)送FIFO是否為空。
位[0]:接收緩沖區(qū)是否有數(shù)據(jù),若有,此位設(shè)為1。實驗中需要不斷查詢此位,判斷是否有數(shù)據(jù)已經(jīng)被接收。
② 給UTXH0寄存器賦值
實驗中要把發(fā)送的數(shù)據(jù)寫入UTXH0(UART channel 0 transmit buffer register )此寄存器。
(3)接收數(shù)據(jù)
① 根據(jù)位[0],先判斷寄存器UTRSTAT0的緩沖區(qū)是否有數(shù)據(jù)。
② 當(dāng)查詢到UTRSTAT0位[0]=1時,讀此寄存器獲得串口接收到的數(shù)據(jù)。
串口數(shù)據(jù)傳送的三個函數(shù):init_uart、putc、getc分別表示串口初始化、發(fā)送數(shù)據(jù)與接收數(shù)據(jù)。
void init_uart( ) //初始化UART { GPHCON|= 0xa0; //GPH2, GPH3 used as TXD0, RXD0 GPHUP = 0x0c; //GPH2, GPH3內(nèi)部上拉 ULCON0 = 0x03; //8N1(8個數(shù)據(jù)位,無校驗位,1個停止位) UCON0 = 0x05; //查詢方式 UFCON0 = 0x00; //不使用FIFO UMCON0 = 0x00; //不使用流控 UBRDIV0= 12; //波特率為57600 } void putc(unsigned char c) { while( ! (UTRSTAT0 & TXD0READY) ); //不斷查詢,直到可以發(fā)送數(shù)據(jù) UTXH0 = c; //發(fā)送數(shù)據(jù) } unsigned char getc( ) { while( ! (UTRSTAT0 & RXD0READY) ); //不斷查詢,直到接收到了數(shù)據(jù) return URXH0; //返回接收到的數(shù)據(jù) }
4.5 IIC總線接口
IIC中有一條串行數(shù)據(jù)線(SDA),一條串行時鐘線(SCL)。數(shù)據(jù)傳送時,主機先發(fā)出開始S信號,然后發(fā)出8位數(shù)據(jù),這8位數(shù)據(jù)中的前7位為從機的地址,第8位表示傳輸?shù)姆较颍?表示寫操作,1表示讀操作)。在S3C2410中IIC總線控制寄存器有4個,分別是IICCON、IICSTAT、IICADD、IICDS。SDA線上的數(shù)據(jù)從IICDS寄存器發(fā)出(或傳入IICDS); IICADD寄存器中保存S3C2410當(dāng)作從機時的地址;IICCON、IICSTAT兩個寄存器用來控制或標(biāo)識各種狀態(tài),如選擇工作模式、發(fā)出S或P信號、接收ACK信號、檢測是否收到ACK信號。
(1)IICCON寄存器
IICCON寄存器各位功能及描述如表4.23所示。
表4.23 IICCON寄存器各位的功能描述

(2)IICSTAT寄存器
IICSTAT寄存器各位功能及描述如表4.24所示。
表4.24 IICSTAT寄存器各位的功能描述

(3)IICADD寄存器
[7:1]表示從機地址,當(dāng)IICSTAT[4]為0時才可寫入,在任何時間都可以讀出。
(4)IICDS寄存器
[7:0]保存的是要發(fā)送或已經(jīng)接收的數(shù)據(jù),當(dāng)IICSTAT[4]為1時,才可以寫入,在任何時間都可讀出。
例:分析下列函數(shù)IIC_init
void IIC_init(void) { GPEUP |=0xc000 ; GPECON |=0xa0000000 ; INTMSK &= ~(BIT_IIC); IICCON=( 1<<7) | (0<<6) | (1<<5) |(0xf) ; IICADD = 0x10; //S3C2410 slave address = [7:1] IICSTAT =0x10; }
分析:語句GPEUP |=0xc000;表示禁止內(nèi)部上拉,語句GPECON |=0xa0000000;表示選擇引腳GPE15到IICSDA, GPE14到IICSCL, Bit[7]=1,使能ACK, bit[6]=0, IICCLK=PCLK/16, bit[5]=1,使能中斷,Bit[3:0]=0xf, Tx_clock=IICCLK/16,如PCLK=50MHz, IICCLK=3.125MHz, Tx_clock=0.195MHz, IIC串行輸出使能Rx/Tx。
- 嵌入式實時操作系統(tǒng)原理與最佳實踐
- 輕松學(xué)會單片機
- MC9S12XS單片機原理及嵌入式系統(tǒng)開發(fā)
- 嵌入式Qt實戰(zhàn)教程
- 零起點學(xué)Proteus單片機仿真技術(shù)
- AVR單片機實用程序設(shè)計
- 嵌入式系統(tǒng)Linux內(nèi)核開發(fā)實戰(zhàn)指南(ARM平臺)
- 基于STM32的嵌入式系統(tǒng)設(shè)計與實踐
- 單片微型計算機原理及應(yīng)用
- 零基礎(chǔ)學(xué)51單片機(C語言版)
- 嵌入式系統(tǒng)與Qt程序開發(fā)
- STC 32位 8051單片機原理與應(yīng)用
- 我和PIC單片機:基于PIC18
- 愛上單片機(第4版)
- 丹佛斯變頻器控制技術(shù)