硬汉嵌入式论坛

 找回密码
 立即注册
查看: 86|回复: 1
收起左侧

[DMA] 关于stm32h732 mdma的问题

[复制链接]

1

主题

0

回帖

3

积分

新手上路

积分
3
发表于 5 天前 | 显示全部楼层 |阅读模式
我使用mdma从一块内存向另一块内存传输数据

hal_ret = HAL_MDMA_Start_IT(&hmdma_mdma_channel0_sw_0, (uint32_t)test_data, (uint32_t)test_data2, 128, 1);
当BlockCount==1时则能完成传输, BlockCount>1时, mdma的状态就回不到ready
hal_ret = HAL_MDMA_Start_IT(&hmdma_mdma_channel0_sw_0, (uint32_t)test_data, (uint32_t)test_data2, 128, 2);

我的mdma初始化代码如下:

void MX_MDMA_Init(void)
{

  /* MDMA controller clock enable */
  __HAL_RCC_MDMA_CLK_ENABLE();
  /* Local variables */

  /* Configure MDMA channel MDMA_Channel0 */
  /* Configure MDMA request hmdma_mdma_channel0_sw_0 on MDMA_Channel0 */
  hmdma_mdma_channel0_sw_0.Instance = MDMA_Channel0;
  hmdma_mdma_channel0_sw_0.Init.Request = MDMA_REQUEST_SW;
  hmdma_mdma_channel0_sw_0.Init.TransferTriggerMode = MDMA_BUFFER_TRANSFER;
  hmdma_mdma_channel0_sw_0.Init.Priority = MDMA_PRIORITY_VERY_HIGH;
  hmdma_mdma_channel0_sw_0.Init.Endianness = MDMA_LITTLE_ENDIANNESS_PRESERVE;
  hmdma_mdma_channel0_sw_0.Init.SourceInc = MDMA_SRC_INC_HALFWORD;
  hmdma_mdma_channel0_sw_0.Init.DestinationInc = MDMA_DEST_INC_HALFWORD;
  hmdma_mdma_channel0_sw_0.Init.SourceDataSize = MDMA_SRC_DATASIZE_HALFWORD;
  hmdma_mdma_channel0_sw_0.Init.DestDataSize = MDMA_DEST_DATASIZE_HALFWORD;
  hmdma_mdma_channel0_sw_0.Init.DataAlignment = MDMA_DATAALIGN_PACKENABLE;
  hmdma_mdma_channel0_sw_0.Init.BufferTransferLength = 128;
  hmdma_mdma_channel0_sw_0.Init.SourceBurst = MDMA_SOURCE_BURST_8BEATS;
  hmdma_mdma_channel0_sw_0.Init.DestBurst = MDMA_DEST_BURST_8BEATS;
  hmdma_mdma_channel0_sw_0.Init.SourceBlockAddressOffset = 0;
  hmdma_mdma_channel0_sw_0.Init.DestBlockAddressOffset = 0;
  if (HAL_MDMA_Init(&hmdma_mdma_channel0_sw_0) != HAL_OK)
  {
    Error_Handler();
  }

  /* MDMA interrupt initialization */
  HAL_MDMA_RegisterCallback(&hmdma_mdma_channel0_sw_0, HAL_MDMA_XFER_BUFFERCPLT_CB_ID, HAL_MDMA_XferCpltCallback);
  HAL_MDMA_RegisterCallback(&hmdma_mdma_channel0_sw_0, HAL_MDMA_XFER_BLOCKCPLT_CB_ID, HAL_MDMA_XferCpltCallback);
  /* MDMA_IRQn interrupt configuration */
  __HAL_MDMA_ENABLE_IT(&hmdma_mdma_channel0_sw_0, MDMA_IT_BFTC | MDMA_IT_TE | MDMA_IT_CTC);
  HAL_NVIC_SetPriority(MDMA_IRQn, 5, 0);
  HAL_NVIC_EnableIRQ(MDMA_IRQn);

}


我最终的目的是将片上RAM的数据写入到SDRAM中, 由于SDRAM写入比较慢, 所有我先放在片上做了缓存, 缓存满后开启一次发送
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
116230
QQ
发表于 4 天前 | 显示全部楼层
这个有个例子的,供参考。

STM32H7的MDMA,DMA2D和DMA性能测试出来了,DMA2D和MDMA有一拼,DMA1和2的性能太挫
https://www.armbbs.cn/forum.php? ... 4058&fromuid=58
(出处: 硬汉嵌入式论坛)
回复

使用道具 举报

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

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2025-6-10 22:09 , Processed in 0.266422 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表