我是靠谱客的博主 活力柜子,最近开发中收集的这篇文章主要介绍ARM裸机学习二:S3C2440的串口使用1.串口的初始化(仅使用基本功能)2.其他寄存器说明3.串口的输入输出函数的编写,觉得挺不错的,现在分享给大家,希望可以做个参考。
概述
UART
- 1.串口的初始化(仅使用基本功能)
- 2.其他寄存器说明
- 3.串口的输入输出函数的编写
1.串口的初始化(仅使用基本功能)
1.首先设置复用引脚,以串口0为例,RXD代表接受数据的引脚,TXD代表发送数据的引脚,这两个是复用引脚,需要在GPHCON寄存器中设置引脚复用
2.设置GPH的上拉
3.设置UCON0寄存器,简单的串口功能需要设置:
- 第10,11位,选择时钟源,这里可以设置00或者01来选择PCLK;
- 第0,1位,选择接收模式,这里设置成01,也就是中断或查询模式
- 第2,3位,选择发送模式,这里设置成01,也就是中断或查询模式
4.设置波特率,通过设置UBRDIV0寄存器来设置,设置的值的计算公式为:
UBRDIVn = (int)( UART 时钟 / ( 波特率 × 16) ) –1
这里的 UART设置我们前面设置为PCLK,波特率使用115200
5.设置数据格式,通过ULCON0寄存器来设置,这里设置成8N1,也就是8位数据位,没有校验位,一个停止位
代码示例:
/*UART registers*/
#define ULCON0
(volatile unsigned long *)0x50000000
#define UCON0
(volatile unsigned long *)0x50000004
#define UBRDIV0
(volatile unsigned long *)0x50000028
#define UART_CLK
PCLK
#define UART_BAUD_RATE
115200
#define UART_BRD
((UART_CLK
/ (UART_BAUD_RATE * 16)) - 1)
void uart_init()
{
//IO ¸´ÓÃ
(*GPHCON)
|= ((0x2<<(2*2)) | (0x2<<(3*2))); //GPH2
GPH3 复用
(*GPHUP)
= 0xc; //1100
设置GPH2,GPH3引脚下拉
(*ULCON0)
= 0x03; // 8N1
数据格式
(*UCON0)
= 0x05;
// PCLK,中断或者查询模式
(*UBRDIV0) = UART_BRD; //115200
}
2.其他寄存器说明
1.UTRSTAT0: TX/RX的状态寄存器,第1位如果是1,代表发送缓冲空,可以发送数据,0则代表有数据需要等待;第0位如果是1,代表接收缓冲器接收到有效数据,0代表未接收到
2.UTXH0:检测发送状态寄存器如果为空,则直接写入数据就会自动发送
3.URXH0:可以将改寄存器的值赋给变量实现读取接受到的数据
3.串口的输入输出函数的编写
输出字符到PC端:
#define UTRSTAT0
(*(volatile unsigned long *)0x50000010)
#define UTXH0
(*(volatile unsigned char *)0x50000020)
void printf_c(unsigned char c)
{
while (!(UTRSTAT0 & 2));
UTXH0 = c;
}
void printf_s(unsigned char *s)
{
int i=0;
while(s[i++]!='