新手入门
- 积分
- 6
- 金钱
- 6
- 注册时间
- 2025-10-15
- 在线时间
- 1 小时
|
2金钱
参考的正点原子的官方demo,环境如下所示。
开发板:ATK-DLAM62XB
参考资料如下所示

dma_cap_mask_t mask;
dma_cap_zero(mask);
dma_cap_set(DMA_MEMCPY, mask);
channel = dma_request_channel(mask, NULL, NULL);
使用上述方式申请的DMA 通道;
struct dma_device *dev = data->m_channel->device;
struct dma_async_tx_descriptor *tx = NULL;
struct dma_slave_config cfg;
memset(&cfg, 0, sizeof(cfg));
cfg.device_fc = false;
cfg.dst_maxburst = 1;
cfg.src_maxburst = 1;
cfg.direction = DMA_MEM_TO_MEM;
cfg.src_addr = data->m_src_addr;
cfg.dst_addr = data->m_dst_addr;
cfg.src_addr_width = DMA_SLAVE_BUSWIDTH_2_BYTES;
cfg.dst_addr_width = DMA_SLAVE_BUSWIDTH_2_BYTES;
ret = dmaengine_slave_config(data->m_channel, &cfg);
tx = dev->device_prep_dma_memcpy(data->m_channel,
dst_addr,
src_addr,
data->m_data_len * sizeof(u16),
DMA_CTRL_ACK | DMA_PREP_INTERRUPT);
tx->callback = fpga_dma_complete;
tx->callback_param = data->m_wait;
dmaengine_submit(tx);
dma_async_issue_pending(data->m_channel);
wait_for_completion(data->m_wait);
使用上述方式进行搬运数据,发现从FPGA的BRAM读取的数据时混乱的,有老师能提供指导吗。
|
|