-
- Обычно, "байда с прерываниями" означает наличие выхода INT, который дёргает вход МК, сигналя: "Отсчёт пришёл!", или: "Буфер заполнен" (нужно выяснить, в какой момент подаётся сигнал и как он настраивается, если настраивается). - Nikolay_Po(15.11.2023 22:36)
- А есть признак, что что-то новое появилось (пусть непонятно, всё ли
прочитано)? Если нет, то см. моё сообщение ниже. - Nikolay_Po(15.11.2023 22:26)
- Там ситуация такая. FIFO разбит, допустим, на 2 блока. Один блок
читаю, второй заполняю. Признак, что я полностью прочел блок
имеется. Но признака, что второй блок заполнен отсутствует. То есть
я могу продолжить считывать старые данные. Интересно то, что это не
дефект чипа. Это как-то работает, судя по описанию. Но вот как...
Технического писателя, я бы кастрировал, чтобы предотвратить
появления подобных талантов в будущем. - st256(15.11.2023 22:35)
- Разбивка на блоки произвольная или фиксированная? Как определяется
факт неполного прочтения блока? Признак полного прочтения один на
все блоки или индивидуальный для каждого блока? Как определить,
какой из блоков сейчас пишется, а какой - читать? - Nikolay_Po(15.11.2023 22:43)
- Да произвольная. FIFO там специфическое. Есть область памяти,
которая может быть отдана под FIFO. Есть регистр, который в этой
области показывает на начало, есть который показывает на конец. И
есть, блин, который показывает на размер FIFO. ЗАЧЕМ? Меня это
удручает, так как сие явное излишество. Далее, в области FIFO могу
выделить блок произвольной длины, где хранятся уже принятые данные.
Оставшаяся область, отведенная под FIFO, видимо, заполняется, пока
я обрабатываю блок с st256(263 знак., 15.11.2023 23:03)
- По сути, это похоже на обычную работу с ПДП (DMA). А размер FIFO
может быть нужен как раз для разбивки буфера на блоки (и, возможно,
должен быть строго кратен размеру от мин до макс). Это мои домыслы. Nikolay_Po(158 знак., 15.11.2023 23:14)
- Примеры то есть. Только они на асме и очень большие. Вообще, это я бы и назвал ПДП. Только в документации сие называют FIFO. И не понятно, как ее синхронизировать. Пока, никаких флагов я не вижу. Есть подозрение, что счетчик, когда достиг размера блока, а следующий блок еще не готов, просто не сбрасывается. Вот сейчас проверяю эту гипотезу. - st256(15.11.2023 23:27)
- По сути, это похоже на обычную работу с ПДП (DMA). А размер FIFO
может быть нужен как раз для разбивки буфера на блоки (и, возможно,
должен быть строго кратен размеру от мин до макс). Это мои домыслы. Nikolay_Po(158 знак., 15.11.2023 23:14)
- Да произвольная. FIFO там специфическое. Есть область памяти,
которая может быть отдана под FIFO. Есть регистр, который в этой
области показывает на начало, есть который показывает на конец. И
есть, блин, который показывает на размер FIFO. ЗАЧЕМ? Меня это
удручает, так как сие явное излишество. Далее, в области FIFO могу
выделить блок произвольной длины, где хранятся уже принятые данные.
Оставшаяся область, отведенная под FIFO, видимо, заполняется, пока
я обрабатываю блок с st256(263 знак., 15.11.2023 23:03)
- Разбивка на блоки произвольная или фиксированная? Как определяется
факт неполного прочтения блока? Признак полного прочтения один на
все блоки или индивидуальный для каждого блока? Как определить,
какой из блоков сейчас пишется, а какой - читать? - Nikolay_Po(15.11.2023 22:43)
- Там ситуация такая. FIFO разбит, допустим, на 2 блока. Один блок
читаю, второй заполняю. Признак, что я полностью прочел блок
имеется. Но признака, что второй блок заполнен отсутствует. То есть
я могу продолжить считывать старые данные. Интересно то, что это не
дефект чипа. Это как-то работает, судя по описанию. Но вот как...
Технического писателя, я бы кастрировал, чтобы предотвратить
появления подобных талантов в будущем. - st256(15.11.2023 22:35)
- Сталкивался, не с АЦП, но суть та же - бита готовности нет, состояние FIFO не отражает настоящего наличия данных (дефект чипа). Попробуйте так: после завершения преобразования, каждый раз вычитывать из буфера больше, чем могло быть преобразовано за прошедшее время. Затем ожидайте дольше, чем длится одно преобразование. Читайте пару отсчётов снова. Так гарантированно в буфере будут один или два свежих отсчёта. Использовать первый из них. Nikolay_Po(83 знак., 15.11.2023 22:24)