|
|
发表于 2025-11-23 19:58:58
|
显示全部楼层
/* 配置MDMA时钟 */
QSPI_MDMA_CLK_ENABLE();
hmdma.Instance = MDMA_Channel1; /* 使用MDMA的通道1 */
hmdma.Init.Request = MDMA_REQUEST_QUADSPI_FIFO_TH; /* QSPI的FIFO阀值触发中断 */
hmdma.Init.TransferTriggerMode = MDMA_BUFFER_TRANSFER; /* 使用MDMA的buffer传输 */
hmdma.Init.Priority = MDMA_PRIORITY_HIGH; /* 优先级高 */
hmdma.Init.Endianness = MDMA_LITTLE_ENDIANNESS_PRESERVE;/* 小端格式 */
hmdma.Init.SourceInc = MDMA_SRC_INC_BYTE; /* 源地址字节递增 */
hmdma.Init.DestinationInc = MDMA_DEST_INC_DISABLE; /* 目的地址无效自增 */
hmdma.Init.SourceDataSize = MDMA_SRC_DATASIZE_BYTE; /* 源地址数据宽度字节 */
hmdma.Init.DestDataSize = MDMA_DEST_DATASIZE_BYTE; /* 目的地址数据宽度字节 */
hmdma.Init.DataAlignment = MDMA_DATAALIGN_PACKENABLE; /* 小端,右对齐 */
hmdma.Init.BufferTransferLength = 128; /* 每次传输128个字节 */
hmdma.Init.SourceBurst = MDMA_SOURCE_BURST_SINGLE; /* 源数据单次传输 */
hmdma.Init.DestBurst = MDMA_DEST_BURST_SINGLE; /* 目的数据单次传输 */
hmdma.Init.SourceBlockAddressOffset = 0; /* 用于block传输,buffer传输用不到 */
hmdma.Init.DestBlockAddressOffset = 0; /* 用于block传输,buffer传输用不到 */
/* 关联MDMA句柄到QSPI句柄里面 */
__HAL_LINKDMA(hqspi, hmdma, hmdma);
/* 先复位,然后配置MDMA */
HAL_MDMA_DeInit(&hmdma);
HAL_MDMA_Init(&hmdma);
/* 使能MDMA中断,并配置优先级 */
HAL_NVIC_SetPriority(MDMA_IRQn, 0x02, 0);
HAL_NVIC_EnableIRQ(MDMA_IRQn);
}
大佬,为什FiFo 32 加Fifo阈值触发MDMA呢?那还没有读写的时候Fifo不就是满足条件触发MDMA了?而且一次不是传输一个字节(就是一个QSPI_DR 数据)吗,为什么配置为传输长度128? |
|