请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号: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