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.

[参考译文] TMS570LC4357:使用 DMA 将 MibSPI1更改为 MibSpi5问题

Guru**** 2482105 points
Other Parts Discussed in Thread: HALCOGEN

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/713027/tms570lc4357-mibspi1-to-mibspi5-using-dma-questions

器件型号:TMS570LC4357
主题中讨论的其他器件:HALCOGEN

各位专家、您好!  

我最近开始使用 Hercules 安全控制器。 这是一个紧急请求、因为我们计划在接下来的几天内进行演示。 在阅读 TRM 后、我认为发展过程中有几个问题还不够清楚。

我的用例是将数据从 MibSpi1传输到 MibSpi5。 这里、MibSpi1是主器件、用于传输。 MibSpi5是从器件、用于接收。  

传输大小是从255到512字节不等的变量。 RD 和 WR 大小为8位。 请在下面查找我的问题。

我知道 Mibspi RAM 是128个字。 这是否意味着在每个 MibSpi 通道的任何时候总共256 =(128x2)字节可被缓冲? 如果是,如果我想将 buffer_Length 配置 为512,Mibspi 将如何处理?

2.您能否解释下句

mibspi->DMACTRL[通道]|=(((rxchannel<<4)|txchannel)<< 16);

我假设 rxchannel 和 txchannel 是 为各自的 SPI 配置的 DMA 物理通道,但什么是 chennel? 对于 MIBSPi1、我不想为 Rx 使用任何 DMA 通道。 如何实现?

3.我对 BUFIDx 概念感到困惑。 在示例代码中、我看到它被127初始化、在 DMA 配置中、ELDOFFSET 为4字节。 这是否意味着 DMA DADD 向后遍历?

4.由于我不想使用双工功能,是否需要  启用发送和接收 DMA? 我尝试将其更改为0x80008000、但它不起作用

/*启用发送和接收 DMA */
mibspi->DMACTRL[通道]|= 0x8000C000;

5. dmaReqAssign 的用途是什么,应该为 MIBSPI1和 MibSpi5分配哪些通道

6.提供的示例代码仅具有自环回配置。 您能否为两个独立的 SPI 提供配置?

添加您的支持、

此致、

