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.

[参考译文] TMS320F28375D:SPI 主控或受控模式的 McBSP 配置

Guru**** 2445440 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/753705/tms320f28375d-mcbsp-configuration-for-spi-master-or-slave-mode

器件型号:TMS320F28375D

你好!!

我在"SPI"模式之间寻求通信以了解:SPI_PROT_POL0PHA0、SPI_PROT_POL0PHA1、SPI_PROT_POL1PHA0、SPI_PROT_POL1PHA1。

但在10MHz 频率下,BeagleBone 与我的 DSP 之间的功能通信是:

SPI 模式 CLKSTP CLKXP CLKRP
SPI_PROT_POL0PHA0 0 3. 0 1
SPI_PROT_POL0PHA1 1 2. 0 0
SPI_PROT_POL1PHA0 2. 3. 1 1
SPI_PROT_POL1PHA1 3. 2. 1 0
SPI_PROT_POL1PHA1 3. 3. 1 1

您能给我一个小问题吗?
另一个问题是,“MDRB”可能会变成 MISO (数据输出),
在从模式下、"MDxB"变为 MOSI (数据输入)?

此致!
C é dric

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

    您好、C é dric、

    感谢您在 E2E 论坛上发布您的问题! 我们将解决您的问题、希望将来此帖子能够帮助其他人解决类似问题。

    首先、我想向您指出以下文档中的第21.7节:

    本节介绍如何在 SPI 模式下使用 McBSP 模块。 21.7.7节专门讨论了将模块设置为 SPI 从器件的问题。 下图显示了作为 SPI 从器件运行时的 McBSP 引脚分配。

      

    因此、您对 MDR 和 MDX 的满意是正确的!  

    继续操作、浏览本部分。 关键是设置配置参数、使其与 SPI 主设备(BeagleBone)设置完全匹配。 如果您确认配置正确、下一步将是检查所有时钟配置是否也正确设置(请参阅上文链接的 TRM 文档中的时钟停止模式)。 查看这些信息、并告诉我您的问题是否仍然存在。 如果是、请使用 Code Insert 函数发布配置代码、我们可以查看并查看发生了什么情况。  

    尊敬的、

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    重新阅读 MDR 和 MDX 上的问题后、我意识到我回答了错误的问题。 遗憾的是、您将无法切换这两个 I/O 的功能、因为它们是为 McBSP 模块在内部设置的。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、C é dric、 

    请分别参阅 McBSP.h 和 McBSP.c 中的以下定义:



    // // //! 将 McBSP 配置为 SPI 受控模式 //! //! \param base 是 McBSP 模块的基地址。 //! \param ptrSPISlaveMode 是指向包含 SPI //! 参数 McBSP_SPISlaveModeParams。 //! 此函数用于将 McBSP 模块设置为 SPI 从模式。以下为 //! McBSP_SPISlaveModeParams 参数的有效值和范围。 //! -\b loopbackModeFlag - true 表示数字回路 //! 对于无环回 //! -\b 时钟停止模式- McBSP_clock_SPI_MODE_NO_DELAY 或 //! McBSP_clock_SPI_MODE_DELAY //! -\b 文字长度 - McBSP_bits_per_word_x,x = 8、12、16、20、24、32 //! -\b spiMode 它表示时钟极性、可以采用 //! 值: //! - McBSP_RX_POLICLE_FALLING_EDGE 或 //! McBSP_RX_POLARY_RISTING_EDGE //! //! \无返回。 //// *****************



    //
    //
    // McBSP_configureSPISlaveMode
    //
    *********
    void
    McBSP_configureSPISlaveMode (uint32_t base、
    const McBSP_SPISlaveModeParams* ptrSPISlaveMode)
    {
    
    //
    //配置时钟停止模式。
    //
    if ((((ptrSPISlaveMode->clockStopMode)=McBSP_clock_SPI_mode_no_delay)||
    (((ptrSPISlaveMode->clockStopMode)== McBSP_clock_SPI_mode_delay))
    {
    //
    //设置 SPI 模式。
    //
    McBSP_setClockStopMode (base、
    (McBSP_ClockStopMode) ptrSPISlaveMode->clockStopMode);
    //
    //设置环回模式。
    //
    if (ptrSPISlaveMode->loopbackModeFlag)
    {
    McBSP_enableLoopback (base);
    }
    其他
    {
    McBSP_disableLoopback (base);
    }
    
    //
    //将模块配置为从机。 MCLKX 引脚用作输入从器件
    //时钟、由 SPI 主器件从外部驱动。
    //
    McBSP_setTxClockSource (base、McBSP_external_TX_clock_source);
    
    //
    //设置输入从机时钟极性。
    //
    McBSP_setTxClockPolarity (基本、
    (McBSP_TxClockPolarity) ptrSPISlaveMode->spiMode);
    
    //
    //将内部时钟(LSPCLK)设置为 SRG 时钟源。 SRG 用于
    //将 McBSP 逻辑与外部生成的主时钟同步。
    //
    McBSP_setRxSRGClockSource (base、McBSP_SRG_RX_CLOCK _SOURC_LSPCLK);
    
    //
    //为生成 CLKG 分配一个1的时钟分频器值。
    //
    McBSP_setSRGDataClockDivider (基本、1U);
    
    //
    //将 FSX 设置为由从器件使能信号驱动的输入
    //来自 SPI 主设备。
    //
    McBSP_setTxFrameSyncSource (base、McBSP_TX_EXTERNAL_FRAME_SYNC_SOURCE);
    
    //
    //将 FSX 引脚的极性设置为低电平有效。
    //
    McBSP_setTxFrameSyncPolarity (基本、
    McBSP_TX_FRAME_SYNC_POLARY_LOW);
    
    //
    //禁用双相模式。
    //
    McBSP_disableTwoPhaseTx (基本);
    
    //
    //设置传输和接收的数据格式。
    //
    McBSP_setTxDataSize (base、McBSP_PHASE_ONE 帧、
    (McBSP_DataBitsPerWord) ptrSPISlaveMode->wordLength、0U);
    McBSP_setRxDataSize (base、McBSP_PHASE_ONE 帧、
    (McBSP_DataBitsPerWord) ptrSPISlaveMode->wordLength、0U);
    
    //
    //为发送和接收设置零位数据延迟。
    //
    McBSP_setTxDataDelayBits (base、McBSP_DATA_DELAY_BIT_0);
    McBSP_setRxDataDelayBits (base、McBSP_DATA_DELAY_BIT_0);
    }
    } 

    您提到的值(SPI_PROT_POLxPHAx)只能由器件中的 SPI 模块使用、而不是 McBSP 模块使用。 您可以使用上述配置使 McBSP 模块匹配。 下面您可以在 C2000 driverlib 的 spi.h 文件中找到 SPI_PROT_POLxPHAx 不同值的说明。

    //
    //
    //! 可作为\e 协议参数传递给 SPI_setConfig()的值。
    ////
    *****************
    typedef 枚举
    {
    //! 模式0。 极性0、相位0。 无延迟的上升沿。
    SPI_PROT_POL0PHA0 = 0x0000U、
    //! 模式1。 极性0、相位1。 具有延迟的上升沿。
    SPI_PROT_POL0PHA1 = 0x0002U、
    //! 模式2。 极性1、相位0。 下降沿。
    SPI_PROT_POL1PHA0 = 0x0001U、
    //! 模式3。 极性1、相位1。 具有延迟的下降沿。
    SPI_PROT_POL1PHA1 = 0x0003U
    }SPI_TransferProtocol; 

    尊敬的、