TSURKOV 0 17 февраля, 2012 Опубликовано 17 февраля, 2012 · Жалоба Уважаемые коллеги помогите пожалуйста разобраться с бональной ошибкой. При организации взаимодействия 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] Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
barabek 0 17 февраля, 2012 Опубликовано 17 февраля, 2012 · Жалоба Уважаемые коллеги помогите пожалуйста разобраться с бональной ошибкой. При организации взаимодействия 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-контроллера. Там их всего-то. Я когда увидел описание на библиотеку сразу сдался :). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
TSURKOV 0 17 февраля, 2012 Опубликовано 17 февраля, 2012 · Жалоба Так а дебагером почему не получается отследить? Там же в пошаговом режиме можно пройтись и все понятно станет. Либо вообще забить на библиотеку и работать напрямую с регистрами DMA-контроллера. Там их всего-то. Я когда увидел описание на библиотеку сразу сдался :). Я так и делал. 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 не забирает данные. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Копейкин 0 17 февраля, 2012 Опубликовано 17 февраля, 2012 · Жалоба Мне помнится не удалось DMA котроллером работать с обоими фиксированными адресами (адрес чтения и адрес записи). Никак не желал работать. Стоило сделать один из адресов инкрементируемым и всё прекрасно жило. софт QII 9.1 sp2 Я тогда cделал на SGDMA и пользовал библиотеку. Может у Вас то же самое? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
TSURKOV 0 17 февраля, 2012 Опубликовано 17 февраля, 2012 · Жалоба 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. И это обязательно !? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Копейкин 0 17 февраля, 2012 Опубликовано 17 февраля, 2012 · Жалоба В приведённом скриншоте системы, UART не соединён с мастером данных CPU. Процессор тогда не может сконфигурировать UART и это неправильно. WADDRESS должен указывать адрес регистра txdata (= UART_0_BASE + 1). По моему должно быть так. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
TSURKOV 0 17 февраля, 2012 Опубликовано 17 февраля, 2012 · Жалоба Да вы правы. Я тоже уже к этому пришел. спасибо большое Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться