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.

[参考译文] CC2642R:SPI 时钟我已配置为1MHz、但它不生成正确的时钟 SPI 超越了为什么变慢?

Guru**** 2589275 points


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

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/1385560/cc2642r-spi-clock-i-have-configured-as-1mhz-but-its-not-generating-the-proper-clock-spi-transctions-getting-slower-why

器件型号:CC2642R

工具与软件:

尊敬的团队:

我已经在 Code Composer 中配置了 SPI 驱动器并设置了1MHz 时钟、但 SPI 事务比预期慢。 每当我在主while循环中调用1MHz 写入函数时、我都无法实现 SPI 时钟。

以下是用于设置 SPI 参数的代码:

void SPI_param_setting (void)

SPI_PARAMS_INIT (&spiParams);
spiParams.frameFormat = SPI_POL0_PHA1;
spiParams.bitrate = 1000000;
spiParams.mode = SPI_MASTER;
spiParams.transferMode = SPI_MODE_CALLBACK;
spiParams.transferCallbackFxn = spicallbackfx;

open_spi();

}


while (1){
//睡眠(时间);
// Send_data ();

GPIO_WRITE (CONFIG_GPIO_CS、1);/CS 高电平
//GPIO_WRITE (CONFIG_GPIO_LED_0、1);
//data[0]= 0x01;
//data[1]= 0x3F;
SPI_WRITE_HW (1、DATA);
// usleepe(1);
GPIO_WRITE (CONFIG_GPIO_CS、0);// CS LOW
// usleepe(1);
//GPIO_WRITE (CONFIG_GPIO_LED_0、0);
//GPIO_WRITE (CONFIG_GPIO_CS、1);

}

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

    您好、Triveni:  

    您使用的是哪个版本的 SDK、以及您是否要从 SDK 中的现有示例构建此工程? 您能否提供任何显示较慢 SPI 事务的逻辑分析仪示波器示波器屏幕截图或捕获结果?

    如何调用该函数?

    此致、  

    David  

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

    David、您好!

    我将使用 SDK 5_20_00_52、我配置了 CONFIG_SPI_0、设置 4000000、并在 main 中调用了函数、如下所示。

    问题是、我想了解为什么 SPI 写入需要40到50微秒以及 usleeps 不准确。

    请查看随附的屏幕截图和示波器图片。

    void SPI_param_setting (void)

    SPI_PARAMS_INIT (&spiParams);
    spiParams.frameFormat = SPI_POL0_PHA1;
    spiParams.bitrate = 4000000;
    spiParams.mode = SPI_MASTER;
    spiParams.transferMode = SPI_MODE_CALLBACK;
    spiParams.transferCallbackFxn = spicallbackfx;

    open_spi();

    }


    void * mainThread (void * arg0)

    /*调用驱动程序初始化函数*/
    GPIO_init ();
    spi_init();
    spi_param_setting();
    watchdog_init();
    Usleep(10);
    wd_param_setting();
    /*配置 LED 引脚*/
    GPIO_setConfig (CONFIG_GPIO_LED_0、GPIO_CFG_OUT_STD | GPIO_CFG_OUT_LOW);
    /*打开用户 LED */
    // GPIO_WRITE (CONFIG_GPIO_LED_0、CONFIG_GPIO_LED_ON);

    while (1){
    DATA[0]= 0x03;
    DATA[1]= 0x3C;
    DATA[2]= 0x02;
    DATA[3]= 0x3F;
    GPIO_WRITE (CONFIG_GPIO_CS、1);/CS 高电平
    SPI_WRITE_HW (1、DATA);
    GPIO_WRITE (CONFIG_GPIO_CS、0);// CS LOW
    Usleep(10);
    GPIO_WRITE (CONFIG_GPIO_CS、1);
    Usleep(10);
    WATCHDOG_CLEAR (watchdogHandle);

    }
    }

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

    您好、 Triveni:  

    您能否告诉我行110和112之间的时序差异(这只是为了确认用户睡眠是否正常工作)? 更准确的睡眠是使用 ClockP_usleep()。  

    您还能提供 SPI_WRITE_HW()函数的屏幕截图吗? 您能否确认分析器上的时钟是4 MHz?

    此致、  

    David

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

    大家好、DevID、我将 SPI 传输模式从 SPI_MODE_CALLBACK 更改为 SPI_MODE_BLOCKING 数据转置器立即发生。

    但仍然得到1微秒的延迟、我不理解此延迟是从哪里造成的。

    void * mainThread (void * arg0)

     

       /*调用驱动程序初始化函数*/
       GPIO_init ();
       spi_init();
       spi_param_setting();
       watchdog_init();
       Usleep(5);
       wd_param_setting();
       /*配置 LED 引脚*/
       GPIO_setConfig (CONFIG_GPIO_LED_0、GPIO_CFG_OUT_STD | GPIO_CFG_OUT_LOW);
       /*打开用户 LED */
       // GPIO_WRITE (CONFIG_GPIO_LED_0、CONFIG_GPIO_LED_ON);

     

       while (1){
           DATA[0]= 0x07;
           DATA[1]= 0x3C;
           DATA[2]= 0x02;
           DATA[3]= 0x3F;
           DATA[4]= 0x07;
           DATA[5]= 0x3C;
           DATA[6]= 0x02;
           DATA[7]= 0x3F;
           GPIO_WRITE (CONFIG_GPIO_CS、1);                                      /CS 高电平
           SPI_WRITE_HW (8、data);
           GPIO_WRITE (CONFIG_GPIO_CS、0);                                      // CS LOW
          // usleep(10);
           GPIO_WRITE (CONFIG_GPIO_CS、1);
          // usleep(10);
           WATCHDOG_CLEAR (watchdogHandle);

     

       }
    }
     

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

    您好、 Triveni:  

    您能否解释一下1微秒延迟的含义、即在 SPI 写入执行操作之前发生的延迟吗? 您如何根据 GPIO 切换或其他东西测量该延迟?

    您是否已查看 SDK 中提供的 SPIMaster 示例以了解 SPI 传输函数是否也存在此示例?  

    您要从 SPI 驱动器中寻找的预期计时是什么?

    此致、  

    David