U-Boot串口初始化分析
发布时间:2021-11-23 17:54:17 所属栏目:教程 来源:互联网
导读:目录 零、概述 一、init_baudrate 二、serial_init 三、console_init_f 四、devices_init 五、console_init_r 六、打印信息 七、为什么要使用devlist,std_device[]? 零、概述 上面这张图是U-Boot中串口设备驱动的流程,从寄存器级别的设置到最后终端信息的
目录 零、概述 一、init_baudrate 二、serial_init 三、console_init_f 四、devices_init 五、console_init_r 六、打印信息 七、为什么要使用devlist,std_device[]? 零、概述 上面这张图是U-Boot中串口设备驱动的流程,从寄存器级别的设置到最后终端信息的输出。下面我们详细讲解每一个步骤。 一、init_baudrate 该函数设置了gd->bd->bi_baudrate。 static int init_baudrate (void) { char tmp[64]; /* long enough for environment variables */ int i = getenv_r ("baudrate", tmp, sizeof (tmp)); gd->bd->bi_baudrate = gd->baudrate = (i > 0) ? (int) simple_strtoul (tmp, NULL, 10) : CONFIG_BAUDRATE; //#define CONFIG_BAUDRATE 115200 定义在/include/configs/smdk2410.c中 //如果环境中没有保存,则使用宏定义的参数 return (0); } 二、serial_init UART控制器的初始化。 void serial_setbrg (void) { S3C24X0_UART * const uart = S3C24X0_GetBase_UART(UART_NR); int i; unsigned int reg = 0; /* value is calculated so : (int)(PCLK/16./baudrate) -1 */ reg = get_PCLK() / (16 * gd->baudrate) - 1; /* FIFO enable, Tx/Rx FIFO clear */ uart->UFCON = 0x07; uart->UMCON = 0x0; /* Normal,No parity,1 stop,8 bit */ uart->ULCON = 0x3; /* * tx=level,rx=edge,disable timeout int.,enable rx error int., * normal,interrupt or polling */ uart->UCON = 0x245; uart->UBRDIV = reg; #ifdef CONFIG_HWFLOW uart->UMCON = 0x1; /* RTS up */ #endif for (i = 0; i < 100; i++); } /* * Initialise the serial port with the given baudrate. The settings * are always 8 data bits, no parity, 1 stop bit, no start bits. * */ int serial_init (void) { serial_setbrg ();//UART寄存器设置 return (0); } linux ![]() (编辑:南通站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |