搜索
bottom↓
回复: 3

关于中断方式发送的问题

[复制链接]

出0入0汤圆

发表于 2009-6-25 11:01:17 | 显示全部楼层 |阅读模式
看了TXC位的定义我想到,如果允许发送,允许产生发送结束中断,全局中断使能,此时程序会不会不停的进入发送中断服务程序?
(原文件名:QQ截图未命名.jpg)

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

 楼主| 发表于 2009-6-25 11:33:08 | 显示全部楼层
/**//*发送单个字符*/
void put_c(char c)
...{
    while (tx_counter == TX_BUFFER_SIZE);   //发送数据队列中还有数据没有发送完,等待
    cli();
    if (tx_counter || ((UCSRA & DATA_REGISTER_EMPTY)==0))    //若发送数据队列有数据或者数据寄存器UDR非空时执行(因为队列先进先出的原因,所以,c要放进非空的发送数据队列里面)
       ...{
           tx_buffer[tx_wr_index]=c;
           if (++tx_wr_index == TX_BUFFER_SIZE) tx_wr_index=0;
           ++tx_counter;
       }
    else
           UDR=c;
    sei();
}
//发送中断

ISR(USART_TXC_vect)
{
    if (tx_counter)
    {
           --tx_counter;
           UDR=tx_buffer[tx_rd_index];
           if (++tx_rd_index == TX_BUFFER_SIZE) tx_rd_index=0;
    };
}
这段程序我觉得会使得程序总是在进入接收中断的服务子程序,因为一出中断TXC就置1了,就又进入中断。。不解,是不是我什么地方理解错了

出0入0汤圆

发表于 2009-6-25 11:39:15 | 显示全部楼层
so easy,
空闲中断中,在检测到发送缓冲区的东东都发送后,禁止空闲中断
发送函数中打开空闲中断....
========================
下面是我写的
//------                发送寄存器空闲中断                ------//
#pragma interrupt_handler        USART_DataSendIdle:iv_USART_UDRE

void USART_DataSendIdle()
{// 当发送空闲时,将缓冲区数据依次发送
       
        if( Comm.Write.IsOpen )
        {
                UDR = Comm.Write.Buffer[Comm.Write.CurPos++];
        }
        if( Comm.Write.EndPos==Comm.Write.CurPos )
        {// 禁止发送空闲中断
                Comm.Write.IsOpen = false;
                Interrupt_UDR_Disabled();
                return;
        }
}

出0入0汤圆

发表于 2012-12-5 02:31:41 | 显示全部楼层
if (tx_counter)干啥用的? 晕死了。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-24 05:25

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表