原创 俺来非典非典---利用UDRIE实现"手动触发"

2007-8-18 15:00 5061 5 5 分类: MCU/ 嵌入式
hotpower 发表于 2007-8-18 14:34 AVR 单片机 ←返回版面 按此察看该网友的资料 按此把文章加入收藏夹 按此编辑本帖

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


在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);
    }
}


总结:
    这种"手动触发"的好处可以不必在发送处要在发送缓冲区内取出首字节
来发送出去,这样我们就没必要知道缓冲区的读写指针的位置和大小等.


点击看大图



签名:


●█〓██▄▄▄▄▄▄ ●●●●●●→ ''''╭WWWW╮
▄▅██████▅▄▃▂ 灌水入坛传播非典 ( ●_●)
██████████████ '''',,,;,;,;'''/▇\''
◥⊙▲⊙▲⊙▲⊙▲⊙▲⊙▲◤ 东戳西顶一片天/MMMM\
点击遨游水上蔬菜批发市场
2006224191826181.gif

打造菜农最倒塌的BLOG
PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
我要评论
0
5
关闭 站长推荐上一条 /3 下一条