您的位置:首页 > 其它

三星uboot-1.1.6源码分析——lowlevel_init.S (3)---串口

2012-06-14 22:23 561 查看
三星uboot-1.1.6源码分析——lowlevel_init.S (board\samsung\smdk6410)(1)的链接地址




三星uboot-1.1.6源码分析——lowlevel_init.S (2)——时钟配置的链接地址

上一篇主要说了时钟有关的部分,这一篇接着说在第一篇中没说完的余下的代码。这一篇主要说串口部分

/* for UART */

bl uart_asm_init 具体的源码在同一个文件中,如下所示:

/*

* uart_asm_init: Initialize UART in asm mode, 115200bps fixed.

* void uart_asm_init(void)

*/

uart_asm_init:

/* set GPIO to enable UART */

@ GPIO setting for UART

ldr r0, =ELFIN_GPIO_BASE

ldr r1, =0x220022

str r1, [r0, #GPACON_OFFSET]------看下面:主要是对UART0和UART1的GPIO进行配置,因为很多GPIO都是复用的





ldr r1, =0x2222

str r1, [r0, #GPBCON_OFFSET] ------和上面一样,这里是UART2和UART3,看下图:



ldr r0, =ELFIN_UART_CONSOLE_BASE@0x7F005000 ------这是UART LINE CONTROL REGISTER的基地址

mov r1, #0x0

str r1, [r0, #UFCON_OFFSET]

str r1, [r0, #UMCON_OFFSET] ------这两个寄存器主要和FIFO有关,这里应该是禁止了

mov r1, #0x3 @was 0. 对UART0进行配置,8位,无校验,1停止位,普通模式(非红外)

str r1, [r0, #ULCON_OFFSET]

#if defined(CONFIG_CLKSRC_CLKUART) ---- 定义了

ldr r1, =0xe45/* UARTCLK SRC = 11 => EXT_UCLK1*/

#else

ldr r1, =0x245/* UARTCLK SRC = x0 => PCLK */

#endif

str r1, [r0, #UCON_OFFSET]-------主要是对下面这个寄存器进行操作,主要是对接收和发送方式的设置,还有时钟的选择



#if defined(CONFIG_UART_50)

ldr r1, =0x1A

#elif defined(CONFIG_UART_66) 定义了这个#define CONFIG_UART_66/* default clock value of CLK_UART */

ldr r1, =0x22

#else

ldr r1, =0x1A

#endif

str r1, [r0, #UBRDIV_OFFSET]---- 和波特率设置有关,有如下公式:

DIV_VAL1) = (EXT_UCLK1 / (bps x 16) ) –1

DIV_VAL = UBRDIVn + (num of 1’s in UDIVSLOTn)/16. Refer to UART Baud Rate Configure Registers.



#if defined(CONFIG_UART_50)

ldr r1, =0x3

#elif defined(CONFIG_UART_66)

ldr r1, =0x1FFF

#else

ldr r1, =0x3

#endif

str r1, [r0, #UDIVSLOT_OFFSET]------ 和上面一样,都和波特率设置有关



ldr r1, =0x4f4f4f4f

str r1, [r0, #UTXH_OFFSET]@'O' 发送字符‘O’



movpc, lr ----------返回

ldrr0, =ELFIN_UART_BASE 发送‘K’

ldr r1, =0x4b4b4b4b

str r1, [r0, #UTXH_OFFSET]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: