一箭双雕2025 2025-11-13 19:12 采纳率: 0%
浏览 9

PCI9054 DMA缓冲区数据更新慢

PCI9054 DMA启动后,用户DMA缓冲区的数据以4KB为单位在更新,更新速度很慢,请帮忙分析可能的原因。以下是根据原型的实现。
1 这个函数是提交DMA参数的代码

int sub_49D5F0(HANDLE hDevice, int a2, int *a3)
{
  int v4; 
  int *lpInBuffer; 
  lpInBuffer[19] = 3;//DMA通道号
    *lpInBuffer = 0;
    lpInBuffer[16] = 0x00060201;//动态调试为固定值
    lpInBuffer[17] =0;//动态调试为固定值
    lpInBuffer[18] = 0;//动态调试为固定值
  DeviceIoControl(hDevice, 0x83001100, lpInBuffer, 0x5Cu, lpInBuffer, 0x5Cu, 0, (LPOVERLAPPED)(lpInBuffer + 23));
  v4 = *lpInBuffer;
  return v4;
}

2、这个函数是发送DMA传输开始命令的

int sub_49D6C0(HANDLE hDevice, int a2, const void *a3)
{
  int v4; 
  int *lpInBuffer;
  int v6[3];
  lpInBuffer[19] =3;DMA通道号
 v6[0] = 用于映射的DMA缓冲区地址;
  v6[1] = 0x80000;//可能是传输长度,动态调试为固定值
  v6[2] = 0x20000;//动态调试为固定值
  v6[3]=8;
  qmemcpy(lpInBuffer + 4, v6, 0x30u);
  DeviceIoControl(hDevice, 0x83001122, lpInBuffer, 0x5Cu, lpInBuffer, 0x5Cu, 0, (LPOVERLAPPED)(lpInBuffer + 23));
  v4 = *lpInBuffer;
  return v4;
}  

  • 写回答

4条回答

  • 阿里嘎多学长 2025-11-13 19:29
    关注

    阿里嘎多学长整理AIGC生成,因移动端显示问题导致当前答案未能完全显示,请使用PC端查看更加详细的解答过程

    问题分析

    根据你的描述,PCI9054 DMA缓冲区数据更新速度很慢,可能的原因包括:

    1. DMA缓冲区大小: 如果缓冲区大小太小,可能导致DMA传输速度慢。
    2. DMA传输模式: 如果使用的是单缓冲模式,可能导致DMA传输速度慢。
    3. DMA传输频率: 如果DMA传输频率太低,可能导致缓冲区数据更新速度慢。
    4. 硬件限制: PCI9054硬件可能存在限制,例如最大DMA传输速度等。

    解决方案

    1. 检查DMA缓冲区大小: 确保缓冲区大小足够大,以满足DMA传输需求。
    2. 检查DMA传输模式: 确保使用的是双缓冲模式或多缓冲模式,以提高DMA传输速度。
    3. 检查DMA传输频率: 确保DMA传输频率足够高,以满足缓冲区数据更新需求。
    4. 检查硬件限制: 确保硬件支持的最大DMA传输速度是否足够高。

    核心代码

    // 检查DMA缓冲区大小
    if (dma_buffer_size < 4KB) {
        // 增加缓冲区大小
        dma_buffer_size = 4KB;
    }
    
    // 检查DMA传输模式
    if (dma_mode == DMA_SINGLE_BUFFER) {
        // 切换到双缓冲模式
        dma_mode = DMA_DOUBLE_BUFFER;
    }
    
    // 检查DMA传输频率
    if (dma_frequency < 100MHz) {
        // 增加DMA传输频率
        dma_frequency = 100MHz;
    }
    

    注意

    上述代码仅为示例,具体实现需要根据实际情况进行调整。

    评论

报告相同问题?

问题事件

  • 创建了问题 11月13日