• s3c6410_uart初始化及读写


    参考:

    1)《USER'S MANUAL-S3C6410X》第31章 UART

    2)u-boot uart初始化及读写:u-boot-x.x.x/board/samsumg/smdk6410/lowlevel_init.S

                    u-boot-x.x.x/cpu/s3c64xx/serial.c

    3) 内核串口驱动:linux-x.x.x/driver/tty/serial/s3c6400.c samsung.c serial_core.c

    代码:
    uart.c
     1 #include "uart.h"
     2 
     3 #define GPACON        (*((volatile unsigned long *)0x7f008000))
     4 
     5 #define ULCON0        (*((volatile unsigned long *)0x7f005000))
     6 #define UCON0        (*((volatile unsigned long *)0x7f005004))
     7 #define UFCON0        (*((volatile unsigned long *)0x7f005008))
     8 #define UMCON0        (*((volatile unsigned long *)0x7f00500c))
     9 #define UTRSTAT0    (*((volatile unsigned long *)0x7f005010))
    10 #define UERSTAT0    (*((volatile unsigned long *)0x7f005014))
    11 #define UFSTAT0        (*((volatile unsigned long *)0x7f005018))
    12 #define UMSTAT0        (*((volatile unsigned long *)0x7f00501c))
    13 #define UTXH0        (*((volatile unsigned long *)0x7f005020))
    14 #define URXH0        (*((volatile unsigned long *)0x7f005024))
    15 #define UBRDIV0        (*((volatile unsigned long *)0x7f005028))
    16 #define UDIVSLOT0    (*((volatile unsigned long *)0x7f00502c))
    17 #define UINTP0        (*((volatile unsigned long *)0x7f005030))
    18 #define UINTSP0        (*((volatile unsigned long *)0x7f005034))
    19 #define UINTM0        (*((volatile unsigned long *)0x7f005038))
    20 
    21 void uart0_init(void)
    22 {
    23     GPACON &= ~0xff;
    24     GPACON |= 0X22;
    25     
    26     ULCON0 = 0x03; //data frame: 8n1
    27     /*
    28     clk: pclk
    29     tx int type: level
    30     rx int type: pulse
    31     rx err int enable
    32     tx/rx mode: interrupt or polling 
    33     */
    34     UCON0 = 0x245; 
    35     UFCON0 = 0x00; //disable fifo;
    36     UMCON0 = 0X00; //disable auto flow control(AFC)
    37     /*
    38     DIV_VAL = UBRDIV + (num of 1's in UDIVSLOT)/16
    39     DIV_VAL = (PCLK/(bps*16))-1 = (66000000/115200)-1=34.8
    40     UBRDIV = 34;
    41     num of 1's in UDIVSLOT = 13; 
    42     */
    43     UBRDIV0 = 0x22;
    44     UDIVSLOT0 = 0x1fff;
    45 }
    46 
    47 int uart0_getc(void)
    48 {
    49     while (!(UTRSTAT0 & 0x1));
    50     return (URXH0 & 0xff); 
    51 }
    52 
    53 void uart0_putc(const char c)
    54 {
    55     while (!(UTRSTAT0 & 0x2));
    56     UTXH0 = c;
    57     if (c == '
    ')
    58     {
    59         uart0_putc('
    ');
    60     }
    61 }
    62 
    63 void uart0_puts(const char *s)
    64 {
    65     while (*s)
    66     {
    67         uart0_putc(*s++);
    68     }
    69 }
  • 相关阅读:
    Spring2.5.6学习笔记DI的两种注入方式
    hsqldb2.2.9文档学习笔记之使用hsqldb
    Spring2.5.6学习笔记实例化bean的几种方法
    eclipse4.2插件开发之Hello!EclipsePlugin
    spring boot redis 多数据源配置 spring boot data redis
    docker安装mysql
    docker安装rabbitmq
    docker命令积累
    mysql8 免安装版 下载安装
    docker安装nginx
  • 原文地址:https://www.cnblogs.com/tanghuimin0713/p/3887734.html
Copyright © 2020-2023  润新知