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