S3C2440 UART串口驅(qū)動(dòng)2
通過MINI2440硬件CPU管腳圖可以看出,RSTXD0和RSRXD0連接到CPU的GPH2和GPH3管腳上的,而GPH2和GPH3是CPU復(fù)用管腳,因此我們要對(duì)GPH2和GPH3對(duì)應(yīng)寄存器進(jìn)行設(shè)置,其對(duì)應(yīng)寄存器為GPHCON。
表2-23 GPIO端口H設(shè)置寄存器(GPHCON)
寄存器名
地址
是否讀寫
描述
復(fù)位默認(rèn)值
GPHCON
0x56000070
R/W
GPIO端口H配置寄存器
0x0
GPHDAT
0x56000074
R/W
GPIO端口H數(shù)據(jù)寄存器
未定義
GPHUP
0x56000078
R/W
GPIO端口H上拉無效寄存器
0x000
GPHCON
位
描述
初始值
…
…
…
…
GPH3
[7:6]
設(shè)置當(dāng)前管腳功能:
00 =輸入端口01 =輸出端口
10 = RXD[0]配置為串口0的接收數(shù)據(jù)管腳
11 =保留
0
GPH2
[5:4]
設(shè)置當(dāng)前管腳功能:
00 =輸入端口01 =輸出端口
10 = RXD[0]配置為串口0的接收數(shù)據(jù)管腳
11 =保留
0
…
…
…
…
GPHCON[7:6]和GPHCON[5:4]為RSTXD0和RSRXD0管腳設(shè)置位,將其功能設(shè)置為了UART專用通信管腳,因此應(yīng)該設(shè)置其為0b10,分別用于UART數(shù)據(jù)的接收和發(fā)送。
GPHCON | = 0xa0;
表2-24 GPIO端口H上拉電阻設(shè)置寄存器(GPHUP)
GPHUP
位
描述
初始值
GPH[10:0]
[10:0]
設(shè)置對(duì)應(yīng)管腳GPHn的是否啟用上拉功能
0 =啟用上拉功能
1 =禁用上拉功能
0
GPHUP上拉電阻設(shè)置寄存器:上拉電阻用來穩(wěn)定電平信號(hào),保障傳輸數(shù)據(jù)的正確,GPHUP里設(shè)置其內(nèi)部上拉。
GPHUP = 0x0;
表2-25 UART0串行控制寄存器(ULCON0)
寄存器名
地址
是否讀寫
描述
復(fù)位默認(rèn)值
ULCON0
0x50000000
R/W
串口0串行控制寄存器
0x00
ULCON0
位
描述
初始值
保留
[7]
0
紅外模式
[6]
選擇串口0是否使用紅外模式:
0 =正常通信模式
1 =紅外通信模式
0
校驗(yàn)?zāi)J?/p>
[5:3]
設(shè)置串口0在數(shù)據(jù)接收和發(fā)送時(shí)采用的校驗(yàn)方式:
0xx =無校驗(yàn)
100 =奇校驗(yàn)
101 =偶校驗(yàn)
110 =強(qiáng)制校驗(yàn)/檢測(cè)是否為1
111 =強(qiáng)制校驗(yàn)/檢測(cè)是否為0
000
停止位
[2]
設(shè)置串口0停止位數(shù):
0 =每個(gè)數(shù)據(jù)幀一個(gè)停止位
1 =每個(gè)數(shù)據(jù)幀二個(gè)停止位
0
數(shù)據(jù)位
[1:0]
設(shè)置串口0數(shù)據(jù)位數(shù):
00 = 5個(gè)數(shù)據(jù)位01 = 6個(gè)數(shù)據(jù)位
10 = 7個(gè)數(shù)據(jù)位11 = 8個(gè)數(shù)據(jù)位
00
通過設(shè)置ULCON0來設(shè)置UART0通信方式,ULCON0[6]選擇通信方式為一般通信模式或紅外通信模式,ULCON0[5:3]設(shè)置串口0校驗(yàn)方式,ULCON0[2]設(shè)置串口0停止位數(shù),ULCON0[1:0]設(shè)置串口0的數(shù)據(jù)位數(shù)。
我們選擇一般通信模式,無校驗(yàn)位,1個(gè)停止位,8個(gè)數(shù)據(jù)位的數(shù)據(jù)通信方式。因此:
ULCON0 = 0x03;
表2-26 UART0串口控制寄存器(UCON0)
寄存器名
地址
是否讀寫
描述
復(fù)位默認(rèn)值
UCON0
0x50000004
R/W
串口0控制寄存器
0x00
UCON0
位
描述
初始值
FCLK分頻因子
[15:12]
當(dāng)UART0選擇FCLK作為時(shí)鐘源時(shí),設(shè)置其FCLK的分頻因子
UART0工作時(shí)鐘頻率= FCLK/ FCLK分頻因子+ 6
0000
UART時(shí)鐘源選擇
[11:10]
選擇UART0的工作時(shí)鐘PCLK,UEXTCLK,F(xiàn)CLK/n:
00,10 = PCLK
01 = UEXTCLK
11 = FCLK/n
當(dāng)選擇FCLK/n作為UART0工作時(shí)鐘時(shí)還要做其它設(shè)置,具體請(qǐng)讀者自行查看硬件手冊(cè)
00
發(fā)送數(shù)據(jù)中斷
產(chǎn)生類型
[9]
設(shè)置UART0中斷請(qǐng)求類型,在非FIFO傳輸模式下,一旦發(fā)送數(shù)據(jù)緩沖區(qū)為空,立即產(chǎn)生中斷信號(hào),在FIFO傳輸模式下達(dá)到發(fā)送數(shù)據(jù)觸發(fā)條件時(shí)立即產(chǎn)生中斷信號(hào):
0 =脈沖觸發(fā)
1 =電平觸發(fā)
0
接收數(shù)據(jù)中斷
產(chǎn)生類型
[8]
設(shè)置UART0中斷請(qǐng)求類型,在非FIFO傳輸模式下,一旦接收到數(shù)據(jù),立即產(chǎn)生中斷信號(hào),在FIFO傳輸模式下達(dá)到接收數(shù)據(jù)觸發(fā)條件時(shí)立即產(chǎn)生中斷信號(hào):
0 =脈沖觸發(fā)
1 =電平觸發(fā)
0
接收數(shù)據(jù)超時(shí)
[7]
設(shè)置當(dāng)接收數(shù)據(jù)時(shí),如果數(shù)據(jù)超時(shí),是否產(chǎn)生接收中斷:
0 =不開啟超時(shí)中斷1 =開啟超時(shí)中斷
10 = 7個(gè)數(shù)據(jù)位11 = 8個(gè)數(shù)據(jù)位
0
接收數(shù)據(jù)錯(cuò)誤中斷
[6]
設(shè)置當(dāng)接收數(shù)據(jù)時(shí),如果產(chǎn)生異常,如傳輸中止,幀錯(cuò)誤,校驗(yàn)錯(cuò)誤時(shí),是否產(chǎn)生接收狀態(tài)中斷信號(hào):
0 =不產(chǎn)生錯(cuò)誤狀態(tài)中斷1 =產(chǎn)生錯(cuò)誤狀態(tài)中斷
0
回送模式
[5]
設(shè)置該位時(shí)UART會(huì)進(jìn)入回送模式,該模式僅用于測(cè)試
0 =正常模式1 =回送模式
0
發(fā)送終止信號(hào)
[4]
設(shè)置該位時(shí),UART會(huì)發(fā)送一個(gè)幀長度的終止信號(hào),發(fā)送完畢后,該位自動(dòng)恢復(fù)為0
0 =正常傳輸1 =發(fā)送終止信號(hào)
0
發(fā)送模式
[3:2]
設(shè)置采用哪個(gè)方式執(zhí)行數(shù)據(jù)寫入發(fā)送緩沖區(qū)
00 =無效
01 =中斷請(qǐng)求或查詢模式
10 = DMA0請(qǐng)求
00
接收模式
[1:0]
設(shè)置采用哪個(gè)方式執(zhí)行數(shù)據(jù)寫入接收緩沖區(qū)
00 =無效
01 =中斷請(qǐng)求或查詢模式
10 = DMA0請(qǐng)求
00
通常UART串口采用PCLK作為輸入工作時(shí)鐘,采用簡單的輪詢方式進(jìn)行數(shù)據(jù)接收和發(fā)送,不開啟數(shù)據(jù)接收超時(shí),數(shù)據(jù)產(chǎn)生錯(cuò)誤時(shí)不產(chǎn)生錯(cuò)誤狀態(tài)中斷,因此:
UCON0 = 0x05;
表2-27 UART FIFO控制寄存器(UFCON0)
寄存器名
地址
是否讀寫
描述
復(fù)位默認(rèn)值
UFCON0
0x50000008
R/W
串口0 FIFO控制寄存器
0x00
UFCON0
位
描述
初始值
發(fā)送數(shù)據(jù)
觸發(fā)級(jí)別
[7:6]
設(shè)置FIFO發(fā)送模式的觸發(fā)級(jí)別:
00 = FIFO為空觸發(fā)01 = 16字節(jié)觸發(fā)
10 = 32字節(jié)觸發(fā)11 = 48字節(jié)觸發(fā)
00
接收數(shù)據(jù)
觸發(fā)級(jí)別
[5:4]
設(shè)置FIFO接收模式的觸發(fā)級(jí)別:
00 = FIFO為空觸發(fā)01 = 16字節(jié)觸發(fā)
10 = 32字節(jié)觸發(fā)11 = 48字節(jié)觸發(fā)
00
保留
[3]
0
發(fā)送FIFO重置
[2]
在重置FIFO后自動(dòng)清除發(fā)送緩沖區(qū)
0 =正常模式1 =自動(dòng)清除
0
接收FIFO重置
[1]
在重置FIFO后自動(dòng)清除接收緩沖區(qū)
0 =正常模式1 =自動(dòng)清除
0
啟用FIFO
[0]
0 =不啟用FIFO1 =啟用FIFO
0