你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

[有代码]工程有个关于DMA的,就顺便和大家讨论一下

[复制链接]
beary 提问时间:2016-2-16 16:57 /
以下是一段DMA初始化的代码,初始化完以后是不是会马上调用中断函数,void DMAChannel2_IRQHandler(void),


不过在中断回调函数里也没看到处理数据的部分,直接就开始清除标志了。。


是不是说DMA只要使能以后,就相当于是一个类似多线程或者中断那样的东西,独立于CPU的操作之外,只要有数据就自动使用DMA控制器传输?


void UartStartTransmit(void)
{
  if (pBuffer != (uint8_t)0)                                                                                    //一个全局的buffer,判空
  {
                                                                                           //DMA的结构体封装在一个Demo的结构体当中,所以直接初始化调用
    Demo.DMA_Tx_InitStructure.DMA_MemoryBaseAddr = (uint32_t)tComUart.TxData.pBuffer;
    Demo.DMA_Tx_InitStructure.DMA_BufferSize     = TxData.Length;
    DMA_Init(DMA1_Channel2, &tComUart.DMA_Tx_InitStructure);
/*
  中断和使能
*/
    DMA_ITConfig(DMA1_Channel2, (DMA_IT_TC | DMA_IT_TE), ENABLE);
    USART_DMACmd(USART3, USART_DMAReq_Tx, ENABLE);                                  //usart DMA使能
    DMA_Cmd(DMA1_Channel2, ENABLE);                                                              //DMA1通道2使能
  }
}


void DMAChannel2_IRQHandler(void)
{
  DMA_ClearFlag(DMA1_FLAG_GL2 | DMA1_FLAG_TC2 | DMA1_FLAG_HT2 | DMA1_FLAG_TE2);
  USART_DMACmd(USART3, USART_DMAReq_Tx, DISABLE);
  DMA_Cmd(DMA1_Channel2, DISABLE);

  Demo.TransmitCompleted();
}


收藏 评论4 发布时间:2016-2-16 16:57

举报

4个回答
xmshao 最优答案 回答时间:2016-2-17 11:08:48
DMA的动作还需要触发源,或者说DMA请求产生。也就是你代码里配置的相关通道的请求。

DMA中断里没有数据处理时正常的,数据的处理未必要放在DMA中断里。一般来说数据处理不会放在中断里进行。

DMA传输是是DMA在做,而DMA中断是CPU在操作。

为了避免反复中断,清中断标志是应该的。
beary 回答时间:2016-2-17 11:35:21
xmshao 发表于 2016-2-17 11:08
DMA的动作还需要触发源,或者说DMA请求产生。也就是你代码里配置的相关通道的请求。

DMA中断里没有数据处 ...

谢谢回复,

也就是说,UartStartTransmit  做完以后其实就是一直在传输数据了  ,  相当于双核多线程,CPU做自己的事,DMA做自己的事
xmshao 回答时间:2016-2-17 11:36:55
差不多。 各忙各的。
beary 回答时间:2016-2-17 11:41:08
既然CPU是处理回调的,我后来在里面添加了一个打印发现没有打印出来,是不是大概可以说明没有清楚标志

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版