HardEgor 63 14 сентября, 2018 Опубликовано 14 сентября, 2018 · Жалоба Очень мало - это сколько?)))) Во всех контроллерах происходит событие(event) - например окончание передачи байта, полный/пустой буфер и др. Физически это выход цифрового компаратора, т.е. один проводок внутри контрллера и он выходит из блока в котором произошло событие(SPI, DMA, UART, etc.). А дальше event можно перенаправить в контроллер прерывания или контроллер DMA, или и туда и туда, можно еще и в другой блок, например АЦП, ЦАП и т.д. И каждый блок предпринимает собственные действия по поступлению события - контроллер прерываний вызывает подпрограмму, DMA начинает или останавливает передачу и т.д. В моем контроллере периферия запрашивает передачу DMA путем установки прерывания. Не знаю, как это устроено в других контроллерах - в моем именно так. Возможно при переводе перепутали понятие event и interrupt. А возможно и правда на прерывании висит сигнал запуска DMA, это значит разработчики упростили систему. Видимо точно что-то с прерываниями. Выше писали, что приоритет канала RX должен быть выше, чем канала TX. Если бы вы назвали контроллер или архитектуру, тогда возможно что-то сказать, а так осталось только помогать вам гадать на "кофейной гуще" :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 184 14 сентября, 2018 Опубликовано 14 сентября, 2018 · Жалоба Очень мало - это сколько?)))) 3мм :biggrin: Вы с кем общаетесь? Сам с собой?) Объясняю еще раз. ... Если знаете как запустить передачу без него в текущих условиях - поделитесь примером Я не знаю как запустить передачу на сферическом коне в вакууме на неизвестном гипотетическом МК. И никто этого не знает. Какой смысл тогда Вашего вопроса здесь? Пойти туда не знаю куда, сделать то не знаю что? Или просто - пофлудить? Никто не сможет запустить чего-то там на сферическом коне в вакууме. Но вот вчера вечером уже от безысходности поменял DMA каналы местами. Теперь у чтнения приоритет ниже, чем у отправки. И вот уже несколько часов непрерывного чтения и ни одной ошибки (раньше хватало на несколько минут или даже секунд). Понять бы природу странности, ведь по опыту людей все должно быть ровно наоборот. В даташите толком ничего не написано и примеров нет Вы здесь-то чего хотите? Чтобы Вам посочувствовали? Поплакаться в жилетку? :crying: А дальше event можно перенаправить в контроллер прерывания или контроллер DMA, или и туда и туда, можно еще и в другой блок, например АЦП, ЦАП и т.д. Не обязательно это один и тот же event. В некоторых МК прерывания и DMA-запросы - это совершенно разные сигналы, формируемые разной логикой. И даже их может быть несколько одновременно. Я писал об этом выше. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
HardEgor 63 15 сентября, 2018 Опубликовано 15 сентября, 2018 · Жалоба Не обязательно это один и тот же event. event - это событие совпадения сигналов блока с какой-то маской, т.е. физически в чипе стоит цифровой компаратор и сравнивает набор сигналов блока и маску, при совпадении на выходе возникает сигнал event'а. А в какой блок дальше его можно отправить зависит от возможностей чипа, потому что чем больше возможностей оправки event'ов из одного блока в другие и их настройки, тем больше связей и логики управления надо создавать внутри чипа. В некоторых МК прерывания и DMA-запросы - это совершенно разные сигналы, формируемые разной логикой. И даже их может быть несколько одновременно. Если логика их формирования разная, значит это разные event'ы. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
avg33 0 16 сентября, 2018 Опубликовано 16 сентября, 2018 (изменено) · Жалоба Возможно при переводе перепутали понятие event и interrupt. А возможно и правда на прерывании висит сигнал запуска DMA, это значит разработчики упростили систему. Если дословно: "The peripheral resource (I/O) requests DMA transfer by asserting an interrupt". У DMA канала есть регистр, в котором указывается номер прерывания, которое инициирует передачу. То есть, если настроить DMA канал на прерывание RX, то event "регистр-приемник полный" инициирует прерывание RX, которое уйдет не в контроллер, а в DMA. DMA прочитает байт из регистра-приемника USART и уменьшит счетчик прочитанных байт. Если счетчик обнулился, DMA передает запрос на прерывание контроллеру и тот вызывает обработчик RX. Вот блок-схема из документации: Так вот, время от времени возникает ситуация, что отправил я 1029 байт, а получил якобы только 1028. В этот момент счетчик переданных байт = 0, прочитанных = 1. Соответственно и обработчик RX не вызывается и я не могу завершить транзакцию чтения. Хотя последний байт пришел, я вижу его в регистре приемника. Получается по каким-то причинам DMA не обнулил счетчик (прерывание не пришло?) А поциент jcxz выше явно забежал сюда меня потроллить, вот и разводит бесполезный флуд вокруг терминологии :rolleyes: Если бы вы назвали контроллер или архитектуру, тогда возможно что-то сказать, а так осталось только помогать вам гадать на "кофейной гуще" :) F2MC-16FX MB96600 Series http://www.cypress.com/file/241411/download Как оказалось, приоритеты каналов тут ни при чем. И новая и старая версии чтения дают сбой при запуске прошивки через отладчик. Если запускаю без отладчика все работает без сбоев. Отладчик может влиять на процесс? Я не знаю как запустить передачу на сферическом коне в вакууме на неизвестном гипотетическом МК. И никто этого не знает. Я в курсе, что вы не знаете. И сарказма тоже не понимаете, как я вижу. Ну раз не знаете, то и не надо меня убеждать, что я что-то путаю и не понимаю работу своего контроллера. Вы здесь-то чего хотите? Чтобы Вам посочувствовали? Поплакаться в жилетку? :crying: Если не долбиться в глаза можно увидеть вопросы, которые я задавал. Возможно, у кого-то была похожая проблема. Может быть, у кого-то отладчик тоже влиял на работу и тд. Вас лично никто отвечать не заставляет Изменено 16 сентября, 2018 пользователем avg33 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 184 16 сентября, 2018 Опубликовано 16 сентября, 2018 · Жалоба А поциент jcxz выше явно забежал сюда меня потроллить, вот и разводит бесполезный флуд вокруг терминологии :rolleyes: ... Если не долбиться в глаза можно увидеть вопросы, которые я задавал. Возможно, у кого-то была похожая проблема. Может быть, у кого-то отладчик тоже влиял на работу и тд. Вас лично никто отвечать не заставляет и откуда-ж вы такие вылазите?... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Herz 4 16 сентября, 2018 Опубликовано 16 сентября, 2018 · Жалоба Господа! Прошу без грубостей. Если есть какие-то недосказанности или разночтения терминов, это ещё не повод наезжать друг на друга. Помощь предполагает терпение. Если его нет, лучше прекратить общение. Спасибо за понимание. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
HardEgor 63 16 сентября, 2018 Опубликовано 16 сентября, 2018 · Жалоба F2MC-16FX MB96600 Series Это Fujitsu, японцы, с ними мало кто умеет работать. Как оказалось, приоритеты каналов тут ни при чем. И новая и старая версии чтения дают сбой при запуске прошивки через отладчик. Если запускаю без отладчика все работает без сбоев. Отладчик может влиять на процесс? В общем случае отладчик может, зависит от отладчика, там есть целая глава "On Chip Debugger". Например в других контроллерах есть биты(флаги), которые сбрасываются, если прочитать определенный регистр - в этом случае отладчик может сломать логику работы. Вот блок-схема из документации: Всё правильно, они подразумевают что interrupt - это просто прерывание работы шины ядра на передачу DMA, а есть еще interrupt как последовательность действий по вызову подпрограммы обработки прерывания INT. Собственно на стр. 120 это и нарисовано CASE A когда передача данных идёт с помощью прерывания INT, а в CASE B с помощью DMA. Поверхностно глянул что DMA может маскировать прерывания идущие на контроллер прерываний, да, японцы они такие затейники... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться