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