S3C6410 UART控制器的简单配置(实现发送字符串功能)

先看下S3C6410的UART控制器介绍:
       S3C6410 通用异步接收和发送器( UART)提供了四个独立的异步串行I / O(SIO)端口.每个异步串行 I/O(SIO)端口通过中断或者直接存储器存取(DMA)模式来操作。换句话说,UART 是通过产生一个中断或 DMA 请求,在 CPU 和 UART 之间传输数据的。该UART使用系统时钟的时间可以支持的比特率最高115.2kb/s。如果一外部设备提供 ext_uclk0 或 ext_uclk1 ,则UART可以以更高的速度运行每个UAR 的通道包含了两个 64 字节收发 FIFO 存储器。
    该S3C6410的UART包括可编程波特率,红外线( IR )的传送/接收,一个或两个停止位插入,5位, 6位,7位或8位数据的宽度和奇偶校验。

下面我们使用channel 0实现一个简单的通过UART向终端发送字符的程序来了解其基本功能。
没有选择使用FIFO功能,数据格式选择8N1,波特率选择115200。
8N1:8个数据位,1个停止位,没有校检位。
115200:每个周期可发送115200个数据位。

      程序运行环境为选择从Nand flash启动,所以要先关闭好看门狗,并将系统时钟设置为533MHz, PCLK为66MHz.

/***************************usrt.S*******************************/  (实现了基本的寄存器配置和一个简单的mputc函数)

#include <uart.h>                               //此处头文件只是简单的将寄存器地址定义为宏,方便使用而已,并没有附上头文件。
#include <gpio.h>

    .text
    .align    2
    .global    uart_init
uart_init:
    ldr r0, =GPACON                     //将GPA0和GPA1设置为UART RXD[0]和UART TXD[0]
    ldr r1, [r0]
    orr r1, r1, #0x22
    str r1, [r0]

    ldr r0, =ULCON0                     //配置UART 0 通道行控制寄存器并设置数据格式为8N1
    mov r1, #((3<<3)|3)
    str r1, [r0]


    ldr r0, =UCON0                      //选择时钟源为PCLK
    ldr r1, =(2<<10)
    str r1, [r0]

                                                    
    ldr r0, =UBRDIV0                 //设置波特率为115200
    mov r1, #34
    str r1, [r0]

    ldr r0, =UDIVSLOT0
    ldr r1, =0xdfdd
    str r1, [r0]

 
    ldr r0, =UCON0                //设置工作模式为轮询或中断
    ldr r1, [r0]
    orr r1, r1, #0x5
    str r1, [r0]
    mov pc, lr

    .align    2
    .global    mputc
mputc:                                   //mputc函数, r0为接受的参数。
    ldr r1, =UTXH0    
    str r0, [r1]
    
    ldr r0, =UTRSTAT0
1:
    ldr r1, [r0]
    tst    r1, #(1<<2)
    beq    1b

    mov pc, lr


/***************************start.S******************************/  向终端发出a-z字符

    .text
    .align    2
    .global    _start
_start:
    bl    set_port                                  //通知协处理器外设地址
    bl    close_wtd                              //关闭看门狗

    bl    clock_init_533                      //初始化系统时钟
  
    bl    uart_init

    mov r4, #'a'    
1:
    cmp    r4, #'z'
    bgt    1f

    mov r0, r4
    bl    mputc

    add    r4, #1
    b    1b
1:

loop:
    b    loop


    .align    2
    .global    set_port
set_port:
    ldr r0, =0x70000013
    mcr p15, 0, r0, c15, c2, 4
    mov pc, lr


    .text
    .align    2
    .global    close_wtd
close_wtd:
    ldr r0, =WTCON
    ldr r1, [r0]
    bic r1, r1, #1
    str r1, [r0]
    mov pc, lr

由于选择nand flash启动,所以必须关闭看门狗,设置系统时钟并通知CPU外设地址范围,设置系统时钟的代码并没有附上。编译成二进制文件后将其烧到nand flash并选择从nand flash启动即可看到终端上输出a-z(需连接minicom).

    


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值