打印
[技术问答]

请问大家谁 TC 和 TXE中断的区别呀?

[复制链接]
1160|16
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
土司Apple|  楼主 | 2022-4-4 17:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
tc, rc
本帖最后由 土司Apple 于 2022-4-4 17:04 编辑

请问大家水能说清楚 TC 和 TXE中断的区别呀?再就是 只有开启RC中断的时候 进入中断读取接收数据,再读取TXE标志 是否被置位了呢?

使用特权

评论回复
沙发
土司Apple|  楼主 | 2022-4-4 17:03 | 只看该作者
这里一般的MCU都是怎么理解的?

使用特权

评论回复
板凳
wubangmi| | 2022-4-4 17:18 | 只看该作者
从字面上理解就是TC是指发送完成中断,TXE是指buff空中断。TXE标志只要buff空了就会被置位,buff有数据了就被清零,全是硬件自动的。

使用特权

评论回复
地板
xch| | 2022-4-4 17:40 | 只看该作者
TC 是发射任务的最后一个BIT 已经放送出去。TXE 是指放送缓冲区已经空闲,可以接收新的发送数据。接收中断与TXE 无关。

使用特权

评论回复
5
土司Apple|  楼主 | 2022-4-5 09:41 | 只看该作者
xch 发表于 2022-4-4 17:40
TC 是发射任务的最后一个BIT 已经放送出去。TXE 是指放送缓冲区已经空闲,可以接收新的发送数据。接收中断 ...

接收中断是和TXE无关,但是都是进入中断触发函数对吧!触发RC中断之后 读完buff TXE是不是会被置位,因为发送接收都用的一个buf嘛。这么理解对不!
//UART0中断函数
void Uart0_IRQHandler(void)// 从触发RC中断开始分析
{
    if(Uart_GetStatus(M0P_UART0, UartRC))         //UART数据接收中断标志读取
    {

        Uart_ClrStatus(M0P_UART0, UartRC);        //清中断状态位
        读取数据   ; // 读取buff buff为空 此时TXE置位  
        
    }
    if(Uart_GetStatus(M0P_UART0, UartTxe))         //UART0数据发送缓冲区空中断
    {
        Uart_ClrStatus(M0P_UART0, UartTxe);        //清中断状态位
       这里会进来么?;// 如果TXE置位是不是就会进来
    }
}

使用特权

评论回复
评论
martinhu 2022-5-20 09:25 回复TA
TXE是发送buff为空的时候置位,和接收没关系。TC是发送完成中断,发送的移位寄存器的最后一个bit发送到TX线上的时候置位 
6
xch| | 2022-4-5 15:27 | 只看该作者
土司Apple 发表于 2022-4-5 09:41
接收中断是和TXE无关,但是都是进入中断触发函数对吧!触发RC中断之后 读完buff TXE是不是会被置位,因为 ...

"因为发送接收都用的一个buf嘛。这么理解对不!" 这句话不对。

发送和接收buffer共用地址。物理上是两buffer,一个仅能写入发送数据,另外一个仅能读出接收到的最后一个数据。

使用特权

评论回复
7
xch| | 2022-4-5 15:39 | 只看该作者
土司Apple 发表于 2022-4-5 09:41
接收中断是和TXE无关,但是都是进入中断触发函数对吧!触发RC中断之后 读完buff TXE是不是会被置位,因为 ...

下面那段服务程序写的不太对。有可能出问题。
一般原则:
1、不仅仅判断状态标记而且同时判断是否允许该标记产生中断。
2、每个中断分支服务完成后就立刻从中断返回。其他判断基本上99.99xxx%是多余的。如果万一同时还存在未服务的中断,MCU会重新进入中断服务。按照概率可以减少MCU多余操作。
3、缺少TXC中断服务。一般写入一串字符的最后一个字节到 TX BUFFER 之后,就必须禁止TXE中断。同时使能TC中断。进入TXC中断服务后,禁止TXC和TXE中断,关闭发送模块。下次启动发送时,打开TXE中断(多字节)或者TC中断(单字节)。

使用特权

评论回复
8
土司Apple|  楼主 | 2022-4-5 15:53 | 只看该作者
本帖最后由 土司Apple 于 2022-4-5 16:30 编辑

第三点 我写了没贴出来,第一点认同(判断中断是否允许,允许再处理相关中断信号),第二点 其实就是您第三点说的用法 TXE的判断当然不能是多余的了,因为接收完成之后回复信息是要打开的。您这用法说特明了 多谢!尤其是第一点是我的盲区

使用特权

评论回复
9
banyai| | 2022-4-5 18:13 | 只看该作者
TXE中断是发送缓冲区空中断,一般情况下,这个中断标志一直是置1的,无法软件清0,只有写入数据并且数据未到移位寄存器时,才会是0,时间非常短。一般会在准备好数据后开启该中断,然后在中断中向串口缓冲区填入数据。并且数据全部填完后,需要关闭这个中断。如果在中断中查询这个标志而不查询这个中断的使能标志,就会因为这个标志是1而进入这段程序。而且因为这个标志仅表示缓冲区为空,数据并没有真正通过串口发出去,所以在485通信中,不能以此来切换发送接收控制脚。TC是发送完成标志,数据从移位寄存器全部发送出去后,才会置1,且可软件清零。所以如果不是太特别的应用,建议只关注TC标志,可在初始化时使能TC中断,每次发送时,在数据准备好后,填第一个数据到缓冲区,以后在中断中,依次将数据填入缓冲区,会清TC标志,数据全部发完后,软件将TC清0就可以了。

使用特权

评论回复
10
tpgf| | 2022-5-3 15:01 | 只看该作者
不是很了解这俩的区别

使用特权

评论回复
11
aoyi| | 2022-5-3 15:05 | 只看该作者
尽量遵循原则行事

使用特权

评论回复
12
nawu| | 2022-5-3 15:14 | 只看该作者
这是两种什么中断啊

使用特权

评论回复
13
zljiu| | 2022-5-3 15:21 | 只看该作者
手册上是什么说法

使用特权

评论回复
14
gwsan| | 2022-5-3 15:29 | 只看该作者
不需要手动操作吧

使用特权

评论回复
15
tfqi| | 2022-5-3 15:36 | 只看该作者
寄存器说明上有详细说明

使用特权

评论回复
16
mutable| | 2022-5-19 20:27 | 只看该作者
这里说的是寄存器位么

使用特权

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

本版积分规则

57

主题

254

帖子

2

粉丝