欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

ARM裸机串口

程序员文章站 2022-04-01 22:04:47
...

硬件还是tiny6410 , s3c6410, 手册上得知这款芯片有4个UART端口,可以通过中断或者DMA进行传输,速率可达3Mbps,每个UART通道有2个64字节的FIFO分别用于接受和发送。
这是它的结构图:
ARM裸机串口

UART的使用挺简单的,和cortex-M的32差不多,先配置引脚复用为串口模式,然后设置UART的数据位,格式等,最后设置波特率。
这里配置串口0 吧,先看电路图:
ARM裸机串口

串口0 是接到了GPA0 和GPA1 上面,那就直接把GPA0和GPA1配置为TXD和RXD就可以了。

GPACON &= 0x00;  //将A0和A1的寄存器位置 清0
GPACOM |= 0x22;  //配置他们为串口模式

ARM裸机串口

这是串口0 相关的寄存器:
ULCON用来设置数据的格式,这里配置为8位,无校验,无停止位。
UCON用来配置串口的时钟选择和使用模式选择,是中断还是DMA。这里配为PCLK ,发送接受用轮询。
UFCON0 设置FIFO,UMCON0 设置自动流控制的。
UBRDIV0 和UDIVSLOT0 两个配合设置波特率,他们的关系有这么一个公式:
UBRDIV + UDIVSLOT/16 = (PCLK / (波特率 x 16)) - 1。 我们的时钟配置PCLK = 66.5Mhz ,波特率 115200,代入算得UDIVSLOT0 = 0x01,UBRDIV0 = 35;

ULCON0 = 0x03;  ///8位寄存器,写入全部控制字了,所以不用担心影响其他位而进行& 和 | 什么的操作。
UCON0 = 0x05;
UFCON0 = 0x01;
UMCON0 = 0x00;  

//配置波特率
UBRDIV0 = 35;
UDIVSLOT0 = 0x01;

剩下几个寄存器就是实际操作UART用到的了, UFSTAT 用来判断接受缓存和发送缓存的状态,方便去读或继续发。
URXH 和UTXH 就是接受和发送寄存器。所以串口发送和接受的函数是:

char getchar(void)
{
    while((UFSTAT0 & 0x7F) ==0);
    return URXH0;
}

void putchar(char c)
{
    while(UFSTAT0 & (1<<14));
    UTXH0 = c;
}
相关标签: arm 硬件 UART