реклама на сайте
подробности

 
 
> Не срабатывает прерывание при чтении по DMA
avg33
сообщение Aug 21 2018, 18:22
Сообщение #1





Группа: Участник
Сообщений: 12
Регистрация: 7-08-18
Пользователь №: 106 564



Я общаюсь с SPI флэшкой через USART в синхронном режиме. Передача и прием организованы по DMA каналам. Посылки фиксированной длины (1024 байта).
Алгоритм обмена выглядит так:
1. Активирую флэш (CS=0)
2. Настраиваю DMA канал на прием 1024 байт. Разрешаю прерывание по чтению IRQ_RX
3. Настраиваю другой DMA канал на передачу 1024 байт. Разрешаю прерывание по передаче IRQ_TX - в этот момент начинается передача/прием
4. В обработчике IRQ_TX очищаю флаг разрешения прерывания, отключаю DMA канал передачи
5. В обработчике IRQ_RX очищаю флаг разрешения прерывания, отключаю DMA канал чтения + деактивирую флэш (CS=1)

Ну то есть стандартный SPI обмен: посылаю 1024 байта - одновременно принимаю 1024 байта. По окончанию передачи/приема обрабатываю прерывания.

И все вроде бы работает. Но иногда (очень и очень редко) бывает ситуация, когда прерывание по передаче срабатывает, а прерывание по чтению нет!
Что я вижу в дебагере в этот момент:
1. Счетчик DMA по передаче равен 0, а по чтению 1. То есть DMA отправил 1024 байта, а прочитал почему-то только 1023. Соответственно, прерывание по чтению не сработает никогда.
2. Ошибки переполнения при чтении (overrun error) нет. Все флаги ошибок равны 0.
3. В регистре чтения USART лежит последний байт посылки (0x89). То есть последний (1024-й) байт посылки похоже таки пришел в регистр. Но счетчик не обнулился
4. Аппаратный флаг прерывания по чтению равен 0. То есть, последний байт был вычитан из регистра буфер. Либо он даже не устанавливался в 1, когда последний байт пришел в регистр

Не могу понять чем это все вызвано. Ведь если отправлено 1024 байта, то и прочитать шина должна была 1024 байта. Байт ведь не мог "потеряться". Или мог? В чем может быть причина такого поведения?
Повторюсь, ошибка проявляется крайне редко, в остальном алгоритм четко работает

Сообщение отредактировал avg33 - Aug 21 2018, 18:24
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- avg33   Не срабатывает прерывание при чтении по DMA   Aug 21 2018, 18:22
- - zombi   Цитата(avg33 @ Aug 21 2018, 21:22) Я обща...   Aug 21 2018, 18:42
|- - avg33   Цитата(zombi @ Aug 21 2018, 21:42) В Ваше...   Aug 21 2018, 18:55
- - zombi   Цитата(avg33 @ Aug 21 2018, 21:22) В реги...   Aug 21 2018, 19:13
|- - avg33   Цитата(zombi @ Aug 21 2018, 22:13) Раз зн...   Aug 21 2018, 19:57
|- - controller_m30   Цитата(avg33 @ Aug 21 2018, 22:57) 3. Обр...   Aug 21 2018, 20:43
|- - avg33   Цитата(controller_m30 @ Aug 21 2018, 23:4...   Aug 22 2018, 20:23
- - controller_m30   В чём может быть дело не знаю. Тем более не извест...   Aug 21 2018, 19:15
- - haker_fox   Почитайте мои пути про SPI + DMA. Там LPC4337, но ...   Aug 23 2018, 08:21
|- - avg33   Цитата(haker_fox @ Aug 23 2018, 11:21) По...   Sep 12 2018, 15:36
|- - jcxz   Цитата(avg33 @ Sep 12 2018, 18:36) спасиб...   Sep 12 2018, 19:34
|- - avg33   Цитата(jcxz @ Sep 12 2018, 22:34) Значит ...   Sep 12 2018, 20:31
|- - V_G   Цитата(avg33 @ Sep 13 2018, 06:31) Буду п...   Sep 12 2018, 23:44
|- - jcxz   Цитата(avg33 @ Sep 12 2018, 23:31) Да, ви...   Sep 13 2018, 05:46
|- - avg33   ЦитатаПрерывания (от периферийного блока) к работе...   Sep 13 2018, 13:18
|- - HardEgor   Цитата(avg33 @ Sep 13 2018, 20:18) Очень ...   Sep 14 2018, 08:43
||- - avg33   Цитата(HardEgor)Возможно при переводе перепутали п...   Sep 16 2018, 12:24
||- - jcxz   Цитата(avg33 @ Sep 16 2018, 15:24) А поци...   Sep 16 2018, 13:16
||- - HardEgor   Цитата(avg33 @ Sep 16 2018, 19:24) F2MC-1...   Sep 16 2018, 16:41
|- - jcxz   Цитата(avg33 @ Sep 13 2018, 16:18) Очень ...   Sep 14 2018, 10:02
|- - HardEgor   Цитата(jcxz @ Sep 14 2018, 17:02) Не обяз...   Sep 15 2018, 09:09
- - Herz   Господа! Прошу без грубостей. Если есть какие-...   Sep 16 2018, 14:06


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 15th June 2025 - 16:34
Рейтинг@Mail.ru


Страница сгенерированна за 0.01408 секунд с 7
ELECTRONIX ©2004-2016