部件号: TMS320F28379D
静态 void SPIB_DEV_GPIO_Init (void)
{
/* MOSI */
GPIO_setPinConfig (GPIO_63_SPISIMOB);
GPIO_setPadConfig (63、GPIO_PIN_TYPE_PULLUP);
GPIO_setQualificationMode (63、GPIO_QUAL_ASYNC);
GPIO_setDirectionMode (63、GPIO_DIR_MODE_IN);
/* MISO */
GPIO_setPinConfig (GPIO_64_SPISOMIB);
GPIO_setPadConfig (64、GPIO_PIN_TYPE_PULLUP);
GPIO_setQualificationMode (64、GPIO_QUAL_ASYNC);
GPIO_setDirectionMode (64、GPIO_DIR_MODE_OUT);
/* SCLK */
GPIO_setPinConfig (GPIO_65_SPICLKB);
GPIO_setPadConfig (65、GPIO_PIN_TYPE_PULLUP);
GPIO_setQualificationMode (65、GPIO_QUAL_ASYNC);
GPIO_setDirectionMode (65、GPIO_DIR_MODE_IN);
/* CS—硬件 SPISTE(关键)*/
GPIO_setPinConfig (GPIO_66_SPISTEB);
GPIO_setDirectionMode (66、GPIO_DIR_MODE_IN);
GPIO_setPadConfig (66、GPIO_PIN_TYPE_PULLUP);
GPIO_setQualificationMode (66、GPIO_QUAL_ASYNC);
}
//void SPIB_InitTx (void)
//{
// int i;
// for (i=0;i<8;i++)
// {
// SPI_writeDataNonBlocking (SPIB_BASE、txBuffer[i]);
// }
//}
void SPIB_DEV_Init (void)
{
SysCtl_enablePeripheral (SYSCTL_PERIPH_CLK_SPIB);
SPIB_DEV_GPIO_Init();
SPI_disableModule (SPIB_BASE);
SPI_setConfig (SPIB_BASE、
DEVICE_LSPCLK_FREQ、
SPI_PROT_POL0PHA0、 //必须与 Zynq spidev 匹配
SPI_MODE_peripheral、
0、 //在从器件中忽略
8); // spidev 默认值
SPI_enableFIFO (SPIB_BASE);
SPI_disableLoopback (SPIB_BASE);
SPI_setEmulationMode (SPIB_BASE、SPI_emulation_free_run);
SPI_clearInterruptStatus (SPIB_BASE、
SPI_INT_RXFF | SPI_INT_RX_OVERLAR);
//
// SPI_setFIFOInterruptLevel (SPIB_BASE、
// SPI_FIFO_TX0、
// SPI_FIFO_RX1); // 1 个字节上产生 RX 中断
// SPI_enableInterrupt (SPIB_BASE、
// SPI_INT_RXFF | SPI_INT_RX_OVERLAR);
// spi_disableInterrupt (SPIB_base、
// SPI_INT_RXFF | SPI_INT_RX_OVERLAR);
/*预加载第一个字节、使第一个时钟不发送垃圾*/
// SPI_writeDataNonBlocking (SPIB_BASE、txdata);
// SPIB_InitTx ();
SPI_resetTxFIFO (SPIB_BASE);
SPI_resetRxFIFO (SPIB_BASE);
SPI_writeDataNonBlocking (SPIB_BASE、txdata);
txIndex = 1;
SPI_enableModule (SPIB_BASE);
}
void SPIB_Poll (void)
{
uint8_t rxData;
// uint8_t txdata = 0x22;
/*检查主器件是否发送 1 个字节*/
IF (SPI_getRxFIFOStatus (SPIB_BASE)>= SPI_FIFO_RX1)
{
uint8_t rxData =(uint8_t)(SPI_readDataNonBlocking (SPIB_BASE)& 0xFF);
// uart_printf(“ \r\n“);
UART_printf(“slave Received:0x%02x\r\n“、rxData);
// UART_printf(“================================ \r\n“);
/*准备回应*/
uint8_t response = rxData + 1; //示例逻辑
/*等待 TX FIFO 有空间*/
while (SPI_getTxFIFOStatus (SPIB_BASE)= SPI_FIFO_TXFULL);
/*在下一个主时钟之前加载响应*/
SPI_writeDataNonBlocking (SPIB_BASE、RESPONSE);
UART_printf(“从器件响应:0x%02x\r\n“,响应);
}
/*处理超限*/
IF (SPI_getInterruptStatus (SPIB_BASE)& SPI_INT_RX_overlast)
{
UART_printf(“SPI RX 溢出!\r\n“);
SPI_resetRxFIFO (SPIB_BASE);
SPI_resetTxFIFO (SPIB_BASE);
SPI_clearInterruptStatus (SPIB_BASE、SPI_INT_RX_overlast);
}
}
我正在检查处理器和控制器之间的 SPI 通信、其中处理器充当主器件、控制器充当从器件。 从处理器到控制器的 MOSI 通信正常工作、控制器正在接收数据。 但是、处理器没有通过 MISO 线路接收数据。
我探测并验证了数据是否正在从控制器的 MISO 线路传输。 然而、传输的数据始终为零。 我还尝试了修改逻辑以发回接收到的数据加一、甚至尝试发送硬编码数据、但问题仍然存在。
解决此问题的任何建议。