1,在start.S中执行373行b lowlevel_init跳转到/board/samsung/goni/lowlevel.S中,此代码中初始化一样硬件。
找到241行,此行执行URAT初始化,如下图:
但此UART初始化与s5pv210的UART初始化不同,需要自己手动修改。
2,在lowlevel.S的463行下添加如UART初始化代码:
1 /****add S5PV210 UART Initialize by xu***/ 2 ldr r0, =0xE2900000 3 ldr r1, =0x3 4 str r1, [r0] @ULCON0=0x3 indicates the number of data bits is 8 5 6 ldr r1, =0x305 7 str r1, [r0,#0x4] @UCON0=0x305 8 9 ldr r1, =0x1 10 str r1, [r0,#0x8] @UFCON0=0x1 FIFO Enable 11 12 ldr r1, =0x0 13 str r1, [r0,#0x0C] @UMCON0=0x0 14 15 ldr r1, =34 16 str r1, [r0,#0x28] @UBRDIVn=34 Baud Rate=115200 17 18 ldr r1, =0xDFDD 19 str r1, [r0,#0x2C] @UDIVSLOTn=0xDFDD 13'1
3,设置好之后,还要添加测试代码,看看是否串口能否打印出东西来,下面是测试代码,紧跟上一步初始化代码下面.
/***test uart***/ ldr r0, =0xE2900020 ldr r1, =0x55 str r1, [r0] @UTXH0='U' ldr r1, =0x41 str r1, [r0] @UTXH0='A' ldr r1, =0x52 str r1, [r0] @UTXH0='R' ldr r1, =0x55 str r1, [r0] @UTXH0='W' ldr r1, =0xa str r1, [r0] @UTXH0=' ' ldr r1, =0xd str r1, [r0] @UTXH0=' '
4,好,连接好电脑和板子UART0,然后Make一下,生成u-boot,把u-boot.16k重新烧写到SD卡中。但是在串口终端上看不到任何输出信息。怎么回事?
让我看一下,make时生成的输出信息,如图:
lowlevel.S文件在board/samsung/goni/libgoni.o中,此文件在u-boot中最后编译进来,明显UART超出16K大小范围,串口终端看不到任何打印信息。
5,通过上一步知道了问题所在,那么我们可以调整Makefile文件,来调整board/samsung/goni/libgoni.o编译的先后。
#vim Makefile
屏蔽359行,添加360行.如图:
6,如此,再次make和烧写u-boot.16k,打开串口0,可以看到输出信息。