Есть такая функция.
Код
uint32_t SPI_TransferByte(uint32_t sendbyte)
{
/* Check that transmit buffer is empty */
while (!(SPI_USART->STATUS & USART_STATUS_TXBL));
SPI_USART->TXDATA = (uint32_t)sendbyte;
/* Wait for transmitting to finished */
while (!(SPI_USART->STATUS & USART_STATUS_TXC));
//return data;
return majority32const(&SPI_USART->RXDATA);
}
Есть большая вероятность что она заткнется в while(...)
Watchdog не хочу запускать. это не причина ресетовать всю систему.
решил сделать так.
Код
uint32_t SPI_TransferByte(uint32_t sendbyte)
{
uint32_t timeout = 10000;
/* Check that transmit buffer is empty */
while (!(SPI_USART->STATUS & USART_STATUS_TXBL) && timeout)
{
timeout--;
}
SPI_USART->TXDATA = (uint32_t)sendbyte;
timeout = 10000;
/* Wait for transmitting to finished */
while (!(SPI_USART->STATUS & USART_STATUS_TXC) && timeout)
{
timeout--;
}
//return data;
return majority32const(&SPI_USART->RXDATA);
}
насколько это криво? или все таки нормальное решение?
Сообщение отредактировал Jenya7 - Oct 13 2015, 06:34