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.

[参考译文] TMS320F2800157:SPI 最小频率

Guru**** 2574655 points
Other Parts Discussed in Thread: LMX2582, SYSCONFIG, C2000WARE

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1572143/tms320f2800157-spi-minimum-frequency

器件型号:TMS320F2800157
主题中讨论的其他器件:LMX2582SysConfigC2000WARE

工具/软件:

您好:

我正在努力建立 SPI 通信 之间的差异 TI F2800157 MCU LMX2582 PLL IC 。 LMX2582 EVM 使用的 SPI 时钟 125kHz 、我正在尝试使用在 F2800157 上配置相同的比特率 其中概述了 SysConfig 指定 Code Composer Studio

但是、我无法将 SPI 时钟完全设置为 125kHz 在 SysConfig 中、似乎需要舍入或限制为某些值。

请帮助我了解以下内容:

  • 什么是 最低 SPI 时钟频率 支持的 F2800157

  • 有没有办法 手动配置 SPI 比特率(例如通过寄存器设置)来实现 125kHz?

  • 有任何问题 限制或依赖项 (如 LSPCLK 频率或分频器值)会影响可实现的 SPI 频率?

有关如何实现或近似计算的任何指导 125kHz 希望进行 SPI 通信。

谢谢!

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

    尊敬的 Muhammed:

    什么是 最低 SPI 时钟频率 支持的 F2800157 ?

    TRM(SPIBRR 寄存器)中提到了此问题、您提供的屏幕截图中也提到了错误。

    [quote userid=“671937" url="“ url="~“~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1572143/tms320f2800157-spi-minimum-frequency 手动配置 SPI 比特率(例如通过寄存器设置)可以实现 125kHz?

    除了修改这些 SPI 设置之外、您还可以使用 SysConfig ClockTree 工具 修改 LSPCLK 来实现此设置。  

    [quote userid=“671937" url="“ url="~“~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1572143/tms320f2800157-spi-minimum-frequency 限制或依赖项 (与 LSPCLK 频率或分频器值类似)会影响可实现的 SPI 频率?

    为此、请参阅详细的 TRM 和数据表。  

    此致、

    Aishwarya

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

    尊敬的 Aishwarya:

    根据您的建议、我更改了 LSPCLK 基准时钟频率 时钟树工具 、现在我可以将 SPI 比特率设置为 125kHz

    但是、我仍然面临一个问题、在尝试与通信时没有 SPI 输出 LMX2582 PLL IC

    • 作为参考、我使用测试了相同的 SPI 配置 SAME54 MCU 在这种情况下,我能够观察到正确的输出波形。

    我已附上(或在下面提供) 代码片段 SPI 配置 我目前使用的是。 您能否查看并帮助验证配置是否缺失或不正确?

    void main(void)
    {
        //
        // Initializes system control, device clock, and peripherals
        //
        Device_init();
    
        //
        // Initializes PIE and clear PIE registers. Disables CPU interrupts.
        // and clear all CPU interrupt flags.
        //
        Interrupt_initModule();
    
        //
        // Initialize the PIE vector table with pointers to the shell interrupt
        // Service Routines (ISR).
        //
        Interrupt_initVectorTable();
    
        //
        // Board Initialization
        //
        Board_init();
    
        //
        // Enables CPU interrupts
        //
        Interrupt_enableGlobal();
    
        //Enbale Oscillator
        GPIO_writePin(oscEnablePin, 1);
    
        //Enable PLL DCDC
        GPIO_writePin(pllDCDCEnablePin, 1);
    
        //Enable LDO
        GPIO_writePin(ldoEnablePin, 1);
    
        //Enable PLL IC
        GPIO_writePin(pllEnablePin, 1);
    
        GPIO_writePin(lmxCSPin, 1);
    
        DEVICE_DELAY_US(2000000);
    
        //
        // Loop.
        //
    
        for(;;)
        {
            if(writeOnce) {
    
                writeOnce = false;
                lmx2582Softreset();
                DEVICE_DELAY_US(100000);
    
                sendLMX2582Registers();
            }
            
    
            GPIO_togglePin(myGPIOOutput0);
            DEVICE_DELAY_US(1000000);
        }
    }
    
    void sendLMX2582Registers()
    {
        int i,j;
        for (i = 0; i < NUM_LMX2582_REGS; i++)
        {
            uint32_t regVal = lmx2582_reg_values[i];
            uint8_t data[3];
            data[0] = (regVal >> 16) & 0xFF;
            data[1] = (regVal >> 8) & 0xFF;
            data[2] = regVal & 0xFF;
    
            GPIO_writePin(lmxCSPin, 0);
            SPI_transmitNBytes(SPIA_BASE,data,3,2);
    
            while (SPI_isBusy(SPIA_BASE));
            
            // for (j = 0; j < 3; j++)
            // {
            //     // SPI_writeDataBlockingNonFIFO(SPIA_BASE, data[j]);
            //     // SPI_transmitByte(SPIA_BASE, data[j]);
            //     SPI_writeDataBlockingFIFO(SPIA_BASE, data[j]);
    
            // }
            //  DEVICE_DELAY_US(1);
            
             GPIO_writePin(lmxCSPin, 1);
    
        }
        
       
    }
    
    
    void lmx2582Softreset()
    {
        const uint32_t reset_cmd = 0x00221E;
        uint8_t data[3];
            data[0] = (reset_cmd >> 16) & 0xFF;
            data[1] = (reset_cmd >> 8) & 0xFF;
            data[2] = reset_cmd & 0xFF;
    
        int j;
        GPIO_writePin(lmxCSPin, 0);
    
        SPI_transmitNBytes(SPIA_BASE,data,3,2);
        // while (SPI_getTxBufferStatus(SPIA_BASE) != SPI_TX_BUFFER_EMPTY);
        while (SPI_isBusy(SPIA_BASE));
    
            // for (j = 0; j < 3; j++)
            // {
            //     // SPI_writeDataBlockingNonFIFO(SPIA_BASE, data[j]);
            //     // SPI_transmitByte(SPIA_BASE, data[j]);
            //     SPI_writeDataBlockingFIFO(SPIA_BASE, data[j]);
            // }
            
        // DEVICE_DELAY_US(1);
        GPIO_writePin(lmxCSPin, 1);
    }

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

    Muhammed,

    总体来说、配置看起来不错、但由于这是两个不同的 MCU、因此它是否首先发送 LSB/MSB、POL/PHA、事务格式等可能存在差异 我建议您了解差异并相应地配置 SPI。 C2000WARE 中还有几个示例可供您参考。  

    此致、

    Aishwarya