S3C2440 UART串口驱动2
扫描二维码
随时随地手机看文章
通过MINI2440硬件CPU管脚图可以看出,RSTXD0和RSRXD0连接到CPU的GPH2和GPH3管脚上的,而GPH2和GPH3是CPU复用管脚,因此我们要对GPH2和GPH3对应寄存器进行设置,其对应寄存器为GPHCON。
表2-23 GPIO端口H设置寄存器(GPHCON)
寄存器名
地址
是否读写
描述
复位默认值
GPHCON
0x56000070
R/W
GPIO端口H配置寄存器
0x0
GPHDAT
0x56000074
R/W
GPIO端口H数据寄存器
未定义
GPHUP
0x56000078
R/W
GPIO端口H上拉无效寄存器
0x000
GPHCON
位
描述
初始值
…
…
…
…
GPH3
[7:6]
设置当前管脚功能:
00 =输入端口01 =输出端口
10 = RXD[0]配置为串口0的接收数据管脚
11 =保留
0
GPH2
[5:4]
设置当前管脚功能:
00 =输入端口01 =输出端口
10 = RXD[0]配置为串口0的接收数据管脚
11 =保留
0
…
…
…
…
GPHCON[7:6]和GPHCON[5:4]为RSTXD0和RSRXD0管脚设置位,将其功能设置为了UART专用通信管脚,因此应该设置其为0b10,分别用于UART数据的接收和发送。
GPHCON | = 0xa0;
表2-24 GPIO端口H上拉电阻设置寄存器(GPHUP)
GPHUP
位
描述
初始值
GPH[10:0]
[10:0]
设置对应管脚GPHn的是否启用上拉功能
0 =启用上拉功能
1 =禁用上拉功能
0
GPHUP上拉电阻设置寄存器:上拉电阻用来稳定电平信号,保障传输数据的正确,GPHUP里设置其内部上拉。
GPHUP = 0x0;
表2-25 UART0串行控制寄存器(ULCON0)
寄存器名
地址
是否读写
描述
复位默认值
ULCON0
0x50000000
R/W
串口0串行控制寄存器
0x00
ULCON0
位
描述
初始值
保留
[7]
0
红外模式
[6]
选择串口0是否使用红外模式:
0 =正常通信模式
1 =红外通信模式
0
校验模式
[5:3]
设置串口0在数据接收和发送时采用的校验方式:
0xx =无校验
100 =奇校验
101 =偶校验
110 =强制校验/检测是否为1
111 =强制校验/检测是否为0
000
停止位
[2]
设置串口0停止位数:
0 =每个数据帧一个停止位
1 =每个数据帧二个停止位
0
数据位
[1:0]
设置串口0数据位数:
00 = 5个数据位01 = 6个数据位
10 = 7个数据位11 = 8个数据位
00
通过设置ULCON0来设置UART0通信方式,ULCON0[6]选择通信方式为一般通信模式或红外通信模式,ULCON0[5:3]设置串口0校验方式,ULCON0[2]设置串口0停止位数,ULCON0[1:0]设置串口0的数据位数。
我们选择一般通信模式,无校验位,1个停止位,8个数据位的数据通信方式。因此:
ULCON0 = 0x03;
表2-26 UART0串口控制寄存器(UCON0)
寄存器名
地址
是否读写
描述
复位默认值
UCON0
0x50000004
R/W
串口0控制寄存器
0x00
UCON0
位
描述
初始值
FCLK分频因子
[15:12]
当UART0选择FCLK作为时钟源时,设置其FCLK的分频因子
UART0工作时钟频率= FCLK/ FCLK分频因子+ 6
0000
UART时钟源选择
[11:10]
选择UART0的工作时钟PCLK,UEXTCLK,FCLK/n:
00,10 = PCLK
01 = UEXTCLK
11 = FCLK/n
当选择FCLK/n作为UART0工作时钟时还要做其它设置,具体请读者自行查看硬件手册
00
发送数据中断
产生类型
[9]
设置UART0中断请求类型,在非FIFO传输模式下,一旦发送数据缓冲区为空,立即产生中断信号,在FIFO传输模式下达到发送数据触发条件时立即产生中断信号:
0 =脉冲触发
1 =电平触发
0
接收数据中断
产生类型
[8]
设置UART0中断请求类型,在非FIFO传输模式下,一旦接收到数据,立即产生中断信号,在FIFO传输模式下达到接收数据触发条件时立即产生中断信号:
0 =脉冲触发
1 =电平触发
0
接收数据超时
[7]
设置当接收数据时,如果数据超时,是否产生接收中断:
0 =不开启超时中断1 =开启超时中断
10 = 7个数据位11 = 8个数据位
0
接收数据错误中断
[6]
设置当接收数据时,如果产生异常,如传输中止,帧错误,校验错误时,是否产生接收状态中断信号:
0 =不产生错误状态中断1 =产生错误状态中断
0
回送模式
[5]
设置该位时UART会进入回送模式,该模式仅用于测试
0 =正常模式1 =回送模式
0
发送终止信号
[4]
设置该位时,UART会发送一个帧长度的终止信号,发送完毕后,该位自动恢复为0
0 =正常传输1 =发送终止信号
0
发送模式
[3:2]
设置采用哪个方式执行数据写入发送缓冲区
00 =无效
01 =中断请求或查询模式
10 = DMA0请求
00
接收模式
[1:0]
设置采用哪个方式执行数据写入接收缓冲区
00 =无效
01 =中断请求或查询模式
10 = DMA0请求
00
通常UART串口采用PCLK作为输入工作时钟,采用简单的轮询方式进行数据接收和发送,不开启数据接收超时,数据产生错误时不产生错误状态中断,因此:
UCON0 = 0x05;
表2-27 UART FIFO控制寄存器(UFCON0)
寄存器名
地址
是否读写
描述
复位默认值
UFCON0
0x50000008
R/W
串口0 FIFO控制寄存器
0x00
UFCON0
位
描述
初始值
发送数据
触发级别
[7:6]
设置FIFO发送模式的触发级别:
00 = FIFO为空触发01 = 16字节触发
10 = 32字节触发11 = 48字节触发
00
接收数据
触发级别
[5:4]
设置FIFO接收模式的触发级别:
00 = FIFO为空触发01 = 16字节触发
10 = 32字节触发11 = 48字节触发
00
保留
[3]
0
发送FIFO重置
[2]
在重置FIFO后自动清除发送缓冲区
0 =正常模式1 =自动清除
0
接收FIFO重置
[1]
在重置FIFO后自动清除接收缓冲区
0 =正常模式1 =自动清除
0
启用FIFO
[0]
0 =不启用FIFO1 =启用FIFO
0