主题 : 关于2440串口时钟设置问题 复制链接 | 浏览器收藏 | 打印
级别: 侠客
UID: 6147
精华: 0
发帖: 91
金钱: 640 两
威望: 241 点
综合积分: 182 分
注册时间: 2009-05-21
最后登录: 2011-06-23
楼主  发表于: 2010-06-02 15:48

 关于2440串口时钟设置问题

大家好,
        遇到一个问题,目前我用串口接收发数时,看到了误差率的问题,我现在用230400波特率,使用PCLK的时钟,为50MHZ,根据这几个值算出来的误差率大于1.87%,所以就必须得改量钟频率,看到数据手册上将UCONn改为FCLK/n模式,设置UCONn的12:15位,哪么里面有一句话,我就晕了,
In case of UCON0,
UART clock = FCLK / (divider+6), where divider>0.
UCON1, UCON2 must be zero.
ex) 1: UART clock = FCLK/7, 2: UART clock = FCLK/8
3: UART clock = FCLK/9, … , 15: UART clock = FCLK/21
设置UCON0时,UCON1和UCON2必须为0,这没有问题
**************************************
In case of UCON1,
UART clock = FCLK / (divider+21), where divider>0.
UCON0, UCON2 must be zero.
ex) 1: UART clock = FCLK/22, 2: UART clock = FCLK/23
3: UART clock = FCLK/24, … , 15: UART clock = FCLK/36
设置UCON1时,UCON0和UCON2必须为0,这样我的UCON0哪不就白设置了吗?也不起作用呀,请教下
级别: 侠客
UID: 6147
精华: 0
发帖: 91
金钱: 640 两
威望: 241 点
综合积分: 182 分
注册时间: 2009-05-21
最后登录: 2011-06-23
1楼  发表于: 2010-06-02 16:17
想了下办法,觉得修改倍频值,也只能修改一个串口,还是想把PCLK的值改掉,可是不按照1:4:8的关系来修改其他设备的时钟可能也会出现问题,各位有什么好办法吗,难道只能用超频了
级别: 侠客
UID: 6147
精华: 0
发帖: 91
金钱: 640 两
威望: 241 点
综合积分: 182 分
注册时间: 2009-05-21
最后登录: 2011-06-23
2楼  发表于: 2010-06-03 14:07
还是我理解错了,这三个只需要改其中一个,另外两个的输出频率和这个是一样的,
修改了之后,在ko模块中修改的,是启动后再加载,可以看到加载成功,但是串口输出的信息成乱码了,是修改时钟所造成的,然后我把时钟修改放在内核中里,直接在mach-smdk2440.c中初始化uart中修改,出现了内核启动失败的情况, 后来考虑到bootloader,也把bootloader的串口时钟和内核的一样,再启动,仍然跳转到kernel start时,内核无法启动
级别: 侠客
UID: 6147
精华: 0
发帖: 91
金钱: 640 两
威望: 241 点
综合积分: 182 分
注册时间: 2009-05-21
最后登录: 2011-06-23
3楼  发表于: 2010-06-03 14:08
大家帮我看下
级别: 侠客
UID: 6147
精华: 0
发帖: 91
金钱: 640 两
威望: 241 点
综合积分: 182 分
注册时间: 2009-05-21
最后登录: 2011-06-23
4楼  发表于: 2010-06-03 16:14
已经解决,原来在mach-smdk2440.c中已经对UCON寄存器改为了FCLK的培频值,但是串口驱动中samsung.c中有一个tmp_clksrc的成员变量.name还是为pclk,这个变量在serial/2440.c中是用来设置clk的,将这个成员变量改为fclk即可解决问题

以模块方式加载也应该是可行的,需要在改变串口时钟后,复位下串口控制台,估计是可行的