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.

[参考译文] TM4C129ENCPDT:SPI 传输、具有2ms 未知延迟

Guru**** 2611705 points


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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/765063/tm4c129encpdt-spi-transmitting-with-2msec-unknown-delay

器件型号:TM4C129ENCPDT

您好!

我已配置 SPI0、并且能够发送数据。 我环回了 MOSI 和 MISO 引脚、因此在 MISO 上读回相同的数据、也称为 SSI0XDARX。

但是、当我示波 MOSI 引脚时、我看到两次传输之间始终存在大约2ms 的一致延迟。 这个延迟非常大、因为我需要从 ADC 芯片 AD7609以最低50kHz 的频率从其全部8个输入收集数据。

我的代码工作正常、没有任何错误或警告、我附加了代码以及范围快照。 实际问题显示在最后一个快照中。

SPI0初始化如下;

//必须启用 SSI0外设才能使用。
//
SysCtlPeripheralEnable (SYSCTL_Periph_SSI0);
SysCtlPeripheralEnable (SYSCTL_Periph_GPIOA);

//
//为端口 A2、A3、A4和 A5上的 SSI0功能配置引脚复用。
//如果您的器件不支持引脚复用、则无需执行此步骤。
// TODO:更改此选项以选择您正在使用的端口/引脚。
//
GPIOPinConfigure (GPIO_PA2_SSI0CLK);
GPIOPinConfigure (GPIO_PA3_SSI0FSS);
GPIOPinConfigure (GPIO_PA4_SSI0RX);
GPIOPinConfigure (GPIO_PA5_SSI0TX);

//
//配置 SSI 引脚的 GPIO 设置。 该函数也会提供
将这些引脚的//控制到 SSI 硬件。 请参阅中的数据表
//查看每个引脚分配的函数。
//引脚分配如下:
// PA5 - SSI0Tx
// PA4 - SSI0Rx
// PA3 - SSI0Fss
// PA2 - SSI0CLK
// TODO:更改此选项以选择您正在使用的端口/引脚。
//
GPIOPinTypeSSI (GPIO_Porta_base、GPIO_PIN_5 | GPIO_PIN_4 | GPIO_PIN_3 |
GPIO_PIN_2);

#IF 已定义(TARGET_IS_TM4C129_RA0)|| \
已定义(TARGET_IS_TM4C129_RA1)|| \
已定义(TARGET_IS_TM4C129_RA2)
SSIConfigSetExpClk (SSI0_BASE、ui32SysClock、SSI_FRF_MOTO_MOTO_MODE_2、
SSI_MODE_MASTER、1000000、9);
#else
SSIConfigSetExpClk (SSI0_BASE、SysCtlClockGet ()、SSI_FRF_MOTO_MODE_0、
SSI_MODE_MASTER、1000000、8);
#endif
//启用 SSI0模块。
//
SSIEnable (SSI0_BASE);

下面是发送数据的例程;

对于(i = 0;i<8;i++)
{
SSIDataPut (SSI0_BASE、I);
while (SSIBusy (SSI0_BASE)){}
SSIDataGetNonBlocking (SSI0_BASE、&data);
数据&= 0x1FF;
UARTprintf ("\r\nch%d = 0x%X"、i、data);
} 

正如我说过的、我收到的数据正确、并且在以下 Putty 快照和示波器波形 NO1中很明显。

上面的快照显示了一个0b0 0000 0000的9位瞬态

以下快照显示了真正的问题、我们可以看到两次传输之间的延迟为2ms。

当 SPI 时钟以1MHz 运行时、我预计延迟不应超过几微秒。

请提供建议。

谢谢、

此致、

Sahil

 

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

    没关系、我抓住了它。

    这是函数中发送数据的 print 语句。

    UARTprintf ("\r\nch%d = 0x%X"、i、data); 

    谢谢