Перейти к содержанию
    

Не срабатывает прерывание при чтении по DMA

Очень мало - это сколько?))))

Во всех контроллерах происходит событие(event) - например окончание передачи байта, полный/пустой буфер и др. Физически это выход цифрового компаратора, т.е. один проводок внутри контрллера и он выходит из блока в котором произошло событие(SPI, DMA, UART, etc.).

А дальше event можно перенаправить в контроллер прерывания или контроллер DMA, или и туда и туда, можно еще и в другой блок, например АЦП, ЦАП и т.д. И каждый блок предпринимает собственные действия по поступлению события - контроллер прерываний вызывает подпрограмму, DMA начинает или останавливает передачу и т.д.

 

В моем контроллере периферия запрашивает передачу DMA путем установки прерывания. Не знаю, как это устроено в других контроллерах - в моем именно так.

Возможно при переводе перепутали понятие event и interrupt. А возможно и правда на прерывании висит сигнал запуска DMA, это значит разработчики упростили систему.

 

Видимо точно что-то с прерываниями. Выше писали, что приоритет канала RX должен быть выше, чем канала TX.

Если бы вы назвали контроллер или архитектуру, тогда возможно что-то сказать, а так осталось только помогать вам гадать на "кофейной гуще" :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Очень мало - это сколько?))))

3мм :biggrin:

 

Вы с кем общаетесь? Сам с собой?) Объясняю еще раз.

...

Если знаете как запустить передачу без него в текущих условиях - поделитесь примером

Я не знаю как запустить передачу на сферическом коне в вакууме на неизвестном гипотетическом МК. И никто этого не знает.

Какой смысл тогда Вашего вопроса здесь? Пойти туда не знаю куда, сделать то не знаю что? Или просто - пофлудить?

Никто не сможет запустить чего-то там на сферическом коне в вакууме.

 

Но вот вчера вечером уже от безысходности поменял DMA каналы местами. Теперь у чтнения приоритет ниже, чем у отправки. И вот уже несколько часов непрерывного чтения и ни одной ошибки (раньше хватало на несколько минут или даже секунд). Понять бы природу странности, ведь по опыту людей все должно быть ровно наоборот. В даташите толком ничего не написано и примеров нет

Вы здесь-то чего хотите? Чтобы Вам посочувствовали? Поплакаться в жилетку? :crying:

 

А дальше event можно перенаправить в контроллер прерывания или контроллер DMA, или и туда и туда, можно еще и в другой блок, например АЦП, ЦАП и т.д.

Не обязательно это один и тот же event. В некоторых МК прерывания и DMA-запросы - это совершенно разные сигналы, формируемые разной логикой. И даже их может быть несколько одновременно. Я писал об этом выше.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Не обязательно это один и тот же event.

event - это событие совпадения сигналов блока с какой-то маской, т.е. физически в чипе стоит цифровой компаратор и сравнивает набор сигналов блока и маску, при совпадении на выходе возникает сигнал event'а.

А в какой блок дальше его можно отправить зависит от возможностей чипа, потому что чем больше возможностей оправки event'ов из одного блока в другие и их настройки, тем больше связей и логики управления надо создавать внутри чипа.

 

В некоторых МК прерывания и DMA-запросы - это совершенно разные сигналы, формируемые разной логикой. И даже их может быть несколько одновременно.

Если логика их формирования разная, значит это разные event'ы.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Возможно при переводе перепутали понятие 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.

Вот блок-схема из документации:

DMA.jpg

Так вот, время от времени возникает ситуация, что отправил я 1029 байт, а получил якобы только 1028. В этот момент счетчик переданных байт = 0, прочитанных = 1. Соответственно и обработчик RX не вызывается и я не могу завершить транзакцию чтения. Хотя последний байт пришел, я вижу его в регистре приемника. Получается по каким-то причинам DMA не обнулил счетчик (прерывание не пришло?)

 

А поциент jcxz выше явно забежал сюда меня потроллить, вот и разводит бесполезный флуд вокруг терминологии :rolleyes:

Если бы вы назвали контроллер или архитектуру, тогда возможно что-то сказать, а так осталось только помогать вам гадать на "кофейной гуще" :)

F2MC-16FX MB96600 Series

http://www.cypress.com/file/241411/download

Как оказалось, приоритеты каналов тут ни при чем. И новая и старая версии чтения дают сбой при запуске прошивки через отладчик. Если запускаю без отладчика все работает без сбоев. Отладчик может влиять на процесс?

 

Я не знаю как запустить передачу на сферическом коне в вакууме на неизвестном гипотетическом МК. И никто этого не знает.

Я в курсе, что вы не знаете. И сарказма тоже не понимаете, как я вижу.

Ну раз не знаете, то и не надо меня убеждать, что я что-то путаю и не понимаю работу своего контроллера.

Вы здесь-то чего хотите? Чтобы Вам посочувствовали? Поплакаться в жилетку? :crying:

Если не долбиться в глаза можно увидеть вопросы, которые я задавал. Возможно, у кого-то была похожая проблема. Может быть, у кого-то отладчик тоже влиял на работу и тд. Вас лично никто отвечать не заставляет

post-106564-1537095803_thumb.jpg

Изменено пользователем avg33

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А поциент jcxz выше явно забежал сюда меня потроллить, вот и разводит бесполезный флуд вокруг терминологии :rolleyes:

...

Если не долбиться в глаза можно увидеть вопросы, которые я задавал. Возможно, у кого-то была похожая проблема. Может быть, у кого-то отладчик тоже влиял на работу и тд. Вас лично никто отвечать не заставляет

и откуда-ж вы такие вылазите?...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Господа! Прошу без грубостей. Если есть какие-то недосказанности или разночтения терминов, это ещё не повод наезжать друг на друга. Помощь предполагает терпение. Если его нет, лучше прекратить общение. Спасибо за понимание.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

F2MC-16FX MB96600 Series

Это Fujitsu, японцы, с ними мало кто умеет работать.

 

Как оказалось, приоритеты каналов тут ни при чем. И новая и старая версии чтения дают сбой при запуске прошивки через отладчик. Если запускаю без отладчика все работает без сбоев. Отладчик может влиять на процесс?

В общем случае отладчик может, зависит от отладчика, там есть целая глава "On Chip Debugger".

Например в других контроллерах есть биты(флаги), которые сбрасываются, если прочитать определенный регистр - в этом случае отладчик может сломать логику работы.

 

Вот блок-схема из документации:

Всё правильно, они подразумевают что interrupt - это просто прерывание работы шины ядра на передачу DMA, а есть еще interrupt как последовательность действий по вызову подпрограммы обработки прерывания INT.

Собственно на стр. 120 это и нарисовано CASE A когда передача данных идёт с помощью прерывания INT, а в CASE B с помощью DMA.

 

Поверхностно глянул что DMA может маскировать прерывания идущие на контроллер прерываний, да, японцы они такие затейники...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...