Embedded 如何将阻塞机制添加到简单的USART\U tx efm32中

Embedded 如何将阻塞机制添加到简单的USART\U tx efm32中,embedded,Embedded,我使用简单的usart_tx发送SPI命令,我们需要检查是否阻塞,直到usart_tx函数完成。我们需要确保在开始排队交换新值之前缓冲区是空的。 我正在使用手动芯片选择进行传输。我想在单个CS低会话中发送4个字节。 因此,我启用了TXBL,如下所示 然后我发送4次8位数据,在每次数据发送之间,我放入while循环,如下所示。 在我们开始新的发送之前,是阻塞机制确保缓冲区是空的吗? 谢谢 您使用的是哪个EFM32部件?您知道USART中有内部传输缓冲区吗?为什么在发送另一个字节之前,需要等待每个字

我使用简单的usart_tx发送SPI命令,我们需要检查是否阻塞,直到usart_tx函数完成。我们需要确保在开始排队交换新值之前缓冲区是空的。 我正在使用手动芯片选择进行传输。我想在单个CS低会话中发送4个字节。 因此,我启用了TXBL,如下所示 然后我发送4次8位数据,在每次数据发送之间,我放入while循环,如下所示。 在我们开始新的发送之前,是阻塞机制确保缓冲区是空的吗? 谢谢


您使用的是哪个EFM32部件?您知道USART中有内部传输缓冲区吗?为什么在发送另一个字节之前,需要等待每个字节退出USART?当代码只是轮询USART状态时,为什么要启用中断?注释说您正在启用TXC中断,但代码启用TXDATAV。我不熟悉那种打断。你是说RXDATAV吗?
USART1->IEN = USART_IEN_TXDATAV; //enable TXC interrupt flag


GPIO_PinOutClear(gpioPortA,4); //Low CS



USART_Tx(USART1, Tx_WRSR[0]);//transmit first byte of the command

while( !(USART1->STATUS & USART_STATUS_TXC) );  //wait TILL TXC goes high

USART_Tx(USART1, Tx_WRSR[1]);//transmit second byte of the command

while( !(USART1->STATUS & USART_STATUS_TXC) );  //wait TILL TXC goes high

USART_Tx(USART1, Tx_WRSR[2]);//transmit third byte of the command

while( !(USART1->STATUS & USART_STATUS_TXC) );  //wait TILL TXC goes high

USART_Tx(USART1, Tx_WRSR[3]);//transmit 4th byte of the command

while( !(USART1->STATUS & USART_STATUS_TXC) );  //wait TILL TXC goes high

GPIO_PinOutSet(gpioPortA,4); //High CS so signal the end of SPI session

delay(500) //delay half a second so the device will understand that trnasmition is OVER