u-boot 串口乱码问题的解决
2010-08-18 13:33
246 查看
1:时钟问题, 以前总是一知半解,这次彻底搞明白了,2440的PLL分为两种,MPLL和UPLL,MPLL用来做系统时钟,UPLL则是USB时钟(必须为48M),两种时钟的计算方法一样:
Mpll=(m×Fosc×2)÷(p×2^s) 记住是2的s次幂 2410 不必乘2
m=MDIV+8
p=PDIV+2
s=SDIV
Upll=(m×Fosc×2)÷(p×2^s)
这里的m,p,s 分别都在MPLLCON 寄存器的[19:12],[9:4],[1:0]或UPLLCON寄存器的[19:12],[9:4],[1:0]里进行设置,他们的取值详见官方的推荐表:
![](http://www.mcuol.com/download/uppic/20091203063749QQ%E5%B7%A5%E5%85%B7%E6%A0%8F%E6%88%AA%E5%B1%8F%E6%9C%AA%E5%91%BD%E5%90%8D.bmp)
MPLLCON和UPLLCON的值根据上面的两个公式计算而来,而这两个寄存器的设置值决定了系统的工作主频,和USB的主时钟分频前的频率。
如果用到USB或串口的话,那就需要小心的设置CLKDIVN寄存器了,这个寄存器的DIVN_UPLL位决定了USB的时钟,且必须为48M,
例如:
你的UPLL设置为48M时 则不需要分频,DIVN_UPLL位为0就可以了,反之,如果你的UPLL设置为96M时,为保持USB时钟为48M,这里的DIVN_UPLL必须设置为1.
HDIVN设置则要稍微复杂些,需要根据CAMDIVN[9]来综合决定,原则是首先确定你想要的HCLK频率,然后再结合系统的频率限制合理的来设置。
PDIVN设置直接决定你的串口能否正常工作了,同样举个例子:
当前系统的主频为MPLL 为400M ,UPLL为48M,CAMDIVN[9]位为0,那么想得到115200的波特率,CLKDIVN寄存器应该设置为多少?首先可以确定DIVN_UPLL位为0,解释见上面,接下来确定HDIVN和PDIVN了,s3c24x0的波特率计算公式为
UBRDIV=PCLK/(baudrate×16)-1
波特率直接和PCLK有关,假设UBRDIV设置为0x1A,则PCLK为50M,是PCLK的1/8,所以HDIVN=2 PDIVN=1。
在SMDK2410基础上进行2440的移植时钟部分要注意两个地方,第一个是start.s里关于时钟的设置,还有一个是speed.c里get_HCLK函数和get_PLLCLK函数。需要你根据相应的时钟寄存器进行修改。
Mpll=(m×Fosc×2)÷(p×2^s) 记住是2的s次幂 2410 不必乘2
m=MDIV+8
p=PDIV+2
s=SDIV
Upll=(m×Fosc×2)÷(p×2^s)
这里的m,p,s 分别都在MPLLCON 寄存器的[19:12],[9:4],[1:0]或UPLLCON寄存器的[19:12],[9:4],[1:0]里进行设置,他们的取值详见官方的推荐表:
![](http://www.mcuol.com/download/uppic/20091203063749QQ%E5%B7%A5%E5%85%B7%E6%A0%8F%E6%88%AA%E5%B1%8F%E6%9C%AA%E5%91%BD%E5%90%8D.bmp)
MPLLCON和UPLLCON的值根据上面的两个公式计算而来,而这两个寄存器的设置值决定了系统的工作主频,和USB的主时钟分频前的频率。
如果用到USB或串口的话,那就需要小心的设置CLKDIVN寄存器了,这个寄存器的DIVN_UPLL位决定了USB的时钟,且必须为48M,
例如:
你的UPLL设置为48M时 则不需要分频,DIVN_UPLL位为0就可以了,反之,如果你的UPLL设置为96M时,为保持USB时钟为48M,这里的DIVN_UPLL必须设置为1.
HDIVN设置则要稍微复杂些,需要根据CAMDIVN[9]来综合决定,原则是首先确定你想要的HCLK频率,然后再结合系统的频率限制合理的来设置。
PDIVN设置直接决定你的串口能否正常工作了,同样举个例子:
当前系统的主频为MPLL 为400M ,UPLL为48M,CAMDIVN[9]位为0,那么想得到115200的波特率,CLKDIVN寄存器应该设置为多少?首先可以确定DIVN_UPLL位为0,解释见上面,接下来确定HDIVN和PDIVN了,s3c24x0的波特率计算公式为
UBRDIV=PCLK/(baudrate×16)-1
波特率直接和PCLK有关,假设UBRDIV设置为0x1A,则PCLK为50M,是PCLK的1/8,所以HDIVN=2 PDIVN=1。
在SMDK2410基础上进行2440的移植时钟部分要注意两个地方,第一个是start.s里关于时钟的设置,还有一个是speed.c里get_HCLK函数和get_PLLCLK函数。需要你根据相应的时钟寄存器进行修改。
相关文章推荐
- 2440 移植u-boot 是串口乱码问题
- ESP8266_01与Arduino连接串口乱码问题(参考多个论坛和http://wenku.baidu.com/view/6cb6a96bb7360b4c2e3f64b2.html解决)
- 解决Springboot使用FastJson 返回中文乱码的问题
- 关于java串口通信 接受显示 乱码的字符转换问题解决方案
- SpringBoot 用fastjson替换到jackjson并解决中文乱码的问题
- 关于友善之臂mini2440串口接超级终端输入显示乱码问题的解决方法
- 解决S5PV210的开发板使用SD卡下载,串口输出乱码的问题
- 关于Spring boot中读取属性配置文件出现中文乱码的问题的解决
- spring boot新手教程之使用FastJson解析JSON数据以及解决返回中文乱码问题
- Springboot 之 解决IDEA读取properties配置文件的中文乱码问题
- 如何解决在UBOOT中通过串口输入长度较大的环境变量的问题
- Springboot 之 解决IDEA读取properties配置文件的中文乱码问题
- 笙泉MA505_24,串口打印乱码问题解决
- Springboot使用FastJson后,接口返回中文乱码的问题解决。
- 解决小钢炮低功耗蓝牙开发板使用官方库串口输出乱码问题
- 如何解决在UBOOT中通过串口输入长度较大的环境变量的问题
- Springboot 之 解决IDEA读取properties配置文件的中文乱码问题
- 上拉电阻解决1036串口接收乱码问题
- 分析波形信号解决开发板串口连PC后无输出或输出乱码的问题
- 解决SpringBoot框架下利用jdbcTemplate插入mysql数据库中文乱码问题