打印
[技术问答]

HC32L190求助,串口没有发送状态标志,无法找到休眠时机。

[复制链接]
533|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
lee8871|  楼主 | 2025-7-12 08:35 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
HC32L190,串口使用缓冲空中断进行发送。也就是图中的TXE:


现在要做休眠,也就要并且要关闭主时钟,就要等待串口数据确实发完再关闭。
也就是要等到这个最后一个红箭头:

但是我在TXE中断中填入了最后一个数据,就要后面出现两个TC中断,才能保证数据全部发完。
问题是,因为临界区和高优先级中断的缘故,无法保证最后一次在TXE中填入数据的时机,如果填入的时机稍晚,后面就只会有一个TC中断
也就是说,TXE后面要等1个或者2个TC中断,就说明数据发完了就可以进入休眠并且关闭时钟了。
但是具体是1个还是2个TC中断,完全不知道!
这要怎么办呢?

这个芯片没有TXBusy标志位。


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

使用特权

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

使用特权

评论回复
评论
wubangmi 2025-7-17 13:06 回复TA
@lee8871 :那应该是你代码没有写好,L系列这么大的出货量,如果有你这种情况,那这个芯片还怎么用呀.反正我是没有碰到你这个情况,另外采用中断发送是要先往Txbuff里装载一个字节的数据,等TC置位后在中断里继续往Txbuff里装载数据,直到最后一个数据装载完毕,下一次TC标志位置位。此次数据发送完毕。 
lee8871 2025-7-17 10:59 回复TA
@wubangmi :您说的方法我前段时间试过,大概上个月。是不行的。常规的方法就是需要等两个TC中断,大部分情况能等到两个。现在程序复杂了些,偶尔中断处理的晚了,就会出错,等不到第二个TC中断。 如果只等一个TC置位了就停止,最后一个数据会发不出。 
wubangmi 2025-7-16 13:05 回复TA
@lee8871 :你还是没有理解我说的意思,用中断方式发送的话,你只需要判断TC标志位,TC置位了,他就表明已经发送完成了.然后你就可以进你的deepsleep了。 
lee8871 2025-7-16 11:34 回复TA
您应该是没懂我的意思,我看到您的叙述和我的想法是一致的。 这么说吧,如果利用TXE(TX buffer空)中断填入数据(或者DMA),那么在什么时候就可以让芯片休眠了?因为芯片休眠会关闭主时钟,休眠的时候,如果UART数据仍在发送,就会因为丢失时钟而立即发生错误。 我现在的方案是要在中断中用while循环等待标志位的,不知道有没有更好的方案。 
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

13

主题

60

帖子

0

粉丝