由于CS5532硬件SPI一直调不顺。于是就想看看W25X16这个程式怎么硬件SPI实现的。结果Debugs时,卡在这里:
u32 SPI_FLASH_ReadDeviceID(void)
{
u32 Temp = 0;
/* Select the FLASH: Chip Select low */
SPI_FLASH_CS_LOW();
/* Send "RDID " instruction */
SPI_FLASH_SendByte(W25X_DeviceID); // 读ID
SPI_FLASH_SendByte(Dummy_Byte);
SPI_FLASH_SendByte(Dummy_Byte);
SPI_FLASH_SendByte(Dummy_Byte);
/* Read a byte from the FLASH */
Temp = SPI_FLASH_SendByte(Dummy_Byte);
/* Deselect the FLASH: Chip Select high */
SPI_FLASH_CS_HIGH();
return Temp;
}
u8 SPI_FLASH_SendByte(u8 byte) //调用这个函数
{
/* Loop while DR register in not emplty */
while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET);
/* Send byte through the SPI1 peripheral */
SPI_I2S_SendData(SPI1, byte);
/* Wait to receive a byte */
while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_RXNE) == RESET); // 程序到了这里就不在向下执行了,而是一直死循环等待
/* Return the byte read from the SPI bus */
return SPI_I2S_ReceiveData(SPI1);
}
但是,在编译烧进板子后,串口输出一切正常。表明是成功编译执行程序的。不知是为什么,请高手多多指教。
|