新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > 用于ATmega128的软件UART范例程序

用于ATmega128的软件UART范例程序

作者:时间:2012-10-29来源:网络收藏

这段由CVAVR生成器产生的接口代码是一个非常好的、高效可靠,并且值得认真学习和体会的。其特点如下:

l. 它采用两个8字节的接收和发送缓冲器来提高MCU的效率,如当主调用Putchar()发送数据时,如果口不空闲,就将数据放入发送缓冲器中,MCU不必等待,可以继续执行其它的工作。而的硬件发送完一个数据后,产生中断,由中断服务负责将发送缓冲器中数据依次送出。

2.数据缓冲器结构是一个线性的循环队列,由读、写和队列计数器3个指针控制,判断队列是否空、溢出,以及当前数据在队列中的位置。

3. 用编译控制命令#pragma savereg-和#pragma savereg+,使得由CVAVR在生成的中断服务程序中不进行中断保护(CVAVR生成中断保护会将比较多的寄存器压入堆栈中),而在中断中嵌入汇编,只将5个在本中断中必须要保护的寄存器压栈。这样提高了UART中断处理的速度,也意味着提高了MCU的效率。

4.由于在接口程序Putchar()、Getchar()和中断服务程序中都要对数据缓冲器的读、写和队列计数器3个指针判断和操作,为了防止冲突,在Putchar()、Getchar()中对3个指针操作时临时将中断关闭,提高了程序的可靠性。

建议读者能逐字逐句地仔细分析该段代码,真正理解和领会每一句语句(包括编译控制命令的作用)的作用,从中体会和学习如何编写效率高,可靠性好,结构优良的系统代码。这段程序使用的方法和技巧,对编写SPI、I2C的串行通信接口程序都是非常好的借鉴。

作为现在的单片机和嵌入式系统的工程师,不仅要深入全面的掌握芯片和各种器件的性能,具备丰富的硬件设计能力;同时也必须提高的设计能力。要学习和掌握有关数据结构、操作系统、工程、网络协议等方面的知识,具有设计编写大的复杂系统程序的能力。


上一页 1 2 下一页

评论


相关推荐

技术专区

关闭