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

 
 
 
Reply to this topicStart new topic
> NIOS-DMA-UART ?
TSURKOV
сообщение Feb 17 2012, 06:24
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 38
Регистрация: 1-11-05
Пользователь №: 10 385



Уважаемые коллеги помогите пожалуйста разобраться с бональной ошибкой. При организации взаимодействия NIOS-DMA-UART функция txchan = alt_dma_txchan_open("/dev/dma_0") возвращает нулевой адрес в указателе. Соответственно не работает и передача по DMA. По документации вроде все понятно, а результат отрицательный. Все устройства (NIOS DMA RAM UART) синтезированы на EP1C6. Память в SOPSbuilder как я только не пробовал крутить. Делал через одну – 4кб, делал RAM1 - 3кб (рабочая), RAM2 – 1кб (DMA), пытался реализовать и в одно и в двух портовом режиме. DMA молчит как убитый. Посоветуйте на что обратить внимание.
Спасибо.


http://files.mail.ru/I6ZQJJ?t=1[/img]
Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
barabek
сообщение Feb 17 2012, 06:32
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 540
Регистрация: 16-08-07
Из: Владивосток
Пользователь №: 29 831



Цитата(TSURKOV @ Feb 17 2012, 16:24) *
Уважаемые коллеги помогите пожалуйста разобраться с бональной ошибкой. При организации взаимодействия NIOS-DMA-UART функция txchan = alt_dma_txchan_open("/dev/dma_0") возвращает нулевой адрес в указателе. Соответственно не работает и передача по DMA. По документации вроде все понятно, а результат отрицательный. Все устройства (NIOS DMA RAM UART) синтезированы на EP1C6. Память в SOPSbuilder как я только не пробовал крутить. Делал через одну – 4кб, делал RAM1 - 3кб (рабочая), RAM2 – 1кб (DMA), пытался реализовать и в одно и в двух портовом режиме. DMA молчит как убитый. Посоветуйте на что обратить внимание.
Спасибо.


http://files.mail.ru/I6ZQJJ?t=1[/img]


Так а дебагером почему не получается отследить? Там же в пошаговом режиме можно пройтись и все понятно станет. Либо вообще забить на библиотеку и работать напрямую с регистрами DMA-контроллера. Там их всего-то. Я когда увидел описание на библиотеку сразу сдался sm.gif.
Go to the top of the page
 
+Quote Post
TSURKOV
сообщение Feb 17 2012, 06:43
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 38
Регистрация: 1-11-05
Пользователь №: 10 385



Цитата(barabek @ Feb 17 2012, 09:32) *
Так а дебагером почему не получается отследить? Там же в пошаговом режиме можно пройтись и все понятно станет. Либо вообще забить на библиотеку и работать напрямую с регистрами DMA-контроллера. Там их всего-то. Я когда увидел описание на библиотеку сразу сдался sm.gif.


Я так и делал.

IOWR_ALTERA_AVALON_DMA_STATUS(DMA_0_BASE, 0x00000000);
IOWR_ALTERA_AVALON_DMA_LENGTH(DMA_0_BASE,5);
IOWR_ALTERA_AVALON_DMA_RADDRESS(DMA_0_BASE,0x00001800);
IOWR_ALTERA_AVALON_DMA_WADDRESS(DMA_0_BASE,0x00001800);
IOWR_ALTERA_AVALON_DMA_CONTROL(DMA_0_BASE,9);
i = IORD_ALTERA_AVALON_DMA_STATUS(DMA_0_BASE);

DMA_STATUS возвращает -2, т.е. он занят. Такое впечатление, что UART не забирает данные.
Go to the top of the page
 
+Quote Post
Копейкин
сообщение Feb 17 2012, 07:45
Сообщение #4


Частый гость
**

Группа: Участник
Сообщений: 190
Регистрация: 7-11-07
Из: С-Петербург
Пользователь №: 32 134



Мне помнится не удалось DMA котроллером работать с обоими фиксированными адресами (адрес чтения и адрес записи).
Никак не желал работать.
Стоило сделать один из адресов инкрементируемым и всё прекрасно жило.
софт QII 9.1 sp2
Я тогда cделал на SGDMA и пользовал библиотеку.
Может у Вас то же самое?
Go to the top of the page
 
+Quote Post
TSURKOV
сообщение Feb 17 2012, 10:41
Сообщение #5


Участник
*

Группа: Участник
Сообщений: 38
Регистрация: 1-11-05
Пользователь №: 10 385



IOWR_ALTERA_AVALON_DMA_STATUS(DMA_0_BASE,0x0);
IOWR_ALTERA_AVALON_DMA_CONTROL(DMA_0_BASE,0x0);

IOWR_ALTERA_AVALON_DMA_RADDRESS(DMA_0_BASE,(alt_u32)&data[0]);
IOWR_ALTERA_AVALON_DMA_WADDRESS(DMA_0_BASE,UART_0_BASE);
IOWR_ALTERA_AVALON_DMA_LENGTH(DMA_0_BASE,8);


ch = ALTERA_AVALON_DMA_CONTROL_BYTE_MSK
| ALTERA_AVALON_DMA_CONTROL_GO_MSK
| ALTERA_AVALON_DMA_CONTROL_LEEN_MSK
| ALTERA_AVALON_DMA_CONTROL_WCON_MSK;

IOWR_ALTERA_AVALON_DMA_CONTROL(DMA_0_BASE,ch);


Я правильно понимаю, что в режиме передачи UART через DMA я указываю в RADDRESS - адрес памяти где хранятся передаваемые данные и он будет использоваться DMA контроллером для чтения памяти. А в WADDRESS я указываю физический адрес UART и он должен быть статичным при установке бита WCON. В этом случае физический блок UART должен соединяться с NIOS через master порт шины данных NIOS, помимо того, что UART еще соединен с master портом DMA. И это обязательно !?
Go to the top of the page
 
+Quote Post
Копейкин
сообщение Feb 17 2012, 11:57
Сообщение #6


Частый гость
**

Группа: Участник
Сообщений: 190
Регистрация: 7-11-07
Из: С-Петербург
Пользователь №: 32 134



В приведённом скриншоте системы, UART не соединён с мастером данных CPU.
Процессор тогда не может сконфигурировать UART и это неправильно.
WADDRESS должен указывать адрес регистра txdata (= UART_0_BASE + 1).
По моему должно быть так.
Go to the top of the page
 
+Quote Post
TSURKOV
сообщение Feb 17 2012, 13:06
Сообщение #7


Участник
*

Группа: Участник
Сообщений: 38
Регистрация: 1-11-05
Пользователь №: 10 385



Да вы правы. Я тоже уже к этому пришел. спасибо большое
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 21st July 2025 - 06:16
Рейтинг@Mail.ru


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