elusive 0 18 июня, 2013 Опубликовано 18 июня, 2013 · Жалоба Для передачи использую интерфейс UART. Есть входной FIFO глубиной 32. Ставлю уровень заполнения FIFO и прерывание по этому событию. В прерывании считываю всю FIFO и провожу необходимый мне анализ данных. Обработчик по времени очень короткий. Так вот при передаче пакетов размером примерно до 60 байт все нормально принимается и читается. При передаче пакетов больше 60 байт в буфер FIFO почему-то попадают только первые 60 байт! То есть я их считываю как обычно, а после этого FIFO остается пустой, а куда делись остальные байты??? При чем возможно два сценария: установился флажок OVERRUN либо НЕ установился. В случае OVERRUN я еще могу понять - настолько быстро приходят байты, что даже с коротким обработчиком и глубоким буфером мы их не успеваем забрать. Но что происходит если никаких ошибок не возникало? Как UART "прозевал" последущие байты, почему не появилось новое прерывание по уровню FIFO? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Палыч 6 18 июня, 2013 Опубликовано 18 июня, 2013 · Жалоба Есть входной FIFO глубиной 32. ... Так вот при передаче пакетов размером примерно до 60 байт все нормально принимается и читается. При передаче пакетов больше 60 байт в буфер FIFO почему-то попадают только первые 60 байт! Что-то я не въехал: так какая же глубина FIFO ? 32 байта? Шестьдесят? Или ещё больше? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
elusive 0 18 июня, 2013 Опубликовано 18 июня, 2013 · Жалоба Что-то я не въехал: так какая же глубина FIFO ? 32 байта? Шестьдесят? Или ещё больше? Входной аппаратный FIFO на 32. Когда я по прерыванию начинаю считывать оттуда байты он постепенно очищается и параллельно туда валятся новые байты. В сумме у меня выходит принять только 60 байт, потом наступает переполнение, как правило. Иногда даже переполнение не устанавливается, но FIFO почему-то пуст, хотя входной пакет более 100 байтов. По мере чтения из аппаратного FIFO я пишу в свой программный буфер размером с максимальный пакет, который вообще может прийти - 64кбайта. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
andrey74 0 18 июня, 2013 Опубликовано 18 июня, 2013 · Жалоба у меня тоже были проблемы из-за FIFO UARTа, просто его отключил и считывал все символы по прерыванию в отдельный массив, мне так проще Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 63 18 июня, 2013 Опубликовано 18 июня, 2013 · Жалоба Как зовут UART? И приведите свой код для чтения. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
elusive 0 19 июня, 2013 Опубликовано 19 июня, 2013 · Жалоба у меня тоже были проблемы из-за FIFO UARTа, просто его отключил и считывал все символы по прерыванию в отдельный массив, мне так проще По сути дела мне не хватает глубины FIFO, как я понял, поэтому отключить FIFO тут не поможет. Обработчик выглядит примерно так: uint8_t ReadData; ReadData = ReadData_from_UART_Register(); if (ReadData == 0x77) { flag1 = 1; flag2 = 0; } if ((flag6 == 0)&&(ReadData != 0x01)) { counter++; flag 6 = flag4; } Суть в том что в нем мы попадаем в один какой-нибудь if и делаем буквально пару движений с переменными статуса. На байт обработчик тратит примерно 15 мкс, обычно меньше. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Палыч 6 19 июня, 2013 Опубликовано 19 июня, 2013 · Жалоба Если хотите получить какие-то советы/рекомендации - так поделитесь информацией ! Что за UART? Как его настраиваете? Как считываете с него данные? Что за данные? С какой скоростью поступают? И т.п. ... Лето наступило... Телепаты отдыхают! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 119 19 июня, 2013 Опубликовано 19 июня, 2013 · Жалоба Рискну телепатически предположить, что статус сбрасывается при чтении очередного байта. Поэтому проверять его надо до, а не после чтения данных. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться