Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Как определить когда Tx Shift Nios Uart закончил работу
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Системы на ПЛИС - System on a Programmable Chip (SoPC)
Acvarif
По прерываниям производится выдача данных по 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?
vadimuzzz
а если использовать TMT + EOP?
Acvarif
Цитата(vadimuzzz @ Aug 11 2016, 03:54) *
а если использовать TMT + EOP?

Да, спасибо. Должно сработать.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.