У меня возникли проблемы с управлением потоком USART на Atxmega256. Я общаюсь с модемом, который использует RTS/CTS для управления потоком. Как только модем устанавливает CTS на низкий уровень, я хочу прекратить отправку данных, пока он снова не достигнет высоких значений. В настоящее время я использую процедуры USART с прерываниями и не могу найти хороший способ остановить отправку. Если я просто прекращаю отправку, когда CTS становится низким, данные allready в буферах отправки будут по-прежнему отправляться и, следовательно, потеряться.Управление потоком Atxmega USART
Я попытался последующие отключить/включить отправку:
if(false == clearToSend()) {
USART_TxdInterruptLevel_Set(data->usart, USART_TXCINTLVL_OFF_gc);
while(false == clearToSend()) {}
USART_TxdInterruptLevel_Set(data->usart, USART_TXCINTLVL_LO_gc);
}
К сожалению, это, кажется, отключить передачу на постоянной основе. Есть идеи?
С наилучшими пожеланиями Фредрик