用的是tx2440的板子。u-boot-2010.06
speed.c中的get_FCLK,get_PCLK等函数都修改好了,可是串口一直出现乱码。查看MPLLCON, CLKDIVN,寄存器的值都是正确,就是UBRDIV0不正确,源代码找了好久都找不到错来。这问题一直纠缠了好几天。后来发现是在get_PLLCLK中出错。 原来代码: static ulong get_PLLCLK(int pllreg) { struct s3c24x0_clock_power *clk_power = s3c24x0_get_base_clock_power(); ulong r, m, p, s; if (pllreg == MPLL) r = readl(&clk_power->MPLLCON); else if (pllreg == UPLL) r = readl(&clk_power->UPLLCON); else hang(); m = ((r & 0xFF000) >> 12) + 8; //200 p = ((r & 0x003F0) >> 4) + 2; //3 s = r & 0x3; //2 #if defined(CONFIG_S3C2440) if (pllreg == MPLL) { return ((CONFIG_SYS_CLK_FREQ * m * 2) /(p << s)); } else if (pllreg == UPLL) #endif return (CONFIG_SYS_CLK_FREQ * m) / (p << s); } 问题就出在: 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在串口就可以打印出正常字符了。 |
移植u-boot启动时串口出现乱码
最新推荐文章于 2023-06-06 14:51:45 发布