|
Не срабатывает прерывание при чтении по DMA |
|
|
|
Sep 14 2018, 08:43
|
Гуру
Группа: Свой
Сообщений: 2 223
Регистрация: 3-03-06
Из: Tomsk
Пользователь №: 14 925
|
Цитата(avg33 @ Sep 13 2018, 20:18) Очень мало - это сколько?)))) Во всех контроллерах происходит событие(event) - например окончание передачи байта, полный/пустой буфер и др. Физически это выход цифрового компаратора, т.е. один проводок внутри контрллера и он выходит из блока в котором произошло событие(SPI, DMA, UART, etc.). А дальше event можно перенаправить в контроллер прерывания или контроллер DMA, или и туда и туда, можно еще и в другой блок, например АЦП, ЦАП и т.д. И каждый блок предпринимает собственные действия по поступлению события - контроллер прерываний вызывает подпрограмму, DMA начинает или останавливает передачу и т.д. Цитата(avg33 @ Sep 13 2018, 20:18) В моем контроллере периферия запрашивает передачу DMA путем установки прерывания. Не знаю, как это устроено в других контроллерах - в моем именно так. Возможно при переводе перепутали понятие event и interrupt. А возможно и правда на прерывании висит сигнал запуска DMA, это значит разработчики упростили систему. Цитата(avg33 @ Sep 13 2018, 20:18) Видимо точно что-то с прерываниями. Выше писали, что приоритет канала RX должен быть выше, чем канала TX. Если бы вы назвали контроллер или архитектуру, тогда возможно что-то сказать, а так осталось только помогать вам гадать на "кофейной гуще"
|
|
|
|
|
Sep 14 2018, 10:02
|
Гуру
Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713
|
Цитата(avg33 @ Sep 13 2018, 16:18) Очень мало - это сколько?)))) 3мм Цитата(avg33 @ Sep 13 2018, 16:18) Вы с кем общаетесь? Сам с собой?) Объясняю еще раз. ... Если знаете как запустить передачу без него в текущих условиях - поделитесь примером Я не знаю как запустить передачу на сферическом коне в вакууме на неизвестном гипотетическом МК. И никто этого не знает. Какой смысл тогда Вашего вопроса здесь? Пойти туда не знаю куда, сделать то не знаю что? Или просто - пофлудить? Никто не сможет запустить чего-то там на сферическом коне в вакууме. Цитата(avg33 @ Sep 13 2018, 16:18) Но вот вчера вечером уже от безысходности поменял DMA каналы местами. Теперь у чтнения приоритет ниже, чем у отправки. И вот уже несколько часов непрерывного чтения и ни одной ошибки (раньше хватало на несколько минут или даже секунд). Понять бы природу странности, ведь по опыту людей все должно быть ровно наоборот. В даташите толком ничего не написано и примеров нет Вы здесь-то чего хотите? Чтобы Вам посочувствовали? Поплакаться в жилетку? Цитата(HardEgor @ Sep 14 2018, 11:43) А дальше event можно перенаправить в контроллер прерывания или контроллер DMA, или и туда и туда, можно еще и в другой блок, например АЦП, ЦАП и т.д. Не обязательно это один и тот же event. В некоторых МК прерывания и DMA-запросы - это совершенно разные сигналы, формируемые разной логикой. И даже их может быть несколько одновременно. Я писал об этом выше.
|
|
|
|
|
Sep 15 2018, 09:09
|
Гуру
Группа: Свой
Сообщений: 2 223
Регистрация: 3-03-06
Из: Tomsk
Пользователь №: 14 925
|
Цитата(jcxz @ Sep 14 2018, 17:02) Не обязательно это один и тот же event. event - это событие совпадения сигналов блока с какой-то маской, т.е. физически в чипе стоит цифровой компаратор и сравнивает набор сигналов блока и маску, при совпадении на выходе возникает сигнал event'а. А в какой блок дальше его можно отправить зависит от возможностей чипа, потому что чем больше возможностей оправки event'ов из одного блока в другие и их настройки, тем больше связей и логики управления надо создавать внутри чипа. Цитата(jcxz @ Sep 14 2018, 17:02) В некоторых МК прерывания и DMA-запросы - это совершенно разные сигналы, формируемые разной логикой. И даже их может быть несколько одновременно. Если логика их формирования разная, значит это разные event'ы.
|
|
|
|
|
Sep 16 2018, 12:24
|
Группа: Участник
Сообщений: 12
Регистрация: 7-08-18
Пользователь №: 106 564
|
Цитата(HardEgor) Возможно при переводе перепутали понятие 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 выше явно забежал сюда меня потроллить, вот и разводит бесполезный флуд вокруг терминологии Цитата(HardEgor) Если бы вы назвали контроллер или архитектуру, тогда возможно что-то сказать, а так осталось только помогать вам гадать на "кофейной гуще" F2MC-16FX MB96600 Series http://www.cypress.com/file/241411/downloadКак оказалось, приоритеты каналов тут ни при чем. И новая и старая версии чтения дают сбой при запуске прошивки через отладчик. Если запускаю без отладчика все работает без сбоев. Отладчик может влиять на процесс? Цитата(jcxz) Я не знаю как запустить передачу на сферическом коне в вакууме на неизвестном гипотетическом МК. И никто этого не знает. Я в курсе, что вы не знаете. И сарказма тоже не понимаете, как я вижу. Ну раз не знаете, то и не надо меня убеждать, что я что-то путаю и не понимаю работу своего контроллера. Цитата(jcxz) Вы здесь-то чего хотите? Чтобы Вам посочувствовали? Поплакаться в жилетку? Если не долбиться в глаза можно увидеть вопросы, которые я задавал. Возможно, у кого-то была похожая проблема. Может быть, у кого-то отладчик тоже влиял на работу и тд. Вас лично никто отвечать не заставляет
Сообщение отредактировал avg33 - Sep 16 2018, 12:25
Эскизы прикрепленных изображений
|
|
|
|
|
Sep 16 2018, 13:16
|
Гуру
Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713
|
Цитата(avg33 @ Sep 16 2018, 15:24) А поциент jcxz выше явно забежал сюда меня потроллить, вот и разводит бесполезный флуд вокруг терминологии ... Если не долбиться в глаза можно увидеть вопросы, которые я задавал. Возможно, у кого-то была похожая проблема. Может быть, у кого-то отладчик тоже влиял на работу и тд. Вас лично никто отвечать не заставляет и откуда-ж вы такие вылазите?...
|
|
|
|
|
Sep 16 2018, 16:41
|
Гуру
Группа: Свой
Сообщений: 2 223
Регистрация: 3-03-06
Из: Tomsk
Пользователь №: 14 925
|
Цитата(avg33 @ Sep 16 2018, 19:24) F2MC-16FX MB96600 Series Это Fujitsu, японцы, с ними мало кто умеет работать. Цитата(avg33 @ Sep 16 2018, 19:24) Как оказалось, приоритеты каналов тут ни при чем. И новая и старая версии чтения дают сбой при запуске прошивки через отладчик. Если запускаю без отладчика все работает без сбоев. Отладчик может влиять на процесс? В общем случае отладчик может, зависит от отладчика, там есть целая глава "On Chip Debugger". Например в других контроллерах есть биты(флаги), которые сбрасываются, если прочитать определенный регистр - в этом случае отладчик может сломать логику работы. Цитата(avg33 @ Sep 16 2018, 19:24) Вот блок-схема из документации: Всё правильно, они подразумевают что interrupt - это просто прерывание работы шины ядра на передачу DMA, а есть еще interrupt как последовательность действий по вызову подпрограммы обработки прерывания INT. Собственно на стр. 120 это и нарисовано CASE A когда передача данных идёт с помощью прерывания INT, а в CASE B с помощью DMA. Поверхностно глянул что DMA может маскировать прерывания идущие на контроллер прерываний, да, японцы они такие затейники...
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|