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.

[参考译文] RM44L520:与用于 SPI DMA 的 RM46L852有什么区别?

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1134699/rm44l520-any-difference-with-rm46l852-for-spi-dma

器件型号:RM44L520
主题中讨论的其他器件: RM46L852HALCOGEN

尊敬的香榭丽舍

我的客户在启用 DMA 的情况下成功在 RM46L852上实施了 SPI、但在 RM44L520上失败。

这两个器件之间是否有任何差异?

通过参阅以下内容、它们实现了 SPI4 + DMA、但仍然失败。

https://software-dl.ti.com/hercules/hercules_docs/latest/hercules/Examples/Examples.html#using-dma-to-transfer-data-in-spi-compatibility-mode 

https://git.ti.com/cgit/hercules_examples/hercules_examples/tree/Application/TMS570_SPI_DMA 

他们稍微修改了示例代码以使用 SPI4、而不是 SPI3、如下所示。

您能否检查一下、让我知道他们应该进一步检查什么?

~~~~~~~~~μ A

#define SPI4_TX_ADDR ((uint32_t)(&(spiREG4->DAT1))+ 2)

      /*-正在初始化 mibspi*/
      spiInit();

      
spiREF4->PC0 = 0
                    |(1<<11)  //SOMI[0]作为功能引脚
                    |(1<<10)  //SIMO[0]作为功能引脚
                    |(1 << 9) //CLK 作为功能引脚
                    |(0);     /CS 作为 GIO 引脚
      
spiREG4->PC1 = 0x01; //CS[0]作为输出
      
spiREG4->PC3 = 0x00; //CS[0]= 0

      /*-启用 DMA 模块*/
      dmaEnable();

      /*接收数据后启用中断*/
      //dmaEnableInterrupt (DMA_CH0、FTC);    //帧传输完成
      dmaEnableInterrupt (DMA_CH0、BTC);    //块传输完成
      dmaEnableInterrupt (DMA_CH0、HBC);    //半块传输完成

      /*-分配 DMA 请求:带有请求线路的通道0 - 0/15 */
      /*请求行0:SPI1接收*/
      /*请求行1:SPI1发送*/
      /*请求行14:SPI3接收*/
      /*请求行15:SPI3发送*/
      dmaReqAssign (DMA_CH0、0);    //SPI1 RX
      dmaReqAssign (DMA_CH1、
25);   //SPI3 TX

      /*-配置 DMA TX 控制数据包  */
      dmaConfigCtrlTxPacket ((unsigned int)&TX_DATA、SPI4_TX_ADDR、1、blocksize);
      dmaSetCtrlPacket (DMA_CH1、g_dmaCTRLPKT_TX);

      /*-配置 DMA RX 控制数据包  */
      /* dmaConfigCtrlRxPacket (uint32 Sadd、uint32 dadd、uint32 dsize) */
      dmaConfigCtrlRxPacket (SPI1_RX_ADDR、(unsigned int)&RX_DATA、1、blocksize);
      dmaSetCtrlPacket (DMA_CH0、g_dmaCTRLPKT_RX);

      /*-将 DMA 通道设置为在硬件请求时触发*/
      dmaSetChEnable (DMA_CH0、DMA_HW);   //SPI1 RX、硬件触发
      dmaSetChEnable (DMA_CH1、DMA_HW);   //SPI3 TX、硬件触发


      //为了在 DMA 操作期间实现高效行为,可以禁用发送器空中断和接收缓冲区满中断
      //当下列任一项为真时、生成第一个 TX_DMA_REQ 脉冲:
      // 1. DMAREQEN (SPIINT0[16])被设定为1、而 SPIEN (SPIGCR1[24])已经为1。
      // 2. SPIEN (SPIGCR1[24])被设定为1、而 DMAREQEN (SPIINT0[16])已经为1。
      spiREG1->GCR1 =(spiREG1->GCR1 & 0xFFFFFFFFU)|(0x1 << 24); //启用 SPI
      spiREG1->INT0 =(0x1 << 16);//SPI_DMAREQ;仅在将 SPIEN 位设置为1后启用 DMA 请求。
      
spiREG4->GCR1 =(spiREG4->GCR1 & 0xFFFFFFFFU)|(0x1 << 24); //启用 SPI
      
spiREF4->INT0 =(0x1 << 16);//SPI_DMAREQ;仅在将 SPIEN 位设置为1后启用 DMA 请求。

      while (SPI4_BTCTFlag =0){   //DMA 块完成中断
      }

 ~~~~~~~~~~μ A

谢谢、此致、

SI

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

    您好 SI、

    我已开始处理您的问题、我将很快向您提供更新。

    --

    谢谢、此致、

    Jagadish。

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

    您好 Jagadish、

    我的客户发现、仅当在 Halcogen 04.07.01版本的"安全初始化"选项卡的"内存内置自检启用"中检查 ADC2时、才启用 SPI4 DMA、但他们不需要在用例中使用 ADC2。

    要使用 SPI4 DMA、它们应该启用 ADC2? 是否可以在没有 ADC2的情况下使用 SPI4 DMA?

    谢谢、此致、

    SI

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

    您好 SI、

    SPI4和 ADC2之间不应存在任何相关性、我也没有发现过与此相关的任何问题。

    没有使用"RM44L520"板、我将尝试使用另一个类似板、但我想知道您的以下信息:

    1.您能否共享您的代码、是否可能?
    2.启用 ADC2后,您是否观察到 SPI4代码发生了变化,或者是否是您怀疑的芯片问题?

    --

    谢谢、此致、

    Jagadish。