打印
[技术问答]

华大hc32l196怎么采用DMA接收不定时长串口数据

[复制链接]
1708|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
花花holiday|  楼主 | 2020-8-19 15:41 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本身是想用空闲中断的,但是华大这块芯片没有空闲中断
有什么简单一点的办法?

使用特权

评论回复
沙发
ayb_ice| | 2020-8-20 09:24 | 只看该作者
设一缓冲区,比最大数据帧还要长,
开始设置DMA接收,数据自然在缓冲区里,已经接收的长度也是知道的,可以正常的处理数据,
当程序判断接收了完整的数据帧后,处理后,重新设置DMA接收

因为数据通信一般一问一答的形式,所以不会有什么问题

加上一些辅助措施是很可靠的,比如超时重新接收

也可以一段时间将数据取出来,重新DMA接收

或者等到DMA接收完成再重新DMA接收,程序通过判断接收长度与出队指针配合处理数据

使用特权

评论回复
板凳
mtbf| | 2020-8-20 20:02 | 只看该作者
使用手册里说串口配合Timer0可以实现接收超时中断功能
TIMEOUT计数器 采用 Timer0模块 的计数器,具体 对应 关系 如下:
USART1 Timer0 Unit1 A通道
USART2 Timer0 Unit1 B通道
USART3 Timer0 Unit2 A通道
USART4 Timer0 Unit2 B通道

使用特权

评论回复
地板
花花holiday|  楼主 | 2020-8-21 18:17 | 只看该作者
ayb_ice 发表于 2020-8-20 09:24
设一缓冲区,比最大数据帧还要长,
开始设置DMA接收,数据自然在缓冲区里,已经接收的长度也是知道的,可以 ...

开始设置DMA接收后,数据自然在缓冲区,那已经接收的长度怎么知道的,怎么保证DMA只发送到帧尾,而不会把缓冲区的数据全部发送出去?

使用特权

评论回复
5
ayb_ice| | 2020-8-24 08:18 | 只看该作者
花花holiday 发表于 2020-8-21 18:17
开始设置DMA接收后,数据自然在缓冲区,那已经接收的长度怎么知道的,怎么保证DMA只发送到帧尾,而不会把 ...

已经接收的长度一般有寄存器可以读到,
发送就简单了,这里只讨论了接收

使用特权

评论回复
6
martinhu| | 2020-8-25 01:54 | 只看该作者
可以用高级定时器+另一路DMA,配置成一个空闲中断……

使用特权

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

本版积分规则

1

主题

4

帖子

0

粉丝