环境:
Ubuntu 12.04 LTS
Linux version 3.2.0-23-generic-pae
arm-none-eabi-gcc 4.6.1
u-boot-2012.10
OK6410开发板
1、时钟配置:
参考:
https://blog.youkuaiyun.com/qq_36028037/article/details/78716993
https://blog.youkuaiyun.com/coding__madman/article/details/51246591
设置的目标是APLL=533MHz MPLL=266MHz PCLK=66MHz
1)设置OTHERS寄存器:主要设置了寄存器的第6、7位。
2)设置APLL_LOCK、MPLL_LOCK的时间
3)设置分频系数
4)设置时钟源
时钟配置的代码用的uboot源码,没做任何改动。
2、串口配置
因为之前对时钟配置的相关操作不熟悉,导致不知道如何配置串口的相关参数(UBRDIV、UDIVSLOTn)。因为在时钟配置时得到的PCLK为66MHz,则根据公式可得:
//PCLK=66MHz,
//DIV_VAL = (66000000 / (115200 * 16)) - 1 = 34.8
//UBRDIV0 = 34
//(num of 1’s in UDIVSLOTn)/16 = 0.8
//num of 1’s in UDIVSLOTn = 12
//UDIVSLOTn = 0xdddd
相关代码:
/* set GPIO to enable UART */
ldr r0, =ELFIN_GPIO_BASE
ldr r1, =0x220022
str r1, [r0, #GPACON_OFFSET]
ldr r1, =0x2222
str r1, [r0, #GPBCON_OFFSET]
ldr r0, =ELFIN_UART_CONSOLE_BASE @0x7F005000
mov r1, #0x0
str r1, [r0, #UFCON_OFFSET]
str r1, [r0, #UMCON_OFFSET]
mov r1, #0x3 @was 0.
str r1, [r0, #ULCON_OFFSET]
//PCLK=66MHz,
//DIV_VAL = (66000000 / (115200 * 16)) - 1 = 34.8
//UBRDIV0 = 34
//(num of 1’s in UDIVSLOTn)/16 = 0.8
//num of 1’s in UDIVSLOTn = 12
//UDIVSLOTn = 0xdddd
ldr r1, =0xa45 /* UARTCLK SRC = x0 => PCLK */
str r1, [r0, #UCON_OFFSET]
ldr r1, =0x22
str r1, [r0, #UBRDIV_OFFSET]
ldr r1, =0xdddd
str r1, [r0, #UDIVSLOT_OFFSET]