[an error occurred while processing this directive]
2VB, Или снова о DMA NIOS (для данной конфы скорее ОФФ)
(«Телесистемы»: Конференция «Программируемые логические схемы и их применение»)

миниатюрный аудио-видеорекордер mAVR

Отправлено Major 07 сентября 2004 г. 07:31

Вот и добрался до ДМА, и пришел в полный а..й.
По порядку:
1. В доке "NIOS II Software Developer's Handbook" на странице 4-18 приведена картинка трех базовых типов операций ДМА, из которой видно, что если я желаю собирать из переферии и писать в память то мне необходим DMA RECEIVE CHANNEL.
2. В указаном выше файле на странице 10-11, 10-12, а так же в файле n2cpu_nii5v1.pdf на странице 6-6 приведена таблица запросов для dma_ioctl, из которой следует:
------------------------------------------------------------------
ALT_DMA_RX_STREAM_ON: Set a DMA receiver into streaming mode. In this case, data is read continuously from a single location. The “arg” parameter specifies the address to read from.
------------------------------------------------------------------
ALT_DMA_TX_STREAM_ON: Set a DMA tranmitter into streaming mode. In this case, data is written continuously to a single location. The “arg” parameter specifies the address to write to.
------------------------------------------------------------------

По русски как я понял: устанавливая запрос ALT_DMA_RX_STREAM_ON при вызове alt_dma_rxchan_ioctl (следует из п1) передавая аргументом BASE адрес моей переферии драйвер должен установить что я желаю читать и константного адреса, и писать в память с инкрементом адреса.

Но что бы видим при вызове alt_dma_rxchan_ioctl?
Происходит вызов alt_avalon_dma_ioctl, в теле которой мы видим следующий код:

switch (req)
{
case ALT_DMA_TX_STREAM_ON:
if (!(priv->flags & ALT_AVALON_DMA_RX_STREAM))
{
IOWR_ALTERA_AVALON_DMA_RADDRESS (priv->base, (alt_u32) arg);
priv->flags |= ALT_AVALON_DMA_TX_STREAM;
priv->launch = alt_avalon_dma_launch_rxonly;
}
else
{
status = -EIO;
}
break;
case ALT_DMA_TX_STREAM_OFF:
priv->flags &= ~ALT_AVALON_DMA_TX_STREAM;
priv->launch = alt_avalon_dma_launch_bidir;
break;
case ALT_DMA_RX_STREAM_ON:
if (!(priv->flags & ALT_AVALON_DMA_TX_STREAM))
{
IOWR_ALTERA_AVALON_DMA_WADDRESS (priv->base, (alt_u32) arg);
priv->flags |= ALT_AVALON_DMA_RX_STREAM;
priv->launch = alt_avalon_dma_launch_txonly;
}
else
{
status = -EIO;
}
break;

И что же это за пи..число такое????
Как так что адрес переданный в запросе записывают в адрес destanation?

Утомил наверное, но может кто поможет составить логическу картину работы с ДМА ниоса.
Насколько хорош сам ниос, настолько хренова у него документация. Хорошо хоть что весь код доступен.


Составить ответ  |||  Конференция  |||  Архив

Ответы


Отправка ответа

Имя (обязательно): 
Пароль: 
E-mail: 

Тема (обязательно):
Сообщение:

Ссылка на URL: 
Название ссылки: 

URL изображения: 


Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru