[技术问答] HC32L190求助,串口没有发送状态标志,无法找到休眠时机。

[复制链接]
 楼主| lee8871 发表于 2025-7-12 08:35 | 显示全部楼层 |阅读模式
HC32L190,串口使用缓冲空中断进行发送。也就是图中的TXE:
310066871ab5b4f178.png

现在要做休眠,也就要并且要关闭主时钟,就要等待串口数据确实发完再关闭。
也就是要等到这个最后一个红箭头:
35226871abd4f1909.png
但是我在TXE中断中填入了最后一个数据,就要后面出现两个TC中断,才能保证数据全部发完。
问题是,因为临界区和高优先级中断的缘故,无法保证最后一次在TXE中填入数据的时机,如果填入的时机稍晚,后面就只会有一个TC中断
也就是说,TXE后面要等1个或者2个TC中断,就说明数据发完了就可以进入休眠并且关闭时钟了。
但是具体是1个还是2个TC中断,完全不知道!
这要怎么办呢?
555606871acf89551d.png
这个芯片没有TXBusy标志位。
919706871ad2244199.png

我想了半天也没有想到怎么解决这个问题,求助各位,多谢了。

wubangmi 发表于 2025-7-14 13:06 | 显示全部楼层
我的理解跟你的不一样,你倒数第二个TC标志位是前面的TXBUFF发送完成的标志位,不是你最后一次填入的数据.最后一个TC标志位才是你最后一次填入的数据。
个人认为是你理解有偏差。也就是说倒数第二个TC标志位的时候你如果不继续填充数据,本次发送就已经完成了。一直往前推,也就是你要先填一个数据给TXBUFF,他才能产生一次TXE中断和TC中断。TXE标志位一般用在polling发送上,毕竟他的置位和清零都是硬件自动完成的。

评论

[url=home.php?mod=space&uid=3218946]@lee8871[/url] :那应该是你代码没有写好,L系列这么大的出货量,如果有你这种情况,那这个芯片还怎么用呀.反正我是没有碰到你这个情况,另外采用中断发送是要先往Txbuff里装载一个字节的数据,等TC置位后在中断里继续往Txbuff里装载数据,直到最后一个数据装载完毕,下一次TC标志位置位。此次数据发送完毕。  发表于 2025-7-17 13:06
[url=home.php?mod=space&uid=3124216]@wubangmi[/url] :您说的方法我前段时间试过,大概上个月。是不行的。常规的方法就是需要等两个TC中断,大部分情况能等到两个。现在程序复杂了些,偶尔中断处理的晚了,就会出错,等不到第二个TC中断。 如果只等一个TC置位了就停止,最后一个数据会发不出。  发表于 2025-7-17 10:59
[url=home.php?mod=space&uid=3218946]@lee8871[/url] :你还是没有理解我说的意思,用中断方式发送的话,你只需要判断TC标志位,TC置位了,他就表明已经发送完成了.然后你就可以进你的deepsleep了。  发表于 2025-7-16 13:05
您应该是没懂我的意思,我看到您的叙述和我的想法是一致的。 这么说吧,如果利用TXE(TX buffer空)中断填入数据(或者DMA),那么在什么时候就可以让芯片休眠了?因为芯片休眠会关闭主时钟,休眠的时候,如果UART数据仍在发送,就会因为丢失时钟而立即发生错误。 我现在的方案是要在中断中用while循环等待标志位的,不知道有没有更好的方案。  发表于 2025-7-16 11:34
恋爱只谈章若楠 发表于 2025-7-17 17:22 | 显示全部楼层
我们是小华FAE,有问题联系我17327196220
cr315 发表于 2025-7-31 16:08 | 显示全部楼层
硬件TC中断计数+软件状态机或超时检测+数据尾标志
jf101 发表于 2025-7-31 16:49 | 显示全部楼层
TXE中断中填入了最后一个数据,就要后面出现两个TC中断,才能保证数据全部发完
您需要登录后才可以回帖 登录 | 注册

本版积分规则

13

主题

60

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部