求助大神,我用的M482做主机,nano100做从机。使用硬件spi通信,主机给从机发送5个字节,从机每次都只能收到最后一个字节,这个是为什么。从机是通过中断来接收消息的。
主机发送代码:
void SPI_Send_Array(uint8_t *data, uint32_t length)
{
uint32_t i;
// 拉低片选信号,开始传输
SPI_CS_Control(1);
// 循环发送数据
for(i = 0; i < length; i++)
{
// 等待TX FIFO不满
while(SPI_GET_TX_FIFO_FULL_FLAG(SPI0));
// 写入数据到TX FIFO
SPI_WRITE_TX0(SPI0, data[i]);
// 等待传输完成
while(SPI_IS_BUSY(SPI0));
}
// 拉高片选信号,结束传输
SPI_CS_Control(0);
}
从机中断接收:
void SPI0_IRQHandler(void)
{
static uint32_t rx_index = 0;
// Check RX FIFO interrupt flag
if(SPI_GET_STATUS(SPI0) & SPI_STATUS_RXINT_STS_Msk)
{
// Read data from RX FIFO while it's not empty
while(!SPI_GET_RX_FIFO_EMPTY_FLAG(SPI0) && rx_index < 5)
{
rx_data[rx_index] = SPI_READ_RX0(SPI0);
rx_index++;
// When all 5 bytes are received, process or reset
if(rx_index == 5)
{
rx_index = 0;
}
}
}
SPI_CLR_UNIT_TRANS_INT_FLAG(SPI0);
} |
|