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

 
 
 
Reply to this topicStart new topic
> А DMA можно использовать в прерываниях ?
DASM
сообщение Apr 8 2010, 14:29
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 3 644
Регистрация: 28-05-05
Пользователь №: 5 493



в смысле захожу в прерывание от своей перефирии, и в нем alt_dma_rxchan_ioctl(rx, ALT_DMA_RX_ONLY_ON, alt_remap_uncached(DM9000A_IF_0_BASE + 4, 4));
Чего-то как-то не получается пока =(
Написано "Whether this function is thread-safe, or can be called from an ISR, depends on the underlying
device driver. In general it should be assumed it is not the case." - но что-то както DMA прием никогда не заканчивается =(
Go to the top of the page
 
+Quote Post
vadimuzzz
сообщение Apr 8 2010, 14:58
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 2 291
Регистрация: 21-07-05
Пользователь №: 6 988



можно, конечно. надо только определиться, использовать синхронные или асинхронные транзакции. а это у вас весь код DMA-транзакции? как-то маловато.
Go to the top of the page
 
+Quote Post
DASM
сообщение Apr 9 2010, 06:39
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 3 644
Регистрация: 28-05-05
Пользователь №: 5 493



не совсем понял, что значит асинхронные. Вот пришло мне прерывание от MAC микрули - ну я и пускаю по DMA данные из нее в память. Если бы в DMA кода было бы больше - то он был бы не нужен unsure.gif
Go to the top of the page
 
+Quote Post
vadimuzzz
сообщение Apr 9 2010, 06:56
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 2 291
Регистрация: 21-07-05
Пользователь №: 6 988



Цитата(DASM @ Apr 9 2010, 13:54) *
не совсем понял, что значит асинхронные. Вот пришло мне прерывание от MAC микрули - ну я и пускаю по DMA данные из нее в память. Если бы в DMA кода было бы больше - то он был бы не нужен unsure.gif

асинхронные - это когда кинул запрос на транзакцию и, не дожидаясь ее завершения, передал управление процу дальше, можно снова давать запрос на транзакцию. синхронные же в вашем случае будут эквивалентны прямому чтению процессором из микрухи в обработчике прерывания. насчет того, что мало: а alt_dma_rxchan_prepare() разве не надо делать?
Go to the top of the page
 
+Quote Post
DASM
сообщение Apr 9 2010, 07:00
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 3 644
Регистрация: 28-05-05
Пользователь №: 5 493



а, это есть alt_dma_rxchan_prepare (rx, alt_remap_uncached(0x4000000,0x1000), sz, dma_done, NULL)
пока что синхронные - понять что оно вообще работает, но увы пока лыжи не едут
Go to the top of the page
 
+Quote Post
vadimuzzz
сообщение Apr 9 2010, 07:06
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 2 291
Регистрация: 21-07-05
Пользователь №: 6 988



выкладывайте код и картинку из SOPC
Go to the top of the page
 
+Quote Post
DASM
сообщение Apr 9 2010, 09:10
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 3 644
Регистрация: 28-05-05
Пользователь №: 5 493



кода много.. проблема в том, что сама DMA транзакция происходит, регистры DMA указывают, что передача завершена и тп, но не вызывается callback функция, которая сигнализирует о завершении прерывания. Может она тоже на IRQ базе вызыватся ? А прерывания то запрещены...
Go to the top of the page
 
+Quote Post
vadimuzzz
сообщение Apr 9 2010, 11:20
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 2 291
Регистрация: 21-07-05
Пользователь №: 6 988



Цитата(DASM @ Apr 9 2010, 16:25) *
А прерывания то запрещены...

в смысле глобально? а зачем? глушите только то прерывание, в обработчике которого находитесь.
Go to the top of the page
 
+Quote Post
DASM
сообщение Apr 9 2010, 11:27
Сообщение #9


Гуру
******

Группа: Свой
Сообщений: 3 644
Регистрация: 28-05-05
Пользователь №: 5 493



я вообще ничего не глушу. Разве находясь в обработчике прерывания - остальные автоматом не запрещаются ?
Go to the top of the page
 
+Quote Post
vadimuzzz
сообщение Apr 9 2010, 11:54
Сообщение #10


Гуру
******

Группа: Свой
Сообщений: 2 291
Регистрация: 21-07-05
Пользователь №: 6 988



Цитата(DASM @ Apr 9 2010, 18:42) *
я вообще ничего не глушу. Разве находясь в обработчике прерывания - остальные автоматом не запрещаются ?

по умолчанию HAL (если вы им пользуетесь) их блокирует на время выполнения ISR. но можно использовать Nested Hardware Interrupts. хотя в вашем случае это и не нужно, наверное. вообще ситуация неоднозначная: если вам надо пакеты по одному обрабатывать, то смысла в DMA вообще мало, если же нужно принимать по несколько пакетов до начала их обработки, то нужна очередь пакетов, а обработчик прерывания будет из себя представлять запрос на транзакцию без ожидания ее завершения. соответственно, прерывания от DMA будут приходить когда попало и это тоже надо учитывать, как и возможность переполнения очереди пакетов.
Go to the top of the page
 
+Quote Post
DASM
сообщение Apr 9 2010, 12:00
Сообщение #11


Гуру
******

Группа: Свой
Сообщений: 3 644
Регистрация: 28-05-05
Пользователь №: 5 493



ну это все ясно, просто интересен сам факт - вызывается ли callback когда запрещены прерывания
Go to the top of the page
 
+Quote Post
vadimuzzz
сообщение Apr 9 2010, 12:06
Сообщение #12


Гуру
******

Группа: Свой
Сообщений: 2 291
Регистрация: 21-07-05
Пользователь №: 6 988



Цитата(DASM @ Apr 9 2010, 19:15) *
ну это все ясно, просто интересен сам факт - вызывается ли callback когда запрещены прерывания

не должен, потому что сначала блокирующий ISR должен выполниться, затем нужный ISR (к которому callback относится), а уж потом callback. это при использовании встроенного контроллера прерываний.
Go to the top of the page
 
+Quote Post

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

 


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


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