prussta
Участник-
Постов
28 -
Зарегистрирован
-
Посещение
Репутация
0 ОбычныйИнформация о prussta
-
Звание
Участник
- День рождения 05.12.1986
Контакты
-
Сайт
Array
-
ICQ
Array
Информация
-
Город
Array
-
Попробовали с en-valb на простом проекте, все отлично заработало. Внесли аналогичные изменения в основной проект, пока не работает, что то slave как то не корректно загружается, то ли bootloader, то ли qsys, завтра продолжим разбираться.
-
Добрый день! Делаю все как по шпаргалке от juvf http://juvf.narod.ru/, но у меня получается, что загрузчик загружается (в nios2-terminal я вижу заветную надпись "Now attempting to load and jump to the application"), но моя программа не стартует(( в чем дело может быть? Смотрю в дебаге код бутлоадера , там findImage() возвращает ноль, то есть entry_point = 0; А код моего приложения лежит в sdram с SDRAM_BASE 0x800000. Я так понимаю, что entry_point в этом случае никак не может быть рана 0 (( В чем дело? И еще, не могу найти в NIOSII EDS v.13.1 в настройки дебаггера "break at program entry". где эта галка находиться? или она как-то по другому стала называется? Ткните носом, пожалуйста))
-
Dmitriyspb, да Вы правы, что-то разрабатывать на ПЛИС приходится впервые, поэтому много темных мест)) и спаисбо за советы! да, знаю, я только обзорно знакома с аппаратными языками, поэтому и возникают "новичковые" вопросы) программировать fpga сама не буду(если что). А здесь же хотелось получить альтернативные идеи по общей организации системы, потому что мои идеи не удались. Я так понимаю, что без блока на fpga, организующего прием данных с SPI1 не обойтись, потому что если данные идут постоянно, то программа все время "висит" в обработчике прерывания по приему SPI1 и даже не выходит в основной цикл. ( Это я попробовала при помощи Niosа принимать) Хотя не совсем мне понятно почему так, ведь данные идут с частотой 30 Мгц, а процессор работает на 157МГц. Почему он не успевает выходить в основной цикл? В прерывании только считываю пришедшие данные. Неужели так много занимает это времени....хмм...
-
Да, подобное и нужно)) контроллер этот как реализовать? написать на аппаратном языке?
-
Dmitriyspb, а как вы предлагаете с порта SPI1 заполнять FIFO2? Есть варианты его заполнения без участия процессора? Даже если использовать DMA, то получается, что надо при приходе данных в регистр SPI1 нужно вызывать ф-ию alt_dma_rxchan_prepare(...), чтобы DMA передал эти данные в FIFO2 . Можно ли как-нибудь это обойти? В идеале хотелось бы так настроить передачу, чтобы данные приходя в SPI1 сразу бы записывались в FIFO2, и проц при этом не беспокоить.
-
Да, иногда приходится и этим заниматься))
-
Ах, вот оно что! Спасибо, Дмитрий, за разъяснения. Я просто не пишу на аппаратных языках, поэтому и забыла про этот вариант и рассматривала стандартные компоненты, которые уже есть. Но теперь все стало понятно. Будем обдумывать этот вариант. :)
-
Так я и так реализую на fpga, использую софтпроцессор NiosII для управления всей подключенной переферией - SPI, FIFO, DMA и т.д. Делаю на Cyclone III. Или я не так понимаю? Поясните, пожалуйста
-
я правильно понимаю, что этот блочек это просто небольшая функция, которую будет выполнять тот же NiosII в основном цикле?
-
Передача данных из SPI в SPI
prussta опубликовал тема в Работаем с ПЛИС, области применения, выбор
Всем доброго времени суток! Подскажите, как лучше организовать систему. Система в целом выглядит так: Есть софт процессор NiosII - он выполняет основные задачи: отвечает на запросы пользователя, принимает какие-то данные, обрабатывает их, выдает ответы и прочее. Также есть два SPI: SPI1 - он принимает данные из вне как только вся система запустилась и SPI2 в который мне нужно эти данные (определенное количество) выплюнуть (этот SPI от Ethernet платки). Получается, что мне нужно постоянно гнать данные из SPI1 в SPI2. Причем, иногда мне нужно в этот поток данных добавлять еще байт своих данных. Как это можно организовать с минимальным участием проца? Чтобы он успевал делать свою основную работу и меньше отвлекался на эту передачу? Может есть какая-то переферия для таких задач? Подскажите куда посмотреть? Частота работа Niosa 100MГц, а данные на SPI1 приходят с частотой 24Мгц. Пока у меня рисуется стандартный вариант: по прерыванию на прием по SPI1 я через DMA записываю поступившие данные в память, как только пришло необходимое кол-во байт, выставляю флаг. И в основном цикле программы по этому флагу отправляю эти данные в SPI2. -
DMA+SPI
prussta опубликовал тема в Работаем с ПЛИС, области применения, выбор
Добрый день, уважаемые!Помогите советом, пожалуйста! Хочу добиться чтобы данные из он-чип мемори через DMA поступали в spi. В Qsys подключаю read master DMA на control port on-chip memory, а write master на control port spi, также оба контрольных порта идут на NiosII. SPI - в режиме master. Функция передачи следующая volatile alt_32 transmitdone=0; void transmit_done() { transmitdone=1; } /* ************************************************** *********************** */ /* The following routines is for memory-to-Peripheral processing. */ /* ************************************************** *********************** */ void copy_mem_to_p(const char* dma_name, void* start_addr, //Here,start_addr is the "Memory" void* desti_addr, //and desti_addr is the "Peripheral" alt_32 transfer_count, alt_32 transfer_mode) { alt_32 flag; alt_dma_txchan txchan; if((txchan=alt_dma_txchan_open(dma_name))==NULL) { printf("\n Failed to open transmit channel(range-to-1)!\n"); exit(1); } alt_dma_txchan_ioctl(txchan,transfer_mode,NULL); alt_dma_txchan_ioctl(txchan,ALT_DMA_TX_ONLY_ON,desti_addr); if((flag=alt_dma_txchan_send(txchan,start_addr,transfer_count,transmit_done,NULL))<0) { printf("\n Failed to post transmit request(range-to-1)!\n"); exit(1); } while(!transmitdone); transmitdone=0; alt_dma_txchan_ioctl(txchan,ALT_DMA_TX_ONLY_OFF, NULL); alt_dma_txchan_close(txchan); } //---------------- int main(void) { //в память записываю данные, которые хочу отправить по SPI //.... //...... copy_mem_to_p(DMA_MEM2SPI_NAME, (void*)DMA_DSP_MEMORY_BASE, //Here,start_addr is the "Memory" (void*)SPI_FINISH_BASE, //and desti_addr is the "Peripheral" 4, ALT_DMA_SET_MODE_32); } Проблема в том, что в transmit_done() захожу -флаг выставляю, а в окне памяти смотрю адрес SPI_FINISH_BASE - пусто. Я правильно понимаю, что как только в tx_registr spi приходят данные он их сразу отправляет сам, не нужно больше никаких стимуляций? )) Из spi в память через DMA у меня получилось передать - все хорошо, а тут не понимаю, что не так... -
ethernet
prussta ответил NSergeevich тема в Работаем с ПЛИС, области применения, выбор
Предварительно, работать буду с сообщениями UDP. То есть я правильно понимаю, что мне достаточно работать с UDP пакетами, а прикладной уровень вообще не задействовать? Я еще не углублялась в даташит на Wiznetовскую микросхему, поэтому представляю обмен пакетами следующим образом (прошу, поправить, если не так)) ): например я хочу отправить команду ХХ12345, для этого : пишу ip адрес получателя, порт получателя и подсчитываю кол-во байт моей команды - записываю и пишу саму команду. Этот пакет и отправляю. Правильно? -
ethernet
prussta ответил NSergeevich тема в Работаем с ПЛИС, области применения, выбор
Уважаемые, подскажите! Есть задача управлять с компа устройством на плис при помощи Ethernet. Соотвественно, есть определенный набор команд, которые должно понимать устройство и давать определенные ответы на них. Выход в интернет не нужен. Для реализации хочу использовать стек TCP/IP. Причем канальный, сетевой и транспортный уровень будет организован аппаратно при промощи ethernet модуля Wiznet. Внимание вопрос! Что использовать в качестве прикладного уровня для управление устройством? Должна ли я использовать уже стандартные протоколы (есть возможност использовать SNMP) или я могу назначить свой порт и отправлять необходимые мне команды "как есть"? Или это не так просто, как я представляю? -
Спасибо! Буду пробовать!
-
То есть я правильно понимаю, что для одной кнопки у меня должно быть две картинки: 1ая - это когда кнопка в нормальном положении, и 2ая - когда в нажатом (ну там затемненная или с тенью) ?