This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] TMS320F28P650DK:DMA 配置

Guru**** 2322270 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1519225/tms320f28p650dk-dma-configuration

器件型号:TMS320F28P650DK

工具/软件:

我一直在尝试使用 DMA 外设、但遇到了一些问题。

可以看到地址配置相应、但没有传输数据。

我的目标:每个 ADCA1事件用于触发从源地址到目标地址的 DMA 复制。

我正在尝试复制32位 uint32_t 数据类型。

数据复制应该是循环的-配置完成后、我不想重新配置 DMA。

我还可以告诉 ADCA1事件函数-我可以进入也从 ADCA1事件触发的 ISR 函数。

这是我的 DMA 配置:

有什么我遗漏的吗? 此配置是否符合我的需求?

谢谢、

Ariel

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Ariel:

    我看到的一个问题是步长设置为0、这意味着 src 和目标地址对于每次突发将保持相同。 现在的方式是、每个 Ariel_Test_  Ariel_Test_触发都将使 u32_ADCS.src 变量的前16位移到上面(仅为零)、并将其移动到 u32_ADCS-dest 变量的前16位、这就是您没有看到任何实际更新内容的原因。 在该设置中、您需要将突发大小更改为1。 您还将绕回大小设置为零、这意味着在此基础上、它将在每次突发后绕回第一个地址、这意味着它永远不会到达底部16位。 如果您实际上不想换行、则应将换行大小设置为65535。

    但是、如果使用32位变量来 DMA 读取写操作、我建议使用32位设置。 然后、突发数据大小和传输数据大小均可设置为1。 在这种情况下、可以将阶跃大小设为0、因为无论如何都只有一个突发。

    如果回答了您的问题、请支持此回答。 Slight smileμ s

    此致、

    Delaney

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    因此、如果我理解正确:我应该保留32位配置、只需将突发大小从2更改为1。

    如果这是您的建议-我仍然看不到任何数据更新。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Ariel:

    您是否还可以更改包装尺寸(我建议使用 65535)?  

    如果这仍然无法解决问题、请 在 CCS 的寄存器窗口中向我发送控制寄存器的状态(启用连续刷新)。

    此致、

    Delaney

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    可悲的是-仍然不工作。

    DmaRegs     DMA 寄存器    
      DMACTRL  0x0000  DMA 控制寄存器[存储器映射]    
      DEBUGCTRL  0x0000  调试控制寄存器[存储器已映射]    
      PRIORITYCTRL1  0x0000  优先级控制1寄存器[存储器已映射]    
      PRIORITYSTAT  0x0000  优先级状态寄存器[存储器已映射]    


    Dmach1Regs     DMA CH 寄存器    
      模式  0x4901  模式寄存器[存储器映射]    
      控制  0x0100  控制寄存器[存储器已映射]    
      BURST_SIZE  0x0000  突发大小寄存器[存储器映射]    
      BURST_COUNT  0x0000  突发计数寄存器[存储器映射]    
      SRC_BURST_STEP  0x0000  源突发步长寄存器[存储器映射]    
      DST_BURST_STEP  0x0000  目标突发步长寄存器[存储器已映射]    
      transfer_size  0x0000  传输大小寄存器[存储器已映射]    
      TRANSFER_COUNT  0x0000  传输计数寄存器[存储器已映射]    
      SRC_TRANSFER_STEP  0x0000  源传输步长寄存器[存储器已映射]    
      DST_TRANSFER_STEP  0x0000  目标传输步长寄存器[存储器已映射]    
      src_wrap_size  0xFFFE  源绕回大小寄存器[已映射存储器]    
      SRC_WRAP_COUNT  0x0000  源绕组计数寄存器[存储器已映射]    
      src_wrap_step  0x0000  源绕回步长寄存器[存储器已映射]    
      DST_WRAP_SIZE  0xFFFE  目标绕回大小寄存器[已映射存储器]    
      DST_WRAP_COUNT  0x0000  目标绕组计数寄存器[存储器已映射]    
      DST_WRAP_STEP  0x0000  目标绕回步长寄存器[存储器已映射]    
      SRC_Beg_ADDR_SHADOW  0x000252D2  源开始地址影子寄存器[存储器已映射]    
      SRC_ADDR_SHADOW 0x000252D2    源地址影子寄存器[存储器已映射]    
      SRC_Beg_ADDR_ACTIVE  0x00000000  源起始地址活动寄存器[存储器已映射]    
      SRC_ADDR_ACTIVE  0x00000000  源地址活动寄存器[存储器已映射]    
      DST_Beg_ADDR_SHADOW  0x000252D4  目标开始地址影子寄存器[已映射存储器]    
      DST_ADDR_SHADOW  0x000252D4  目标地址影子寄存器[存储器已映射]    
      DST_Beg_ADDR_ACTIVE  0x00000000  目标起始地址活动寄存器[已映射存储器]    
      DST_ADDR_ACTIVE  0x00000000  目标地址活动寄存器[存储器已映射]    

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Ariel:

    从您的寄存器中、看起来触发器正在发生、但实际上没有任何数据被移动。 我还看到此寄存器中的 RUN 位没有设置(因为控制寄存器中的第0位为0)。 您可以向添加呼叫吗  DMA_startChannel (DMA_CH1_BASE) 在初始化结束时? 如果问题得到解决、请支持此回答。

    此致、

    Delaney