Posted on 2008-11-13 21:47
buf 阅读(724)
评论(0) 编辑 收藏 引用 所属分类:
Embedded
基于dave/B2的版本在S3C44B0上移植U-Boot的人可能已经发现了这个问题,即延时功能的实现和U-Boot的核心代码配合的不是很好,反映出来的情况就是比如设定超时为5秒,不过1秒不到就报超时了。原因在于U-Boot要求get_timer_masked()函数返回的时间戳是以ms为单位的,而s3c44b0的实现则不是。
我的修改将timer1的输入时钟Fin配置为8KHz,timestamp依然记录TCNTO1的变化量,get_timer_masked()的返回值为(timestamp>>3),这样就修正到1ms左右。
这里提供一个
patch。我的MCLK配置为60MHz,如果你想使用不同的MCLK或Fin,需要重新计算TCFG0。
建议为Fin保持为pow(2,n)KHz, 这样(timestamp>>n)就可以得到ms单位的时间戳了。