[AVR单片机] 倒塌了~~~ 吵吧闹吧.俺来非典非典---利用UDRIE实现"手动触发"

[复制链接]
19382|14
 楼主| hotpower 发表于 2007-8-18 14:34 | 显示全部楼层 |阅读模式
在51中我们常用TI来认为地"手动触发"发送中断,使程序未等发送结束就会进入
串口的发送中断.
即TI = 1;//"手动触发"发送中断

这种"手动触发"发送中断机制的最大好处是发送中断处理程序与发送命令程序分离.互不干扰,发送命令程序也不需要知道发送是如何进行或实现的.

在LPCARM中,俺模拟51实现了类似功能:
    VIC->SoftInt = (1 << VICIntSel_UART0);//软件中断模拟激活UART0中断

在AVR上实际也能实现如此功能,如下图所述.
UCSRB |= (1 << UDRIE);//"手动触发"发送中断(发送数据寄存器空中断)

在中断中处理如下:
#pragma vector=USART_UDRE_vect
extern "C" __interrupt void UartTxUDREISR(void)
{
    if (Uart.SendWritePtr != Uart.SendReadPtr) {
        UDR = Uart.SendBuffer[Uart.SendReadPtr ++];
        UCSRB |= (1 << UDRIE);
    }
    else
    {
        UCSRB &= ~(1 << UDRIE);
    }
}

#pragma vector=USART_TXC_vect
extern "C" __interrupt void UartTxISR(void)
{
    if (Uart.SendWritePtr != Uart.SendReadPtr) {
        UDR = Uart.SendBuffer[Uart.SendReadPtr ++];
        UCSRB |= (1 << UDRIE);
    }
}


总结:
    这种"手动触发"的好处可以不必在发送处要在发送缓冲区内取出首字节
来发送出去,这样我们就没必要知道缓冲区的读写指针的位置和大小等.
315avr 发表于 2007-8-18 15:33 | 显示全部楼层

双龙先生,赶紧给HOT加条裤子,人家都提要求了,嘿嘿

 楼主| hotpower 发表于 2007-8-18 15:34 | 显示全部楼层

倒塌了~~~俺不喜欢这一套~~~俗~~~

yyccaa 发表于 2007-8-18 16:54 | 显示全部楼层

挺有意思的方法

以前没用过51,菜农这个方法我先借鉴了(小声问:不收版权费吧^_^)
hq_y 发表于 2007-8-19 14:59 | 显示全部楼层

俺喜欢粉丝~~~~~~~~~~~~`

蚂蚁上树、扇贝粉丝豆豉蒜蓉蒸都喜欢,哈哈
 楼主| hotpower 发表于 2007-8-20 23:57 | 显示全部楼层

晕!!!刚真想写篇<一块粉丝馒头血染了农民的一亩自留地>

双龙 发表于 2007-8-21 00:20 | 显示全部楼层

本来楼主说不喜欢裤子,就不强加了。

结果你说到了某某的帽子,为公平起见,那两人就一起带吧。
pppking 发表于 2007-8-23 08:42 | 显示全部楼层

在ATMEL的ARM中,我都用DMA来发送

只要将要发送缓冲区的首指针和长度赋给DMA控制器,再使能发送,就完成工作了。
优点有2:
1是不需要麻烦的发送中断的处理
2是大大减少了发送发程中对CPU的干预。

另外接受也可以使用DMA方式。现在我都对串口的操作写成了操作性很好的驱动,每次开发一个新产品时都感觉轻松多了。
agnd 发表于 2007-9-7 09:10 | 显示全部楼层

还是来解决点实际问题吧,我真的要|^._

在keil RV 3.11中编译,开发板上实际执行(不是仿真)
printf(" A=%5f, B=%05u ",(float)1234.567,(u32)1234);
后,从串口输出结果为:
A=-0.000000, B=1083394628
我到底哪弄差了?
dcp 发表于 2007-9-8 23:58 | 显示全部楼层
dcp 发表于 2007-10-23 15:20 | 显示全部楼层

人工加酷

 楼主| hotpower 发表于 2010-7-27 19:57 | 显示全部楼层
顶起来~~~
xuyiyi 发表于 2010-7-28 12:06 | 显示全部楼层
哈!
HOT大叔挖墓!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1460

主题

21617

帖子

508

粉丝
快速回复 在线客服 返回列表 返回顶部