Akshay

 

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

    您好、Akshay、

    如果 未启用 DELAY_BUF 功能、则 MibSPI RAM 为128字。  如果启用了 extended BUF 功能、则 RAM 最多为256个字。 是的、您可以使用所有缓冲区(缓冲区0到缓冲区127、或者如果启用了扩展功能、则缓冲区0到缓冲区255)。 不能将长度配置为512个字。 当访问超出有效范围的缓冲区时、您将获得中止。

     2.通道表示 MibSPI 传输组。 每个传输组可以使用任何 DMA 通道进行 TX 和 RX。 例如、对于 TX、DMA 通道0;对于 RX、DMA 通道7。

      rxchannel 和 txchannel 表示 DMA TX 和 RX 请求线路。 TXDMA_MapX 和 RXDMA_MapX 为 TX 和 RX 定义了多条线路。 这些请求需要映射到数据表中定义的 DMAREQ (数据表中的 DMA 通道分配表、表6-41)。

      例如:

    dmaSetCtrlPacket (dma_ch9、g_dmaCTRLPKT_TX); -->使用 DMA 通道9进行 TX

    dmaSetCtrlPacket (DMA_CH8、g_dmaCTRLPKT_RX); -->使用 DMA 通道8进行 RX

    mibspi->DMACTRL[通道]|=(3<<20)|(2<<16); -->定义 TX 线路2和 RX 线路3

    dmaReqAssign (DMA_CH8、DMA_REQ5);-->将 DMA 通道8映射到连接到 MibSPI3 DMA 线路4的 DMA 请求5 (在表6-41中定义)

    dmaReqAssign (DMA_CH9、DMA_REQ4); -->将 DMA 通道9映射到连接到 MibSPI3 DMA 线路2的 DMA 请求4 (在表6-41中定义)

    bufid 是用于 DMA 传输的缓冲器:组启动通道+元素计数-1

    4.您不必同时启用 TX 和 RX。 RXDMA_MAP 应与 TXDMA_MapX 不同。

    5. dmaReqAssign 用于将 DMA 硬件请求(表6-41最后的 cllumn)映射到 DMA 通道。 请参阅 TRM 中的图20-4

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

    感谢王的快速回答。  

    我已附加我的主配置文件和 PB 配置文件。

    此配置工作正常、但如果我使  g_dmaCTRLPKT0.AUTOINIT = AUTOINIT_OFF、则不工作。 我将两个 DMA 通道都设置为启用 HW_触发器。 因此、根据 TRM、是否应忽略自动初始化。 如果我犯了任何错误,您能评论一下,告诉我吗?  

    2.第3点中的“群组启动通道”是什么意思?

    3.在随附的代码中,如果我注释 mibspiDmaConfigRx,它 仍然可以正常工作? 这是怎么可能的?

    e2e.ti.com/.../8304.HL_5F00_sys_5F00_main.ce2e.ti.com/.../6746.HL_5F00_mibspi_5F00_Pbcfg.c

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

    您好、Wang、

    请参阅此主文件。 忽略上一个附件。 抱歉

    e2e.ti.com/.../1411.sysMain.c

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

    我将在今天晚些时候检查您的代码。 谢谢
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    e2e.ti.com/.../4137.sysMain_2D00_FD.cHelloWang、我们能够解决所附新文件中的几个问题。

    但也有一些问题。 在为代码提供自由运行并在一段时间后暂停后、我们会看到数据不匹配。

    基本上、我们要做的是通过 MibSPi1和 MibSpi5将数据从 TMS570发送到 TDA2p、反之亦然。

    数据长度为256字节、字符长度应为8字节。 我们尝试了各种排列和组合,但有几个问题。 您是否可以提供一些配置、以便实现 TDA 到 TMS 的通信。 目前、我们将 FreeRTOS 与两个任务结合使用、一个用于 Tx、另一个用于 Rx。  

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

    我将提供一个使用 DMA 的 MibSPI1和 MibSPI3示例。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Wang、

    我是 Nikhil Prakasan、与 Akshay 一起从事同一个项目。

    我们正在尝试进行以下实验、最终目标是在 TMS570与 TDA 硬件之间建立通信。

    在 TMS570硬件上、我们需要使以下配置正常工作。
    MibSPI1 (主器件)至 MibSPI5 (从器件)。

    数据 Tx -> MibSPI1 (主器件 TX)-> MibSPI5 (从器件 RX)
    在从机 RX 上接收到数据后、将相同的数据发送回从机 Tx 到主机 RX。


    提前感谢。

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

    您使用的是哪种电路板? 我正在 launchpad 上为您准备一个 MibSPI1 + MibSPI5项目。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!

    这是一个针对 MibSPI1 --具有 DMA 的 MibSPI3的示例

    /*包含文件*/

    #include "hL_sys_common.h"

    /*用户代码开始(1)*/
    #include "HL_Gio.h"
    #include "hL_mibspi.h"
    #include "HL_SYS_DMA.h"
    #include "hL_sys_core.h"
    #include "hL_sci.h"
    #include "HL_REG_ESM.h"
    #include
    #include

    #define E_COUNT 4 /*元素计数*/
    #define F_COUNT 4 /*帧计数*/
    #define D_SIZE e_count * F_count
    #define TG0 1
    #define TG1 0

    /*用户代码结束*/

    /**@fn void main (void)
    *@应用程序主函数简介
    *@请注意、默认情况下、此函数为空。
    *
    *此函数在启动后调用。
    *用户可以使用此函数来实现应用程序。
    *

    /*用户代码开始(2)*/
    void loadDataPattern (uint32 psize、uint16* pptr、uint16 pattern);
    void mibspiddmaConfig (mibspi_t * mibspi、uint32通道、uint32 txchannel、uint32 rxchannel);

    void dmaConfigCtrlRxPacket (uint32 Sadd、uint32 dadd、uint16 ElmntCnt、uint16 FrameCnt);
    void dmaConfigCtrlTxPacket (uint32 Sadd、uint32 dadd、uint16 ElmntCnt、uint16 FrameCnt);

    /* TG 起始地址*/
    uint16 tgPSTART1[8];//对于 MibSPI1
    uint16 tgPSTART3[8];//对于 MibSPI3
    g_dmaCTRL g_dmaCTRLPKT_RX、g_dmaCTRLPKT_TX;

    #pragma SET_DATA_SECTION (".sharedRAM")
    uint16 TXDATA_TG10[D_SIZE]; 系统 RAM、MibSPI1 TG0中的/*发送缓冲器*/
    uint16 RXDATA_TG10[D_SIZE]={0};//系统 RAM、MibSPI1 TG0中的接收缓冲器*/

    uint16 TXDATA_TG11[D_SIZE]; 系统 RAM 中的/*发送缓冲器、MibSPI1 TG1 */
    uint16 RXDATA_TG11[D_SIZE]={0};//系统 RAM、MibSPI1 TG1中的接收缓冲器*

    uint16 TXDATA_TG30[D_SIZE]; 系统 RAM、MibSPI3 TG0中的/*发送缓冲器*/
    uint16 RXDATA_TG30[D_SIZE]={0};//系统 RAM、MibSPI3 TG0中的接收缓冲器*/

    #pragma SET_DATA_SECTION ()


    /*用户代码结束*/

    int main (空)

    /*用户代码开始(3)*/
    uint16 i;

    esmREG->SR1[0]= 0xFFFFFFFF;
    esmREG->SR1[1]= 0xFFFFFFFF;
    esmREG->SR1[2]= 0xFFFFFFFF;

    sciInit();
    printf ("hello\n");

    //gioInit();
    //gioSetDirection (gioPORTA、0x01);

    _enable_IRQ_interrupt_();

    /*-初始化 mibspi -启用 TG 0,长度127 (halcogen 文件)*/
    mibspiInit();

    mibspiEnableGroupNotification (mibspiREG3、0、1);
    mibspiREG1->TICKCNT =(0 << 31)|(0<28)|(0x100);

    //mibspiEnableLoopback (mibspiREG1、Digital_LBK);
    mibspiREG1->TGCTRL[0U]=(uint32)((uint32) 1U << 30U)/* OneShot *
    |(UINT32)((UINT32) 0U << 29U)/* pcurrent reset */
    |(uint32)((uint32) TRG_AYeUS<< 20U)/*触发事件*/
    |(UINT32)((UINT32) TRG_DISABLED << 16U)/*触发源*/
    |(uint32)((uint32) 0U << 8U);//开始缓冲区

    mibspiREG1->TGCTRL[1U]=(uint32)((uint32) 1U <<30U)/* OneShot *
    |(UINT32)((UINT32) 0U << 29U)/* pcurrent reset */
    |(UINT32)((UINT32) TRG_Always << 20U)/*触发事件*/
    |(UINT32)((UINT32) TRG_DISABLED << 16U)/*触发源*/
    |(uint32)((uint32) 4U << 8U);//开始缓冲区


    /*MibSPI1 TG0*/
    对于(i=0;i<3;i++)

    mibspiRAM1->TX[i].control =(uint16)((uint16) 5U << 13U)/*缓冲模式*/
    |(uint16)((uint16) 1U << 12U)/*芯片选择保持*/
    |(uint16)((uint16) 0U << 10U)//启用 WDELAY *
    |(uint16)((uint16) 0U << 11U)/*锁定传输*/
    |(uint16)((uint16) 0U << 8U)/*数据格式*/
    |((uint16)(~((uint16) 0xFFU ^(uint16) CS_0))和(uint16) 0x00FFU);/*芯片选择*

    mibspiRAM1->TX[3].control =(uint16)((uint16) 5U <<13U)/*缓冲模式*/
    |(uint16)((uint16) 0U << 12U)/*芯片选择保持*/
    |(uint16)((uint16) 0U << 10U)//启用 WDELAY *
    |(uint16)((uint16) 0U << 8U)/*数据格式*/
    |((uint16)(~((uint16) 0xFFU ^(uint16) CS_0))和(uint16) 0x00FFU);/*芯片选择*

    /*MibSPI1 TG1*/
    (i=4;i<7;i++)

    mibspiRAM1->TX[i].control =(uint16)((uint16) 5U << 13U)/*缓冲模式*/
    |(uint16)((uint16) 1U << 12U)/*芯片选择保持*/
    |(uint16)((uint16) 0U << 10U)//启用 WDELAY *
    |(uint16)((uint16) 0U << 11U)/*锁定传输*/
    |(uint16)((uint16) 0U << 8U)/*数据格式*/
    |((uint16)(~((uint16) 0xFFU ^(uint16) CS_0))和(uint16) 0x00FFU);/*芯片选择*

    mibspiRAM1->TX[7]。control =(uint16)((uint16) 5U << 13U)/*缓冲模式*/
    |(uint16)((uint16) 0U << 12U)/*芯片选择保持*/
    |(uint16)((uint16) 0U << 10U)//启用 WDELAY *
    |(uint16)((uint16) 0U << 8U)/*数据格式*/
    |((uint16)(~((uint16) 0xFFU ^(uint16) CS_0))和(uint16) 0x00FFU);/*芯片选择*



    /**-初始化传输组*/
    mibspiREG3->TGCTRL[0U]=(uint32)((uint32) 1U << 30U)/* OneShot *
    |(UINT32)((UINT32) 0U << 29U)/* pcurrent reset */
    |(UINT32)((UINT32) TRG_Always << 20U)/*触发事件*/
    |(UINT32)((UINT32) TRG_DISABLED << 16U)/*触发源*/
    |(uint32)((uint32) 0U << 8U);//开始缓冲区
    /**-初始化传输组*/
    mibspiREG3->TGCTRL[1U]=(uint32)((uint32) 1U <<30U)/* OneShot *
    |(UINT32)((UINT32) 0U << 29U)/* pcurrent reset */
    |(UINT32)((UINT32) TRG_Always << 20U)/*触发事件*/
    |(UINT32)((UINT32) TRG_DISABLED << 16U)/*触发源*/
    |(uint32)((uint32) 4U << 8U);//开始缓冲区
    //MibSPI3传输组0
    for (i=0;i<3;i++)

    mibspiRAM3->TX[i].control =(uint16)((uint16) 6U << 13U)/*缓冲模式*/
    |(uint16)((uint16) 1U << 12U)/*芯片选择保持*/
    |(uint16)((uint16) 0U << 10U)//启用 WDELAY *
    |(uint16)((uint16) 0U << 11U)/*锁定传输*/
    |(uint16)((uint16) 0U << 8U)/*数据格式*/
    |((uint16)(~((uint16) 0xFFU ^(uint16) CS_0))和(uint16) 0x00FFU);/*芯片选择*

    mibspiRAM3->TX[3].control =(uint16)((uint16) 6U <<13U)/*缓冲模式*/
    |(uint16)((uint16) 0U << 12U)/*芯片选择保持*/
    |(uint16)((uint16) 0U << 10U)//启用 WDELAY *
    |(uint16)((uint16) 0U << 8U)/*数据格式*/
    |((uint16)(~((uint16) 0xFFU ^(uint16) CS_0))和(uint16) 0x00FFU);/*芯片选择*

    /* TG 起始地址。 PSTARTx 存储相应 TG 的起始地址。 相应的*/
    /*结束地址由后续 TG 起始地址减1 (PENDx[TXG]=*/)内在定义
    /* PSTARTx[TGX+1]-1)。 在以下情况下,PSTARTx 被复制到 PCURRENTx 中:*/
    for (i=0;i<8;i++){
    tgPSTART1[i]=(mibspiREG1->TGCTRL[i]>> 8)& 0xFF;
    tgPSTART3[i]=(mibspiREG3->TGCTRL[i]>> 8)和0xFF;


    /*MibSPI1 TG0,DMA config*/
    /*-在系统 RAM 中创建数据块,以...开始 *
    /* TXDATA_TG10 ->MibSPI1 TG0 */
    loadDataPattern (D_size、&TXDATA_TG10[0]、0x5A00);

    dmaConfigCtrlTxPacket ((uint32) TXDATA_TG10、(uint32)&(mibspiRAM1->TX[tgPSTART1[0]).data)、E_COUNT、F_COUNT);
    dmaConfigCtrlRxPacket ((uint32)&(mibspiRAM1->rx[tgPSTART1[0]).data)、(uint32) RXDATA_TG10、E_COUNT、F_COUNT);
    //将 DAM_CH0用于 RX、将 DMA_CH1用于 TX
    /*-设置 DMA 控制数据包*/
    dmaSetCtrlPacket (dma_CH1、g_dmaCTRLPKT_TX);//TX
    dmaSetCtrlPacket (dma_CH0、g_dmaCTRLPKT_RX);//rx

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

    dmaReqAssign (DMA_CH1、DMA_REQ1);//DMA 请求线路1、TX
    dmaReqAssign (DMA_CH0、DMA_REQ0);//DMA 请求线路0、RX

    /*-配置 mibspi DMA、通道0、TX 线路-0、rxline -1 *
    /*-请参阅器件数据表 mibspi TX/Rx 的 DMA 请求源*/
    mibspiDmaConfig (mibspiREG1、0、1);//RX_DMA_Line=1、TX_DMA_Line=0

    /*NOBRKx */
    //mibspiREG1->DMACTRL[0]|=(1 << 13);

    /*传输完成后为接收启用块传输完成中断*/
    dmaEnableInterrupt (DMA_CH0、BTC、DMA_INTA);

    #if 0
    /* MibSPI TG1、DMA*/
    //将 DAM_CH6用于 RX、将 DMA_CH8用于 TX
    /*-在系统 RAM 中创建数据块,以...开始 *
    loadDataPattern (D_size、&TXDATA_TG11[0]、0x6B00);

    dmaConfigCtrlTxPacket ((uint32) TXDATA_TG11、(uint32)&(mibspiRAM1->TX[tgPSTART1[1].data)、E_COUNT、F_COUNT);
    dmaConfigCtrlRxPacket ((uint32)&(mibspiRAM1->rx[tgPSTART1[1]]].data)、(uint32) RXDATA_TG11、E_COUNT、F_COUNT);
    /*-设置 DMA 控制数据包*/
    dmaSetCtrlPacket (DMA_CH7、g_dmaCTRLPKT_TX);//TX
    dmaSetCtrlPacket (dma_CH4、g_dmaCTRLPKT_RX);//rx

    /*-将 DMA 通道设置为在硬件请求时触发*/
    dmaSetChEnable (DMA_CH7、DMA_HW);
    dmaSetChEnable (DMA_CH4、DMA_HW);

    dmaReqAssign (DMA_CH7、DMA_REQ16);//DMA 请求行16 -- TX (最后一个列、表6-41)
    dmaReqAssign (DMA_CH4、DMA_REQ22);//DMA 请求行22 -- RX (最后一个列、表6-41)

    /*-配置 Mibspi DMA、通道2、MibSPI TX 线路-8、MibSPI RX 线路-10 *
    /* MibSPI TX 线和 MibSPI RX 线位于 MibSPI1之后的圆括号内*/
    mibspiDmaConfig (mibspiREG1,1,1,8,10);

    /*传输完成后为接收启用块传输完成中断*/
    dmaEnableInterrupt (DMA_CH4、BTC、DMA_INTA);
    #endif

    /* MibSPI3、从器件、TG0、DMA*/
    //将 DAM_CH6用于 RX、将 DMA_CH8用于 TX
    /*-在系统 RAM 中创建数据块,以...开始 *
    /* TXDATA_TG30 --> MibSPI3,TG0*/
    loadDataPattern (D_size、&TXDATA_TG30[0]、0x6C00);

    // dmaConfigCtrlTxPacket ((uint32) TXDATA_TG30、(uint32)&(mibspiRAM3->TX[tgPSTART[0]).data)、E_COUNT、F_COUNT);
    //TG0
    dmaConfigCtrlRxPacket ((uint32)&(mibspiRAM3->rx[tgPSTART3[0]].data)、(uint32) RXDATA_TG30、E_COUNT、F_COUNT);
    /*-设置 DMA 控制数据包*/
    // dmaSetCtrlPacket (dma_CH9、g_dmaCTRLPKT_TX);// TX
    dmaSetCtrlPacket (dma_CH8、g_dmaCTRLPKT_RX);//rx

    /*-将 DMA 通道设置为在硬件请求时触发*/
    // dmaSetChEnable (DMA_CH9、DMA_HW);
    dmaSetChEnable (DMA_CH8、DMA_HW);

    // dmaReqAssign (DMA_CH9、DMA_REQ4);//DMA 请求行4 - TX (最后一个列、表6-41)
    dmaReqAssign (DMA_CH8、DMA_REQ5);//DMA 请求行5 -- RX (最后一个列、表6-41)

    /*-配置 Mibspi DMA、通道2、MibSPI TX 线路-2、MibSPI RX 线路-3 */
    /* MibSPI TX 线和 MibSPI RX 线位于 MibSPI1之后的圆括号内*/
    /* MibSPI3传输组0*/
    mibspiDmaConfig (mibspiREG3、0、2、3);

    /*传输完成后为接收启用块传输完成中断*/
    dmaEnableInterrupt (DMA_CH8、BTC、DMA_INTA);

    dmaEnable();

    /*-启动 mibspi 传输 TG 0 */
    mibspiTransfer (mibspiREG3、0);
    mibspiTransfer (mibspiREG1、0);

    /*用户代码结束*/

    返回0;



    /*用户代码开始(4)*/
    /**使用配置 mibspi DMA
    *
    * CHANNEL > mibspi DMA CHANNEL NUMBER
    * txchannel >专用于 mibspi 的传输通道
    * rxchannel >专用于 mibspi 的接收通道
    *
    void mibspiDmaConfig (mibspi_t * mibspi、uint32通道、uint32 txchannel、uint32 rxchannel)

    uint32 bufid;
    //uint32 bufid =(通道+ 1)* E_COUNT - 1;

    if (mibspi =mibspiREG1){
    bufid = tgPSTART1[通道]+ E_COUNT - 1;
    }否则{
    bufid = tgPSTART3[通道]+ E_COUNT - 1;



    /*设置发送和接收通道*/
    mibspi->DMACTRL[通道]|=(rxchannel << 20)|(txchannel << 16);

    如果(F_COUNT > 1){
    mibspi->TGCTRL[通道]&= 0xBFFFFFFF;//禁用 OneShot
    }否则{
    mibspi->TGCTRL[通道]|= 0x40000000;//启用 OneShot


    /*启用发送和接收 DMA */
    mibspi->DMACTRL[通道]|= 0x8000C000;

    /*设置 DMA 传输的初始计数和用于 DMA 传输的缓冲区*/
    mibspi->DMACTRL[通道]|=(bufid=24);

    /*启用大计数传输*/
    mibspi->DMACNTLEN = 0x1;
    mibspi->DMACOUNT[通道]=(F_COUNT - 1)<< 16;





    void loadDataPattern (uint32 psize、uint16* pptr、uint16模式)

    int i;
    for (i=0;<psize;i++))

    *(pptr++)=图形+ I;




    void dmaConfigCtrlTxPacket (uint32 Sadd、uint32 dadd、uint16 ElmntCnt、uint16 FrameCnt)

    G_dmaCTRLPKT_TX.Sadd =添加; /*源地址 *
    G_dmaCTRLPKT_TX.DADD = dadd; /*目标地址 *
    G_dmaCTRLPKT_TX.CHCTTRL = 0; /*通道控制 *
    G_dmaCTRLPKT_TX.FRCNT =帧 cnt; /*帧计数 *
    G_dmaCTRLPKT_TX.ELCNT = ElmntCnt; /*元素计数 *
    G_dmaCTRLPKT_TX.ELDOFFSET = 4; /*元素目标偏移量*/
    G_dmaCTRLPKT_TX.ELSOFFSET = 0; /*元素目标偏移量*/
    G_dmaCTRLPKT_TX.FRDOFFSET = 0; /*帧目的偏移量*/
    G_dmaCTRLPKT_TX.FRSOFFSET = 0; /*帧目的偏移量*/
    G_dmaCTRLPKPT_TX.PORTASGN = PORTA_READ_PORTB_WRITE; /*端口 b *
    G_dmaCTRLPKT_TX.RDSIZE = ACCESS_16_BIT; /*读取大小 *
    G_dmaCTRLPKT_TX.WRSIZE = ACCESS_16_BIT; /*写入大小 *
    G_dmaCTRLPKT_TX.tType = frame_transfer;/*传输类型 *
    G_dmaCTRLPKT_TX.ADDMODERD = ADDR_INC1; 读取/*地址模式 *
    G_dmaCTRLPKPT_TX.ADDMODEWR = ADDR_OFFSET; /*地址模式写入 *
    G_dmaCTRLPKT_TX.AUTOINIT = AUTOINIT_OFF; /*自动初始化 *

    //返回 g_dmaCTRLPKT_TX;



    void dmaConfigCtrlRxPacket (uint32 Sadd、uint32 dadd、uint16 ElmntCnt、uint16 FrameCnt)

    G_dmaCTRLPKT_RX.Sadd =添加; /*源地址 *
    G_dmaCTRLPKT_RX.DADD = dadd; /*目标地址 *
    G_dmaCTRLPKT_RX.CHCTRL = 0; /*通道控制 *
    G_dmaCTRLPKT_RX.FRCNT =帧 cnt; /*帧计数 *
    G_dmaCTRLPKT_RX.ELCNT = ElmntCnt; /*元素计数 *
    G_dmaCTRLPKT_RX.ELDOFFSET = 0; /*元素目标偏移量*/
    G_dmaCTRLPKT_RX.ELSOFFSET = 4; /*元素源偏移*/
    G_dmaCTRLPKT_RX.FRDOFFSET = 0; /*帧目的偏移量*/
    G_dmaCTRLPKT_RX.FRSOFFSET = 0; /*帧目的偏移量*/
    G_dmaCTRLPKPT_RX.PORTASGN = PORTB_READ_PORTA_WRITE;//端口 b *
    G_dmaCTRLPKT_RX.RDSIZE = ACCESS_16_BIT; /*读取大小 *
    G_dmaCTRLPKT_RX.WRSIZE = ACCESS_16_BIT; /*写入大小 *
    G_dmaCTRLPKT_RX.tType = frame_transfer;/*传输类型 *
    G_dmaCTRLPKT_RX.ADDMODERD = ADDR_OFFSET; 读取/*地址模式 *
    G_dmaCTRLPKT_RX.ADDMODEWR = ADDR_INC1; /*地址模式写入 *
    G_dmaCTRLPKT_RX.AUTOINIT = AUTOINIT_OFF; /*自动初始化 *

    //返回 g_dmaCTRLPKT_RX;



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

    您好、Wang、

    非常感谢您的配置。 它对我们很有用。 我有一个问题,为什么需要为 MIBSPI1配置传输组1? 没有它们、它就不起作用  

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

    如果仅使用 TX 组0、则不必配置 TX 组1。 在我的示例中、我测试了组0和组1。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Wang、
    我尝试将字符长度更改为8位。 但丢失了一些数据。 在这种情况下,DMA 需要进行哪些配置更改? 我将从器件 SPI DMA 的 RDSIZE 更改为8、但不起作用

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Wang、
    这是目前的一个主要阻止程序。 请尽快回复更改。 我们非常感谢您至今提供的支持。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Akshay、

    您需要更改数据格式寄存器中的字符长度。 默认为16位。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Wang、
    我们尝试更改 hl_mibspi_pbcfg.c 中的特性、但它对我们无效。 我们在使 char len 8后得到了所有零。 请检查一下吗?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Akshay、

    您需要在数据格式寄存器中更改字符长度、并在 DMA 数据包配置中更改传输读/写大小。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Wang、  

    我们成功地在 TMS 上执行到 TMS 的回送。  但我们 还有一些问题。

    在我们的软件中、F_COUNT 为64、E_COUNT 为4。 但是、如果我交换这两个值、传输会在一段时间后失败。 这背后的原因是什么?  

    我们还尝试使用两个 FreeRTOS 任务。 一个用于 Tx、一个用于 Rx。 为了使通信正常工作、我在传输前添加了5ms 延迟。 我们不明白什么可能需要这种延迟? 你能提供帮助吗?

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

    在我给出的示例中、bufid 等于 E_count+1。 如果交换 F_COUNT 和 E_COUNT、则 bufid 为64+1=65。 转接组有多大? 如果小于65、则可能会出现错误。

    延迟可能是由操作系统引起的。 没有 RTOS 时是否需要延迟?