Thread 中讨论的其他器件:SYSBIOS
工具/软件:TI-RTOS
我有一个 Tiva TM4C1294NCPT Launchpad、并将 SSI2设置为主 SPI、通过跳线与同一开发板上的 SSI3从 SPI 通信。 这对我来说很好。 现在、我需要将从 SPI 从 SSI3更改为 SS1、但我似乎无法使其正常工作。 我的跳线设置如下:
通用设置: SSI2Clk -> SSIxCLK、SSI2Fss -> SSIxFss、SSI2Data1->SSIxData0、SSI2Data0->SSIxData1、
SSI2->SSI3: PD3->PQ0、PD2->PQ1、PD0->PQ2、PD1->PQ3
SSI2->SSI1: PD3->PB5、PD2->PB4、PD0->PE4、PD1->PE5
程序会编译、主器件似乎会发出消息 OK。 当 SPI 从器件为 SSI3时、将接收报文。 我的 SPI 从器件任务如下:
空 SPIserver (UARg arg0、UARg arg1)
{
SPI_Handle serverSpi;
SPI_Params 服务器 SpiParams;
SPI_Transaction serverTransaction;
bool ServertransferOK;
/*使用从模式初始化 SPI 句柄*/
SPI_Params_init (&serverSpiParams);
serverSpiParams.mode = SPI_SLAVE;
serverSpiParams.bitrate = 1250000;
serverSpiParams.transferMode = SPI_MODE_BLOCKING;
serverSpiParams.frameFormat = SPI_POL0_PHA1;//极性和相位= SPI_POL0_PHA0、SPI_POL0_PHA1、SPI_POL1_PHA0、SPI_POL1_PHA1
//serverSpiParams.transferTimeout = SPI_WAIT_FOREVER;
serverSpiParams.dataSize = 10;
serverSpi = SPI_open (Board_SPI3、&serverSpiParams);
if (serverSpi == NULL){
System_abort ("初始化 SPI\n"时出错);
}
其他
{
System_printf ("服务器 SPI 已初始化"\n);
}
while (1)
{
//Step 1:接收新的 SPI 数据
serverTransaction.count = SPI_MSG_length;
serverTransaction.txBuf =空;
serverTransaction.rxBuf =(ptr) serverRxBuffer;
ServertransferOK = SPI_transfer (serverSpi、&serverTransaction);
}
}
这就证明了一切正常。 现在、当我如前面所述将连接线从 SSI3更改为 SSI1、并在上述程序中将 SPI_OPEN ()中的"Board_SPI3"更改为"Board_SPI1"时、我的从器件 SPI 将保持阻塞模式。 常量定义如下:
#define Board_SPI1 EK_TM4C1294XL_SPI1
#define Board_SPI2 EK_TM4C1294XL_SPI2
#define Board_SPI3 EK_TM4C1294XL_SPI3
我缺少什么。 是否需要为 SSI1配置其他一些配置而不是为 SSI3配置? 这与 Digvijay khambi 几天前报告的 SPI_transfer 崩溃类似。 如果有任何帮助、我们将不胜感激。 请查找以下发布的相关代码。 谢谢!
/*! *@def EK_TM4C1294XL_SPIName *@EK_TM4C1294XL 开发板上 SPI 名称的简短枚举 */ typedef enum EK_TM4C1294XL_SPIName{ EK_TM4C1294XL_SPI1 = 0、 EK_TM4C1294XL_SPI2、 EK_TM4C1294XL_SPI3、 EK_TM4C1294XL_SPICOUNT }EK_TM4C1294XL_SPIName; // *================================================= SPI ======================================================== */ *放入子段以允许 TI 链接器正确删除项目*/ #if defined (__TI_Compiler_version__) #pragma DATA_SECTION (SPI_CONFIG、".CONST:SPI_CONFIG") #pragma DATA_SECTION (spiTivaDMAHWAttrs、".const:TivaDMAHWAttrs )#include Tiva #include SPITivaDMA_Object spiTivaDMAObjects[EK_TM4C1294XL_SPICOUNT]; #if defined (__TI_Compiler_version__) #spima DATA_align (TivaDMAscratchBuf、32) #Elif defined (__IAR_systems_icc_) #tintrateg_t_un32_t_tattrategr_t_t_t_tattratun_tattrategr_un_t_t_t_tatun32_t_un_tun_tun_tun_tun_tun_tun_tun_tun_tun_tun_tun_tun_tun_tun_tun_tun_tun_tun_tun_tun_tun_tun_tun_tun_tun_tun_ap_api_ baseAddr = SSI1_base、 .intNum = INT_SSI1、 .intPriority =(~0)、 .scratchBufPtr =&spiTivaDMAscratchBuf[0]、 defaultTxBufValue = 0、 .rxChannelIndex = UDMA_SEC_CHANGE_SSI1RX、 txChannelIndex = UDMA_SEC_CHANGE_SSI1TX、 channelMappingFxn = uDMAChannelAssign、 .rxChannelMappingFxnArg = UDMA_CH10_SSI1RX、 txChannelMappingFxnArg = UDMA_CH11_SSI1TX }、 { baseAddr = SSI2_base、 .intNum = INT_SSI2、 .intPriority =(~0)、 .scratchBufPtr =&spiTivaDMAscratchBuf[1]、 defaultTxBufValue = 0、 .rxChannelIndex = UDMA_SEC_CHANGE_UART2RX_12、 txChannelIndex = UDMA_SEC_CHANGE_UART2TX_13、 channelMappingFxn = uDMAChannelAssign、 .rxChannelMappingFxnArg = UDMA_CH12_SSI2RX、 txChannelMappingFxnArg = UDMA_CH13_SSI2TX }、 { baseAddr = SSI3_base、 .intNum = INT_SSI3、 .intPriority =(~0)、 .scratchBufPtr =&spiTivaDMAscratchBuf[2]、 defaultTxBufValue = 0、 .rxChannelIndex = UDMA_SEC_CHANGE_TMR2A_14、 txChannelIndex = UDMA_SEC_CHANGE_TMR2B_15、 channelMappingFxn = uDMAChannelAssign、 .rxChannelMappingFxnArg = UDMA_CH14_SSI3RX、 txChannelMappingFxnArg = UDMA_CH15_SSI3TX } }; const SPI_Config SPI_CONFIG[]={ { fxnTablePtr =&SPITIvaDMA_fxnTable、 .object =&spiTivaDMAObjects[0]、 hwAttrs =&spiTivaDMAHWAttrs[0] }、 { fxnTablePtr =&SPITIvaDMA_fxnTable、 .object =&spiTivaDMAObjects[1]、 hwAttrs =&spiTivaDMAHWAttrs[1] }、 { fxnTablePtr =&SPITIvaDMA_fxnTable、 .object =&spiTivaDMAObjects[2]、 hwAttrs =&spiTivaDMAHWAttrs[2] }、 {NULL、NULL、NULL} }; // *===== EK_TM4C1294XL_initSPI === /void EK_TM4C1294XL_initSPI (void) { /* SSI1 */ SysCtlPeripheralEnable (SYSCTL_Periph_SSI1); GPIOPinConfigure (GPIO_PB5_SSI1CLK); GPIOPinConfigure (GPIO_PB4_SSI1FSS); GPIOPinConfigure (GPIO_PE4_SSI1XDAT0); GPIOPinConfigure (GPIO_PE5_SSI1XDAT1); GPIOPinTypeSSI (GPIO_PORTB_BASE、GPIO_PIN_4 | GPIO_PIN_5); GPIOPinTypeSSI (GPIO_Porte _BASE、GPIO_PIN_4 | GPIO_PIN_5); /* SSI2 */ /* *注意:TI-RTOS 示例为 SSI2或 I2C7配置引脚 PD0和 PD1。 因此、 *在中同时使用 I2C 和 SPI 驱动程序时会发生冲突 *应用程序。 修改此文件中的引脚多路复用设置并解析 *运行应用程序前发生冲突。 * SysCtlPeripheralEnable (SYSCTL_Periph_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); ///* SSI3 */ SysCtlPeripheralEnable (SYSCTL_Periph_SSI3); GPIOPinConfigure (GPIO_PQ0_SSI3CLK); GPIOPinConfigure (GPIO_PQ1_SSI3FSS); GPIOPinConfigure (GPIO_PQ2_SSI3XDAT0); GPIOPinConfigure (GPIO_PQ3_SSI3XDAT1); GPIOPinTypeSSI (GPIO_PORTQ_BASE、GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3); EK_TM4C1294XL_initDMA (); SPI_init(); }