S3C4510B的UART

现在开始学习ARM,很长时间没有头绪,今天终于跑通了我的第一个程序——一个UART通信测试程序。心情相当好!

一开始很不适应这样的编程环境:没有操作系统,不能用C的标准库函数,而且程序的入口未必是main,自己用汇编定义,汇编还和我学过的x86上的汇编不一样,无论是Intel的还是AT&T的,郁闷~

经过几个同学的帮助,今天终于有点开窍了~原来,就是直接对寄存器操作,而且所有外设和内存统一使用同一地址空间~外设的寄存器直接往那个地址写东西就行了,不用考虑其他,以前想的太……

原来 这个板子上的UART发送数据如果在没有操作系统,不需要考虑中断的情况下,就是忙等。

接收数据时:就用一个循环始终等待USTAT0或者USTAT1寄存器的[5]位变为1,然后将这个字节接收,然后再等~如此循环往复。

发送数据就等USTATi的[6]位即可~

真正卡的时间最长的竟然是初始化串口的那个数据的算法,~公式及其奇怪:CNT0=MCLK/(32*BR)-1,CNT1,还是用CNT0和CNT1直接拼接起来的。开始我和马博都理解错了,老是调试不通过。 反正我不知道那UART为什要那么初始化,和他的时钟频率,波特率都扯上关系了,那个数量关系反正不懂。我的信号基础还是差劲了点。

明天开始看中断服务程序。:)

《S3C4510B的UART》有5条评论

  1. 谢谢大家。
    to wangcong:
    是的,就这么点“成果”
    没办法,我以前确实甚至从来没有想像过,程序是如何直接控制电路工作的,也许你很清楚,感觉没有什么,就一点东西。我是第一次自己实现它,有点激动也很正常啊!

    回复

发表评论

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据