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.

[参考译文] RTOS/TM4C1294NCPDT:在 Tiva C 系列连接 Launchpad 中将 SPI 从器件写入 SPI 主器件的示例代码

Guru**** 2540720 points
Other Parts Discussed in Thread: EK-TM4C1294XL

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/744381/rtos-tm4c1294ncpdt-sample-code-for-spi-slave-write-to-spi-master-in-tiva-c-series-connect-launchpad

器件型号:TM4C1294NCPDT
Thread 中讨论的其他器件:EK-TM4C1294XL

工具/软件:TI-RTOS

大家好、我曾尝试在同一控制器上将 hte SSI 接口 SSI0配置为主接口、将 SSI2配置为从接口、并通过将 SSI 引脚连接到 SSI2的相应补码引脚来编写通用固件以获取 SPI。我能够读取从中的主接口(SSI0)写入的数据 从站(SSI2)尝试从 SALve (SSI2)将相同的数据写回主站(SSI0)。但这次尝试读回数据时、调试器卡在 SSI 忙线的检查线上。 请帮助解决问题。 。

/*SSI 初始化函数*?

void SSI_init (void)
{

ui32SysClkFreq = SysCtlClockFreqSet ((SYSCTL_XTAL_25MHz | SYSCTL_OSC_MAIN | SYSCTL_USE_PLL | SYSCTL_CFG_VCO_480)、120000000);

SysCtlPeripheralEnable (SYSCTL_Periph_SSI0);
SysCtlPeripheralEnable (SYSCTL_Periph_GPIOA);

GPIOPinConfigure (GPIO_PA2_SSI0CLK);
GPIOPinConfigure (GPIO_PA3_SSI0FSS);
GPIOPinConfigure (GPIO_PA4_SSI0XDAT0);
GPIOPinConfigure (GPIO_PA5_SSI0XDAT1);
GPIOPinTypeSSI (GPIO_Porta_base、GPIO_PIN_5|GPIO_PIN_4|GPIO_PIN_3|GPIO_PIN_2);

SSIConfigSetExpClk (SSI0_BASE、ui32SysClkFreq、SSI_FRF_MOTO_MODE_0、SSI_MODE_MASTER、10000、 16);
SSIEnable (SSI0_BASE);

SysCtlPeripheralEnable (SYSCTL_Periph_SSI2);//启用 SSI2
SysCtlPeripheralEnable (SYSCTL_Periph_GPIOD);//启用端口 B GPIO 以与 SSI2数据和帧信号配合使用

GPIOPinConfigure (GPIO_PD3_SSI2CLK);
GPIOPinConfigure (GPIO_PD2_SSI2FSS);
GPIOPinConfigure (GPIO_PD1_SSI2XDAT0);
GPIOPinConfigure (GPIO_PD0_SSI2XDAT1);
GPIOPinTypeSSI (GPIO_PORTD_base、GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3);

SSIConfigSetExpClk (SSI2_base、ui32SysClkFreq、SSI_FRF_MOTO_MOTO_0、SSI_MODE_SLAVE、10000、 16);
SSIEnable (SSI2_base);
}


/*函数从 SSI2中的 ssi0读取数据并将其写回 ssi0并将两个*
/ void test_spi (void)
{进行比较
uint32_t ui32Index;
uint32_t ui32Data;
SPI_DATA_index=0;
memset (spi_data_recaused_back、'\0'、15);
for (ui32Index = 0;ui32Index < NUM_SSI_DATA;ui32Index++)
{
ui32Data = SPI_TEST_COMMAN[ui32Index];
SSIDataPut (SSI0_BASE、ui32Data);
while (SSIBusy (SSI0_BASE))
{
}
SSIDataGet (SSI2_base、&SPI_recated_char);
SSIDataPut (SSI2_base、SPI_recathed_char); 

while (SSIBusy (SSI2_base))/* DEBUGER 停留在这里*/ { }
SSIDataGet (SSI0_BASE、SPI_recathed_char);//和 SPI_DATA_recated_back [SPI_DATA_index++]
} if (strcmp (spi_test_command、spi_data_recated_back)==0) { PASS_OR_FAIL = 1; UARTprintf ("\n\n\rPASSED\n"); } 其他 { PASS_OR_FAIL = 0; UARTprintf ("\n\rFAILED\n"); } 返回; }

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    SSI 上的每一个传输都是主机和从机的发送和接收。 要实现这一功能,首先使用一些虚拟数据将 SSIDataPut()发送到从属方。 然后,当您对主设备执行 SSIDataPut()时,从设备将响应,因为它已准备好进行传输。 传输总是以 SSIDataPut ()开始到主设备。 我将会根据您的代码在一段时间内整合一个示例例程。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我在.zip 文件中附加了一个示例工程。 通过选择"File""Import""Code Composer Studio -> CCS Projects"、 "Select archive file"、将该项目导入您的 Code Composer 工作区。 由于我要传输一个 ASCII 字符串、因此我使用了8位而非16位传输。

    /cfs-file/__key/communityserver-discussions-components-files/908/SSI0toSSI2.zip

    在 EK-TM4C1294XL 评估套件上、添加跳线进行连接:

    SSIxCLK PA2至 PD3
    SSIxFSS PA3至 PD2
    SSI0DAT0 PA4至 SSI2DAT1 PD0
    SSI0DAT1 PA5至 SSI2DAT0 PD1

    这是它在逻辑分析仪上的样子。 RX 是从机接收和主机发送。 TX 是从机发送和主机接收。