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.

[参考译文] TMS570LS3137:MibSpi DMA 时钟和 MOSI 线路

Guru**** 2535150 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/1132606/tms570ls3137-mibspi-dma-clock-and-mosi-line

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

大家好、我尝试通过将电路板的 SIMO[0] MIBSPI1线路与 SOMI[0] MIBSPI1端口相连来在 MIBSPI1上实现数据交换。
在 Halcogen 中、我选择了以下设置:

我想传输10帧、每个帧包含61个元素。

这是执行的 DMA 和 MIBSPI 配置:  

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 =帧计数;/*帧计数*
G_dmaCTRLPKT_TX.ELCNT = ElmntCnt;/*元素计数*
G_dmaCTRLPKPT_TX.ELDOFFSET = 4;/*元素目标偏移量*
G_dmaCTRLPKPT_TX.ELSOFFSET = 0;/*元素源偏移*
G_dmaCTRLPKPT_TX.FRDOFFSET = 0;/*帧目标偏移*
G_dmaCTRLPKPT_TX.FRSOFFSET = 0;/*帧目标偏移*
G_dmaCTRLPKT_TX.PORTASGN = 4;/*端口 b *
G_dmaCTRLPKT_TX.RDSIZE = ACCESS_16_BIT;/*读取大小*
G_dmaCTRLPKT_TX.WRSIZE = ACCESS_16_BIT;/*写入大小*
G_dmaCTRLPKT_TX.tType = FRAME_TRANSFSION;/*传输类型*/
G_dmaCTRPKT_TX.ADDMODERD = ADDR_INC1;/*地址模式读取*
G_dmaCTRLPKPT_TX.ADDMODEWR = ADDR_OFFSET;/*地址模式写入*
G_dmaCTRPKT_TX.AUTOINIT = AUTOINIT_ON;/*自动初始化*

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

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

void mibspiDmaConfig (mibspi_t * mibspi、uint32通道、uint32 txchannel、uint32 rxchannel)

uint32 bufid = E_COUNT - 1;// TG0中的缓冲区数量

/*设置发送和接收通道*/
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);

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

//////*设置 DMA 传输的初始计数和用于 DMA 传输的缓冲区*/
// mibspi->DMACTRL[通道]|=(0<<31);
//
// mibspi->DMACNTLEN = 0x1;
// mibspi->DMACOUNT[通道]=(F_COUNT - 1)<< 16;

如果我正确启动程序、传输发生、但使用示波器、我看到时钟和 MOSI 线路继续发送数据、尽管由于我接收到块传输完成中断、传输应该结束。 这种行为是否正常、或者配置或实现是否有问题?


随附完整的 sys_main.c、用于进一步分析。

e2e.ti.com/.../4846.sys_5F00_main.c


提前感谢您的帮助。

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

    您好!

    我想知道您在将完整数据接收到接收缓冲区(mibSPI1_RX_Data)后需要验证的一点吗? 我是说在您的示例中,我们将发送610个半字(61*10),您是否在收到610字节的全部数据后使用示波器进行了验证?

    --

    谢谢、

    Jagadish。

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

    您好 Jagadish、
    我不太理解您的问题。

    从首次发送到 MOSI 线路上的示波器开始、我一直看到数据无限发送。
    在接收缓冲区中、我可以看到发送缓冲区中存在的值与我预期的相同。

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

    您好!

    我找到了问题的根本原因、这是您配置的缓冲模式造成的  

    由于我们在代码中禁用一次性传输(当帧计数大于1时禁用)、因此传输组触发器将始终存在、并且我们将缓冲模式配置为"连续模式"、因此行为如下

    序列发生器将在检查传输组缓冲区时传输数据、因此将缓冲区模式配置为3、即"跳过单个传输覆盖保护模式"、以便数据仅在 TX_FULL 标志置1时传输、即来自 DMA 的新数据、并且仅在 RX_EMPTY 标志清零时接收。

    因此、请使用上述模式并告诉我结果。 我在最后进行了测试、对我来说很好。

    --

    谢谢、

    Jagadish。

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

    您好 Jagartish、
    您提出的解决方案似乎效果良好! 谢谢!


    现在、我想用两个不同的板来实现主从通信、一个板充当主板、一个板充当从板、并通过 MIBSPI1进行通信。


    在主器件侧、我将保留我向您展示的相同设置。


     在从器件侧、我需要(HALCOGEN):
    - MIBSPI1全局:禁用主控模式和内部时钟。
    - MIBSPI1数据格式:从主器件保持所有内容不变?
    - MIBSPI1延迟:从主器件保持所有内容不变?
    - MIBSPI1传输组:从主器件保持所有内容不变?
    - MIBSPI1端口:为 SOMI 启用输出方向、为 SIMO 和时钟禁用它。


    这些假设是否正确?
    此外、从器件端代码如何与主器件发生变化?


    很抱歉、有这么多问题、但这个话题对我来说有点困难。
    谢谢你。

    古列尔莫

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

    您好、Guglielmo、

    这些假设是否正确?

    是的、您的假设是正确的。

    您还可以参考以下主题以供参考

    (+) RM46L852:具有 DMA 的 SPI 从器件-基于 Arm 的微控制器论坛-基于 Arm 的微控制器- TI E2E 支持论坛

    --

    谢谢、

    Jagadish。