4202|6

97

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

(3)UART之DMA加IDLE中断不定长字节接收 [复制链接]

雷达应用接收的数据量比较大,因此需要用到DMA来提高速度,降低MCU负载。之前的项目已经在STM32F103芯片上使用了DMA+IDLE中断的方式实现了不定长的UART数据接收,这里也想在GD32L233C实现。

 

GD32L233C-START开发板配套的例程GD32L233K_START_Demo_Suites只有6个例程。关于UART接口的只有04_USART_HyperTerminal_Interrupt这一个例程。也不是我想要的DMA。但是我看到GD32L23x_Demo_Suites_V1.1.0这个例程包里面还有另外一个开发板的配套例程GD32L233R_EVAL_Demo_Suites,里面有多达24个例程。光UART相关就有4个,特别是包含DMA的例程,真是柳暗花明又一村。

 

例程是这样的:启动后,USART将输出“USART DMA interrupt receive and transmit example, please input 10 bytes:”并等待接收由超级终端发送10个字节的数据。MCU接收到数据后,串口将接收到的数据继续输出到超级终端。

 

功能实在是太简单了,好在DMA收发功能都已经初始化完毕,因此只需要进行简单修改就好了。

 

首先是GD32L233C-START开发板使用的是USART0,对应的IO是PA9和PA10,因此需要修改所有相关代码。这里就不展开了。

 

其次是需要添加IDLE中断相关使能代码。

main.c中系统初始化UART后面添加UART中断使能以及IDLE中断使能,

    /* USART interrupt configuration */
    nvic_irq_enable(USART0_IRQn, 0);
    /* enable USART1 IDLE interrupt */
    usart_interrupt_enable(USART0, USART_INT_IDLE);

   特别是前一句,如果未添加的话无法进入中断,也就没有IDLE中断了。我也是看了05_USART_HyperTerminal_Interrupt这个例程才找到原因的。

gd32l23x_it.c中添加IDLE中断调用:

void USART0_IRQHandler(void)
{
    if(RESET != usart_interrupt_flag_get(USART0, USART_INT_FLAG_IDLE)) {
      usart_interrupt_flag_clear(USART0, USART_INT_FLAG_IDLE);  // 清标志
      dma_channel_disable(DMA_CH1);  // 关闭DMA
      //DMA接收到数据后CHCNT是往下减的,因此已经接收到的数据长度=DMA总长-当前CHCNT
      g_receive_count = RX_NUM - DMA_CHCNT(DMA_CH1);  
      /* configure the number of remaining data to be transferred */
      DMA_CHCNT(DMA_CH1) = RX_NUM;  // 复位DMA计数
      dma_channel_enable(DMA_CH1);  // 使能DMA
      g_receive_complete = SET;  // 接收数据标志置高
    }
    // 这里可以添加各种通讯错误处理
}

   这里需要对DMA进行干预,因为发生了IDLE事件,即收到一个短于DMA设置长度的数据段,此时可将数据进行处理,然后重新复位DMA计数,否则DMA会将两个甚至多个数据段拼合,导致错误。当然,如果不是像我一样设置了较大的DMA缓存,主要通过IDLE中断来接收不定长数据的话,也可能正合适。

下面通过串口软件发送不同长度的数据进行简单测试:

都能正确接收回送。附: main.c (7.5 KB, 下载次数: 11) gd32l23x_it.c (4.49 KB, 下载次数: 10)

此帖出自GD32 MCU论坛

最新回复

为什么这样配置MCU一上电就进入空闲中断   详情 回复 发表于 2024-1-10 15:53
点赞 关注(1)
 

回复
举报

6587

帖子

0

TA的资源

五彩晶圆(高级)

沙发
 

如果未添加的话无法进入中断,也就没有IDLE中断了,这个具体什么原因呢

此帖出自GD32 MCU论坛

点评

就是必须先开USART中断,再开USART里面的IDLE中断  详情 回复 发表于 2022-4-22 18:27
 
 
 

回复

6841

帖子

11

TA的资源

版主

板凳
 
建议标题,咱加上是哪一款芯片,这样一看就明白。希望下次的文章有进步!谢谢
此帖出自GD32 MCU论坛

点评

外边选择了主题,再加上芯片是不是太长了  详情 回复 发表于 2022-4-19 22:26
 
 
 

回复

7452

帖子

2

TA的资源

五彩晶圆(高级)

4
 

DMA IDLE倒是一个不错的硬件机制,有些硬件没有,只能用硬件定时器来做

此帖出自GD32 MCU论坛
 
个人签名

默认摸鱼,再摸鱼。2022、9、28

 
 

回复

6060

帖子

6

TA的资源

版主

5
 
lugl4313820 发表于 2022-4-18 07:49 建议标题,咱加上是哪一款芯片,这样一看就明白。希望下次的文章有进步!谢谢

外边选择了主题,再加上芯片是不是太长了

此帖出自GD32 MCU论坛
 
个人签名

在爱好的道路上不断前进,在生活的迷雾中播撒光引

 
 

回复

97

帖子

0

TA的资源

一粒金砂(中级)

6
 
Jacktang 发表于 2022-4-18 07:11 如果未添加的话无法进入中断,也就没有IDLE中断了,这个具体什么原因呢

就是必须先开USART中断,再开USART里面的IDLE中断

此帖出自GD32 MCU论坛
 
 
 

回复

4

帖子

0

TA的资源

一粒金砂(初级)

7
 

为什么这样配置MCU一上电就进入空闲中断

此帖出自GD32 MCU论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
推荐帖子
应用技巧/用68HC908GP32单片机实现EPP增强并口的接口技术

摘要:本文介绍了计算机并口的几种操作模式,给出了实现EPP接口设计的几种方案;着重介绍用Motorola公司的68HC908GP32单片机 ...

常用网络命令

常用网络命令 计算机网络的主要优点是能够实 ...

友善之臂嵌入式浏览器中文支持移植成功

经过本人的改造,友善之臂的qtopia自带的浏览器终于支持中文网页了,也就是,如果能把应用程序再汉化下,就可以应用到开发中。空 ...

谈谈我写书的经历

写书,在一些人看来是一个非常光荣而又伟大的事情;在又一些人看来却是一件赚钱的行当。为了让大家真正认识到写书的痛苦与艰辛, ...

留住身边的美景,2015年春天

本帖最后由 mmmllb 于 2015-4-9 12:28 编辑 不知道说现在是春天是否合适:Sweat:,先这么叫着。 话说最近各路的花都开了,有 ...

【DIY创意LED】参考设计(原理图+PCB)

本帖最后由 dcexpert 于 2020-9-15 17:05 编辑 这次使用了立创EDA进行设计,一个原因是立创EDA是国产免费软件,容易查找器件 ...

AD-DC整流、精密整流

AD-DC整流、精密整流: 1.整流桥、四个二极管整流和运放整流有哪些区别? 2.整流之后,为何把正半周信号丢弃了,并且 ...

直流转换电源电感下的铺铜

本帖最后由 qwqwqw2088 于 2022-7-18 09:08 编辑 对DC/DC 电源的电感底部是否应该铺铜这个问题,常常有意见分歧。 一种认为, ...

【Follow me第二季第1期】 开发环境的搭建-基于CircuitPython

二、开发环境的搭建(基于CircuitPython) 安装或更新CircuitPython 单击上面的链接并下载最新的 UF2 文件这里选择中 ...

MOSFET栅极振荡

那么是不是栅极驱动电流越大越好呢也就是我们的驱动电阻的内阻是不是越小越好这也有可能带来问题我们来对驱动电路进行定量仿真用 ...

关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表