请教一个关于s3c2410 UART的问题

double.chen   2008-12-11 18:27 楼主
我需要用xmodem协议从pc机下载一个文件
代码用的是vivi现成的,在57600的波特率下能正常运行
但是提高到115200的时候总是传一会儿就会出错(但是vivi是在115200波特率下正常运行)
读uerstat寄存器发现是overrun错,
明明手册上写的是当读出uerstat寄存器后错误位会自动清零
但是我循环读uerstat寄存器发现错误位总是1,
是不是pc发的太快了2410接受不过来?我cpu频率设置的是200MHz,1:2:4的

搞得很郁闷啊。

回复评论 (10)

串口是同步的,不管pc还是2410,串口的连接都是在同一个频率下的。

的确是频率设的太高。2410除了接收数据,还要进行处理的,而处理是要时间的,没有硬件流控(CTS/RTS),很容易就溢出了。
点赞  2008-12-11 19:41
这种现象应该是波特率太高了。
点赞  2008-12-11 20:13
但是vivi确实是在115200波特率下能正常通信
是不是我的代码需要优化。。
后面的程序都是在115200波特率下运行的
不能来回换啊,
不知道有什么好方法解决这个问题呢
点赞  2008-12-11 20:22
你的处理时间可能太长了,导致你的缓冲出问题了。
点赞  2008-12-11 22:57
vivi是在pc上跑的,cpu的频率够快,处理数据及时,不会丢掉串口数据。
点赞  2008-12-12 11:11
to shuiyan:
vivi是板子上的bootloader,怎么会在pc上跑呢?
点赞  2008-12-12 12:36
引用: 引用 6 楼 peimichael 的回复:
to shuiyan:
vivi是板子上的bootloader,怎么会在pc上跑呢?


这个是楼主说的那样,但是这个bootloader仅仅是串口打印信息,数据量非常小,所以不会出问题,你数据量大,并且没有什么间隔,估计就要自己写一些握手标志,就是处理完了,才通知另外一方发过来。
点赞  2008-12-12 15:30
启用FIFO模式,解决问题
但是还想知道,是不是一般情况下都会使用FIFO模式?
我没什么开发经验,就觉得单从介绍来看似乎没有理由不用FIFO模式啊
点赞  2008-12-12 16:27
同意四楼,MARK!
点赞  2008-12-12 17:07
引用: 引用 2 楼 gooogleman 的回复:
这种现象应该是波特率太高了。


may be
点赞  2008-12-12 20:01
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复