打印

是否可以从理论上分析串口发送完成和接收中断产生的先后

[复制链接]
1829|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
kanprin|  楼主 | 2008-8-4 10:29 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
假如把TXD和RXD对接,同时开启发送完成中断和串口接收中断, 
当单片机向串口发送一个字节的时候,那么,发送完成中断先产生呢? 还是接收完成先产生?或者是同时产生?但单片机会给个默认的优先级而先产生其一的中断信号? 

相关帖子

沙发
chunyang| | 2008-8-4 11:33 | 只看该作者

同时产生

如果MCU只有一个串口中断源,这时你需要读各自的标志位来判别,如果MCU有单独的发射、接收中断,则由你的优先级设置或系统优先级决定。

使用特权

评论回复
板凳
kanprin|  楼主 | 2008-8-4 12:49 | 只看该作者

谢谢chunyang指点。

中午实际试了一下,发现若短接TXD和RXD, 
则只产生RXD中断,而不产生发送完成中断。 
若不短接,则发送完成中断是可以产生的。 
不知何解?从理论上来讲应该可以产生两个中断的。

单片机:AVR mega64,可以产生对UART可以产生3个中断即发生寄存器为空中断、发送完成中断、接收完成中断。而为现在用到两个:发送完成和接收完成中断。
 


简单测试程序如下: 
//winavr 20050214 
#include <avr/io.h> 
#include <avr/signal.h> 
#include <avr/interrupt.h> 

typedef unsigned int u16_t; 
typedef unsigned char u8_t; 

#define GLED_ON                (PORTB &= ~(1 << PB5)) 
#define GLED_OFF                (PORTB |= (1 <<PB5)) 
#define RLED_ON                (PORTB &= ~(1 << PB6)) 
#define RLED_OFF                 (PORTB |= (1 <<PB6)) 

void avr_init(void) 

        //port init 
        DDRB |= (1 << PB5) | (1 << PB6); // output 
        GLED_OFF; 
        RLED_OFF; 
         
        //serial1 init 
        UBRR1L = 47;//9600 bps @7372800Hz 
        UCSR1B = (1 << TXEN1) | (1 << RXEN1) | (1 << RXCIE1); // 


void uart1_sendchar(u8_t data) 

        UCSR1A |= (1 << TXC1); 
        UDR1 = data; 
        UCSR1B |= (1 << TXCIE1); //enable TX complete INT


int main(void) 

        avr_init(); 
        sei(); 
        while(1) 
        { 
                uart1_sendchar(0x31); 
                while(1); 
        } 


SIGNAL(SIG_UART1_TRANS) 

        GLED_ON; 


SIGNAL(SIG_UART1_RECV) 

        RLED_ON; 
}

使用特权

评论回复
地板
chunyang| | 2008-8-4 19:15 | 只看该作者

这跟MCU的设计有关,你看看器件手册

查一下中断标志位及中断响应后MCU对该标志的处理。

使用特权

评论回复
5
kanprin|  楼主 | 2008-8-5 17:37 | 只看该作者

问题已经搞定

理论分析正确,就是测试程序少做了一件事情
SIGNAL(SIG_UART1_RECV) 

        u8_t data;

        data = UDR1;//需要读UDR后,RXC标志才会清
        RLED_ON; 
}

导致程序一直进入接收中断,而接收中断优先级比发送完成中断的高,
所以发送完成中断程序一直都没得到响应。

OK, 谢谢chunyang老师的热心帮助。

使用特权

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

本版积分规则

39

主题

343

帖子

0

粉丝