打印
[PSoC™]

一种实现PSoC6 UART接收不定长数据的方法

[复制链接]
49|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
1.       背景介绍
项目中使用串口收发数据必然会遇到接收不定长数据的情况。串口接收数据大致可以分为以下几种:
1) 轮询的方式,通过不断检查串口接收缓冲区中是否有新的数据来实现接收。这种方式需要不断的查询串口缓冲区,系统资源利用率不高。
2) 中断的方式,使用串口接收中断来通知处理器有新的数据。这种方式比轮询方式更高效,让系统在有数据到达时立即做出响应,更契合嵌入式数据处理的理念。
3) DMA的方式,使用DMA传输,可以减轻处理起的负担,在处理大数据量的时候优势很明显。
在面对不定长数据接收的情况,很多芯片采用DMA+空闲中断的方式,确保及时接收并处理完整一帧数据。在PSoC6中我们可以通过使用 非空中断+DMA+Timer的方式实现不定长数据的接收。
2.       实现不定长数据处理的方法
1) 串口初始化:配置基本参数,注册回调函数,使能RX_Done/TX_Done/RX_Not_Empty
2) Timer初始化:重点为Timer周期配置为触发一次Rx_Done所需要的时间(例程中设置为64B触发RX Done中断,uart波特率为115200,所以周期配置为6ms(87us*64))
3) 中断回调函数:
a.       RNE中断处理:关闭RNE中断,开启定时器
b.       RX Done中断处理:计数值加1,拷贝数据
4) 定时器中断:
若两次进入中断,计数值未变,表示一帧数据接收完成,停止定时器
3.       代码实现
1) 串口初始化
      
2) Timer初始化
  
3) 中断回调
  
4) 定时器中断
  
4.       例程使用及注意事项
1) 因为使用Timer做空闲判断处理,所以两帧数据包之间的间隔要小于Timer的周期,否则会导致误判
2) 该例程基于MTB3.1和CY8CKIT-062-WIFI-BT设计开发
3) 该例程功能为从串口获取数据,并打印完整一包数据,将例程烧写到板子后,通过串口发送任意长度的一帧数据,可以在接收窗口看到所发送的数据。

UART_DMA_IDLE.zip

4.7 MB

使用特权

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

本版积分规则

认证:英飞凌科技股份公司
简介:关于英飞凌——我们致力于打造一个更加便利、安全和环保的世界,在赢得自身成功发展的同时,积极践行企业社会责任。

17

主题

25

帖子

2

粉丝