S3C2440--串口乱码解决办法

关于S3C2440,最近看到网上有很多朋友说出现串口乱码的问题,同时也看到很多朋友指出了一些解决的办法,但又看到有人说按网上提出的办法还是没能解决乱码问题,我提一个大家都没怎么提的地方吧,希望对大家有用。

 

串口的问题,肯定是时钟及波特率的问题(排除硬件上的因素)

网上提到过的有:

1、MPLL/UPLL,并列出公式:Mpll/Upll=(m×Fosc×2)÷(p×2^s),

                                                              m=MDIV+8
                                                              p=PDIV+2
                                                              s=SDIV

     对于这个,MPLL没错,但UPLL不应乘2,即:Upll=(m×Fosc)÷(p×2^s),这个可以从S3C2440A的datasheet上找到(254页)。MPLL/UPLL/FCLK/HCLK/PCLK要设置正确,否则会有乱码。

2、有人提到speed.c文件中:  

                     “问题就出在: return ((CONFIG_SYS_CLK_FREQ * m * 2) /(p << s));CONFIG_SYS_CLK_FREQ 为12MHZ , 12M*200*2 结果已经超出了32bit 的范围而导致数据溢出了,所以结果出错”

                    并提出“修改方法:ulong clk_tmp = (CONFIG_SYS_CLK_FREQ * m )/(p << s);

                    return (clk_tmp*2); //return ((CONFIG_SYS_CLK_FREQ * m * 2) /(p << s));这样u-boot 在串口就可以打印出正常字符。”

      我试过,应该是不起作用的。

 

 

我要说的是在上述都设置好了以后,还需要注意波特率的分频因子UBRDIV

         UBRDIV=PCLK/(baudrate×16)-1

在文件cpu/arm920t/s3c24x0/serial.c中,有对它的设置,因为我的PCLK=50MHz,baudrate=115200,算下来UBRDIV=26,所以在cpu/arm920t/s3c24x0/serial.c中将UBRDIV直接赋值为0x1a,赋值后编译、下载、运行,乱码没有了!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值