Миландр

Ключевым подразделением нашей компании
является Центр Проектирования интегральных микросхем
Текущее время: 2019-авг-24 20:34

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 5 ] 
Автор Сообщение
 Заголовок сообщения: Не работает DMA на прием
СообщениеДобавлено: 2018-дек-11 21:02 
Не в сети

Зарегистрирован: 2017-окт-09 19:10
Сообщения: 4
У кого-нибудь удалось завести в микроконтроллерах серии 1986 DMA UART или SSP на прием ?
В лучшем случае работает только пример. Попытки принять часть данных обычным способом, а часть через DMA или принять не полный буфер не увенчались успехом, ни в UART, ни в SSP.
Принимает какую-то дребедень. Или байты перемешаны или нули.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Не работает DMA на прием
СообщениеДобавлено: 2018-дек-12 09:52 
Не в сети

Зарегистрирован: 2017-апр-26 14:51
Сообщения: 389
Откуда: ПКК "Миландр"
"Работа DMA по приему SPI в 1986ВЕ92У" - https://startmilandr.ru/doku.php/prog:dma:dma_spi_rx
"Работа DMA по передаче и приему SPI в 1986ВЕ1Т" - https://startmilandr.ru/doku.php/prog:dma:dma_spi_txrx

Теория - "Начальные сведения о DMA" - https://startmilandr.ru/doku.php/prog:dma:dma_intro

_________________
Отдел технической поддержки support@milandr.ru


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Не работает DMA на прием
СообщениеДобавлено: 2019-июн-01 07:17 
Не в сети

Зарегистрирован: 2014-окт-10 18:12
Сообщения: 28
2Vasiliy
В примерах на startmilandr и в библиотечных функциях Ethernet для 1986ВЕ1Т везде, где используют программный запрос на DMA, не используют прерывания, а опрашивают состояние в цикле while{}. При программных запросах прерывания от DMA вообще не работают?

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Не работает DMA на прием
СообщениеДобавлено: 2019-июн-03 09:55 
Не в сети

Зарегистрирован: 2017-апр-26 14:51
Сообщения: 389
Откуда: ПКК "Миландр"
_Desh_ писал(а):
2Vasiliy
В примерах на startmilandr и в библиотечных функциях Ethernet для 1986ВЕ1Т везде, где используют программный запрос на DMA, не используют прерывания, а опрашивают состояние в цикле while{}. При программных запросах прерывания от DMA вообще не работают?


В Ethernet для DMA нет необходимости в прерывании, проще отслеживать копирование по флагу. В проектах на startmilandr прерывания используются, смотрите обработчик DMA_IRQHandler (void), но тут DMA работает по аппаратным запросам. При работе с FIFO блоков UART/SPI смысла в программных запросах я не вижу.

_Desh_ писал(а):
Потому что из своих давних экспериментов у меня сложилось впечатление, что это именно так (не было прерывания по завершении передачи по программному запросу, хотя первая передача совершенно точно была успешной, видел в отладчике), и если для канала DMA не задано соответствующее прерывание от какого-либо периферийного блока (а в случае с программным запросом только так и бывает), никаких прерываний от DMA мы не получим. Это так?


Цикл DMA, упрощенно, - это скопировать отсюда туда столько то слов. Для передачи одного слова необходимо чтобы к каналу DMA был подан запрос SReq (Single Request). Это может быть программный запрос, либо запрос от периферии - например от какого либо FIFO_RX что в нем появилось слово, либо от FIFO_TX что в нем освободилось место под новое слово. Соответственно канал DMA на один запрос SReq скопирует одно слово. Если же поставить режим AutoRequest, то первый же поданный SReq приведет к копированию всех заданных слов. Когда заказанное количество скопировано возникает прерывание об окончании цикла DMA. ПО должно переинициализировать канал, либо отключить его обработку в регистре CHNL_REQ_MASK.

Обратите внимание, что при окончании цикла DMA сбрасывается бит в CHNL_ENABLE, поэтому для перезапуска канала необходимо не только обновить управляющее слово в структуре канала, но и выставить бит в CHNL_ENABLE.

https://github.com/StartMilandr/MDR_Pac ... s/DMA_Test
Здесь есть пример DMA_Soft, обработка копирования тоже идет по флагам, но если SHOW_DMA_IRQ_BEHAVIOUR ==1, то факт возникновения прерывания отображается на светодиоде по прерыванию DMA. Это в подтверждение того, что прерывания от DMA происходят независимо от того, дергают ли канал запросы от периферии или от ПО.

_________________
Отдел технической поддержки support@milandr.ru


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Не работает DMA на прием
СообщениеДобавлено: 2019-июн-03 19:49 
Не в сети

Зарегистрирован: 2014-окт-10 18:12
Сообщения: 28
Vasiliy писал(а):
Это в подтверждение того, что прерывания от DMA происходят независимо от того, дергают ли канал запросы от периферии или от ПО.

Большое спасибо за ответ.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 5 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB