По прерываниям производится выдача данных по Tx Uart Nios из некоторого буфера char Buff[4800]. Период повторения 1 сек. Все данные из буфера выдаются на скорости 115200 примерно за 0.4 сек. В програме для Nios есть острая необходимость определить момент когда будет выдан по Tx последний байт из буфера. Для этого использую бит TMT регистра статуса.
Код
unsigned char EmptyTxUart1()
{
int sr;
sr = IORD_ALTERA_AVALON_UART_STATUS(UART_0_BASE);
if(sr & ALTERA_AVALON_UART_STATUS_TMT_MSK) return 1;
else
return 0;
}
Далее в теле программы
Код
if(!EmptyTxUart1() && !BeginReadContr) BeginReadContr = 1; else BeginReadContr = 0;
Вроде работает. Бит TMT устанавливается. Но устанавливается намнго раньше (~ 0.1 сек) чем будет выдан последний бит по Tx (~0.4 сек). Контроль установки BeginReadContr и сигнала Tx веду по осциллографу.
В чем тут хитрость? Как можно правильно пределить момент выдачи последнего бита из буфера Tx Nios Uart?
Сообщение отредактировал Acvarif - Aug 10 2016, 15:36