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

fifo + microblaze прерывания

Здравствуйте! Подскажите как лучше решить след задачу:

есть fifo + microblz + dma + ddr

Необходимо "аппаратно" наполнить fifo и программно c помощью mcrblz записать данные в DDR.

 

Пока делаю так: вешаю FIFO на AXI для процессора (DMA) c одной стороны, а с другой вывожу ноги наружу.

Наполняю FIFO и по сигналу full процессор должен дать команду DMA на трансфер данных в ДДР.

 

Вот тут и загвоздка: как сигнал full сделать сигналом прерывания для процессора?

 

 

FIFO сделал через coregen и в XPS повесил на шину через интерф AXI4.

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


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

можно добавить еще порт GPIO с прерыванием, и сигнал завести как бы на его ногу, так не?

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


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

можно добавить еще порт GPIO с прерыванием, и сигнал завести как бы на его ногу, так не?

 

хорошая идея. Еще посматриваю в сторону сигнала s_axi_rready для интерфейса. Вроде как по нему процессор получает информацию о готовности канала чтения

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


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

есть мнение что нечего лезть в шину на прикладном уровне.

Надо поглядеть нет ли у контроллера ДМА сигнала запуска, его еще логично было бы заюзать, а вот какие-то внутренние сигналы шины ИМХО не верно. Но еще раз ИМХО, может у кого есть и другое аргументированное мнение...

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


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

Приветствую!

 

хорошая идея. Еще посматриваю в сторону сигнала s_axi_rready для интерфейса. Вроде как по нему процессор получает информацию о готовности канала чтения

 

Вы не на тех "девушек" посматриваете :)

 

Если уж так надо такую колбасу колбасить - в смысле через прерывании программно запускать DMA, то в составе любой системы Microblaze уже есть контроллер прерывания. На этот контроллер заводятся все прерывания в системе (таймер, UART, DMA, тот же GPIO). По аналогии заводите туда еще один сигнал, подключаете к выводу FULL (в соответствующей полярности), пишете функцию инициализации и обработки соответствующего прерывания и вуаля - начинаете периодически терять ваши данные на входе в фифо :( Поскольку как быстро это прерывание обработается прогнозировать хоть и можно но тяжело - а данным может быть ну уж очень невтерпеж! Тогда уж лучше цепляйте сигнал прерывания на AFULL.

 

Правильнее наверное подключить источник ваших данных непосредственно на вход stream DMA (черз фифо или непосредственно) и уже получать прерывание по окончанию пересылки заданного количества данных в память.

 

Успехов! Rob.

 

 

 

 

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


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

Правильнее наверное подключить источник ваших данных непосредственно на вход stream DMA (черз фифо или непосредственно) и уже получать прерывание по окончанию пересылки заданного количества данных в память.

 

большое спасибо за совет. Действительно лезть в шину это я погорячился... :laughing:

Про подачу данных непосредственно на вход ДМА обязательно посмотрю.

 

Вообще в идеале задача решалась бы так: на шину вешать ядро FIFO с выходом в сторону процессора (ДМА) , а вход выводить наружу. Тут я до конца не разобрался: в xps ядра FIFO такой возможности не предоставляют... (из двух ядер одно для ethernet, другое для ДМА (скорее всего то о чем Вы говорите))

 

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


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

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

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

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

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

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

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

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

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

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