打印
[AVR单片机]

倒塌了~~~ 吵吧闹吧.俺来非典非典---利用UDRIE实现"手动触发"

[复制链接]
18282|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,菜农这个方法我先借鉴了(小声问:不收版权费吧^_^)

使用特权

评论回复
5
hq_y| | 2007-8-19 14:59 | 只看该作者

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

蚂蚁上树、扇贝粉丝豆豉蒜蓉蒸都喜欢,哈哈

使用特权

评论回复
6
hotpower|  楼主 | 2007-8-20 23:57 | 只看该作者

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

使用特权

评论回复
7
双龙| | 2007-8-21 00:20 | 只看该作者

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

结果你说到了某某的帽子,为公平起见,那两人就一起带吧。

使用特权

评论回复
8
pppking| | 2007-8-23 08:42 | 只看该作者

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

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

另外接受也可以使用DMA方式。现在我都对串口的操作写成了操作性很好的驱动,每次开发一个新产品时都感觉轻松多了。

使用特权

评论回复
9
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
我到底哪弄差了?

使用特权

评论回复
10
dcp| | 2007-9-8 23:58 | 只看该作者

up

使用特权

评论回复
11
dcp| | 2007-10-23 15:20 | 只看该作者

人工加酷

使用特权

评论回复
12
hotpower|  楼主 | 2010-7-27 19:57 | 只看该作者
顶起来~~~

使用特权

评论回复
13
xuyiyi| | 2010-7-28 12:06 | 只看该作者
哈!
HOT大叔挖墓!

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1460

主题

21619

帖子

506

粉丝