|
|
  |
NIOS для начинающих |
|
|
|
Apr 19 2010, 11:59
|

Местный
  
Группа: Свой
Сообщений: 285
Регистрация: 10-12-04
Из: Earth
Пользователь №: 1 437

|
Итак, все заработало как я и ожидал. Программка и Система была простейшая - бегущий светодиод (т.е., On-chip RAM, PIO-out, контроллер EPCS, System ID, CPU). Все работало и зашивалось в EPCS на ура. Далее я решил поиграться с прерываниями. Всего-лишь в существующую систему добавил PIO-вход (кнопочки), настроил в нем прерывания и автоназначил их в SoPC-билдере. Компилю, зашиваю, делаю в Nios II IDE простейший проект для отработки прерывания, успешно его компилирую, а далее при попытке загрузить его в плату получаю следующее фи: Код Using cable "USB-Blaster [USB-0]", device 1, instance 0x00 Pausing target processor: OK Reading System ID at address 0x0000A020: verified Initializing CPU cache (if present) OK
Downloading 00004000 ( 0%) Downloading 00009820 (96%) Downloaded 13KB in 0.2s (65.0KB/s)
Verifying 00004000 ( 0%) Verifying 00009820 (96%) Verify failed between address 0x9820 and 0x99C7 Leaving target processor paused Насколько я понял из альтеровских и ниосовских форумов, такая ошибка возникает как правило при неверном pinout, невыполнении таймингов для внешней памяти (но у меня-то вся память - OnChip...), наводках по линии ТCK у JTAG. В чем может быть дело? - Pinout (Assignments для всей платы одним файлом) взят с фирменного диска, работал с ним уже сто раз на не-ниосовских проектах - все разведено нормально. - Никакой внешней памяти кроме EPCS я не использую. Более того, раньше с ней все работало (до того как я добавил в систему PIO-вход). - Timing Analyzer, конечно, поругивается варнингами про отрицательные слэки, но раньше же все работало. Неужели из-за добавления простого порта все так уехало? - Вроде как, судя по адресам - это как раз флэшка. Но какого хрена она тогда раньше нормально работала? П.С.: на всякий прилагаю скриншот системы П.П.С.: клок, если что, беру не с PLL, а напрямую с источника на плате (50 МГц).
Сообщение отредактировал spectr - Apr 19 2010, 12:01
Эскизы прикрепленных изображений
|
|
|
|
|
Apr 19 2010, 12:49
|

Местный
  
Группа: Свой
Сообщений: 285
Регистрация: 10-12-04
Из: Earth
Пользователь №: 1 437

|
Вот отчет компилятора IDE: CODE **** Build of configuration Debug for project test_project ****
make -s all includes Compiling main.c... ../main.c: In function `init_button_pio': ../main.c:34: warning: implicit declaration of function `alt_irq_register' ../main.c: At top level: ../main.c:39: warning: return type of 'main' is not `int' ../main.c: In function `main': ../main.c:41: warning: unused variable `value' Linking test_project.elf... Info: (test_project.elf) 13 KBytes program size (code + initialized data). Info: 3120 Bytes free for stack + heap. Creating generated_app.sh... Post-processing to create ram_memory.hex Hardware simulation is not enabled for the target SOPC Builder system. Skipping creation of hardware simulation model contents and simulation symbol files. (Note: This does not affect the instruction set simulator.) Post-processing to create epcs_flash_controller_boot_rom.flash Build completed in 27.984 seconds Вот простыня исходника: CODE #include "system.h" #include "altera_avalon_pio_regs.h" #include "alt_types.h"
//-------------------------------------------------------------- void delay(value) { int i=0; for(i=0;i<value;i++); }
//-------------------------------------------------------------- static void handle_button_interrupts(void* context, alt_u32 id) { volatile int* edge_capture_ptr = (volatile int*) context; *edge_capture_ptr = IORD_ALTERA_AVALON_PIO_EDGE_CAP(BUTTONS_BASE); IOWR_ALTERA_AVALON_PIO_EDGE_CAP(BUTTONS_BASE,0); IOWR_ALTERA_AVALON_PIO_IRQ_MASK(BUTTONS_BASE,0xF); }
//-------------------------------------------------------------- //-------------------------------------------------------------- //-------------------------------------------------------------- //-------------------------------------------------------------- //-------------------------------------------------------------- volatile int edge_capture;
static void init_button_pio() { void* edge_capture_ptr = (void*) &edge_capture; IOWR_ALTERA_AVALON_PIO_IRQ_MASK(BUTTONS_BASE,0xF); IOWR_ALTERA_AVALON_PIO_EDGE_CAP(BUTTONS_BASE,0); alt_irq_register(BUTTONS_IRQ,edge_capture_ptr,handle_button_interrupts); }
//-------------------------------------------------------------- void main(void) { int value = 0x00000001; init_button_pio(); while (1) { if(edge_capture!=0) { switch(edge_capture) { case 0x1: IOWR_ALTERA_AVALON_PIO_DATA(LEDS_BASE , 0x1); break;
case 0x2: IOWR_ALTERA_AVALON_PIO_DATA(LEDS_BASE , 0x2); break;
case 0x4: IOWR_ALTERA_AVALON_PIO_DATA(LEDS_BASE , 0x4); break;
case 0x8: IOWR_ALTERA_AVALON_PIO_DATA(LEDS_BASE , 0x8); break; default: break; } } } Если это важно: в свойствах системной библиотеки параметры Program Memory и ReadOnly Memory установлены на On-Chip память. Еще одно уточнение - процессор по сбросу и исключению уходит в память EPCS. Но в системной библиотеке, как я уже писал выше память программ и ROM-память указывают на OnChip-память. Может из-за этого косячить? Во! Когда я изменил в свойствах системной библиотеки указание памяти программ и ROM с OnChip на EPCS, то компилятор выдал-таки ошибку, причем как раз с теми адресами, которые он выдавал при верификации: Код **** Build of configuration Debug for project test_project ****
make -s all includes Compiling main.c... ../main.c: In function `init_button_pio': ../main.c:34: warning: implicit declaration of function `alt_irq_register' ../main.c: At top level: ../main.c:39: warning: return type of 'main' is not `int' ../main.c: In function `main': ../main.c:41: warning: unused variable `value' Linking test_project.elf... /cygdrive/c/altera/81/nios2eds/bin/nios2-gnutools/H-i686-pc-cygwin/bin/../lib/gcc/nios2-elf/3.4.6/../../../../nios2-elf/bin/ld: region epcs_flash_controller is full (test_project.elf section .text). Region needs to be 8908 bytes larger. /cygdrive/c/altera/81/nios2eds/bin/nios2-gnutools/H-i686-pc-cygwin/bin/../lib/gcc/nios2-elf/3.4.6/../../../../nios2-elf/bin/ld: address 0xa2b4 of test_project.elf section .epcs_flash_controller is not within region epcs_flash_controller /cygdrive/c/altera/81/nios2eds/bin/nios2-gnutools/H-i686-pc-cygwin/bin/../lib/gcc/nios2-elf/3.4.6/../../../../nios2-elf/bin/ld: section .rodata [00009820 -> 0000984b] overlaps section .exceptions [00009820 -> 000099c7] /cygdrive/c/altera/81/nios2eds/bin/nios2-gnutools/H-i686-pc-cygwin/bin/../lib/gcc/nios2-elf/3.4.6/../../../../nios2-elf/bin/ld: section .rwdata [0000984c -> 0000a2b3] overlaps section .exceptions [00009820 -> 000099c7] collect2: ld returned 1 exit status make: *** [test_project.elf] Error 1 Build completed in 13.921 seconds Похоже что ему мало памяти...
Сообщение отредактировал Omen_13 - May 13 2010, 15:50
Причина редактирования: Оформление кода.
|
|
|
|
|
Apr 19 2010, 13:26
|
Местный
  
Группа: Свой
Сообщений: 351
Регистрация: 17-09-05
Из: Москва
Пользователь №: 8 660

|
Я немного не понял, что Вы делаете
Когда при запуске он пытается загрузить программу и пишет: Downloading 00004000 ( 0%) Downloading 00009820 (96%) Downloaded 13KB in 0.2s (65.0KB/s), он грузит ее как бы в ОЗУ и неудивительно, что при попытке верификации EPCS он выдает ошибки. Для программирования EPCS надо использовать Flash Programmer.
По сути, область памяти от 0x9800, выделенная на EPCS контроллер - это загрузчик, который перекачивает из EPCS в ОЗУ содержимое, зашитое Flash Programmer'ом в EPCS. Тогда при включении системы загрузчик сам перекачает код из EPCS в те секции памяти, которые надо инициализировать (т.е., секции, которые лежат во встроенном ОЗУ, внешнем ОЗУ и т.д.).
Поэтому и код, и exception вектор в настройках ядра процессора кладите в ram_memory, а reset - на EPCS контроллер. Тогда при reset код из EPCS будет загружаться загрузчиком, а при загрузке с кабеля при Run - загружаться в ram_memory через JTAG.
P.S. Это вроде как в теории, сам с системами на кристалле, использующими EPCS не работал.
|
|
|
|
|
Apr 30 2010, 07:45
|
Местный
  
Группа: Свой
Сообщений: 246
Регистрация: 28-05-08
Из: г. Ижевск
Пользователь №: 37 893

|
Добрый день, возникла проблема с средой Eclipse: Стал изучать NIOSII и начал с этих уроков (на которые ссылается сама альтера) http://www.nioswiki.com/Embedded_Systems_Lab благо плата CII starter kit была в наличии выполнил согласно их даташиту все шаги но на последнем возникла проблема в том что непонял как залить програму в процессор и запустить, т.е. не смог выполнить: Цитата In the previous module you already downloaded the .SOF, so the FPGA is primed and ready to run the software application. Keeping the USB cable still plugged in to the DE1 board, you will download the application via the USB-JTAG link. To run the software project on the Nios II processor: • Right click on the software project directory and choose Run As and Nios II Hardware. • If the Run Configurations window appears: Under the Project Tab: Verify Project and elf file name. Under the Target Connection Tab: Select Refresh Connections Select Run т.к. фактически нет в Run Configurations пунктов отвечающих за JTAG програматор и отладчик. Как его включить так чтоб он в среде програмирования появился?
Причина редактирования: Оформление цитаты. Omen_13
|
|
|
|
|
May 6 2010, 06:25
|
Местный
  
Группа: Свой
Сообщений: 246
Регистрация: 28-05-08
Из: г. Ижевск
Пользователь №: 37 893

|
спасибо, ещё вопрос: как освободить усб бластер занятый в среде ниойса для квартуса не выгружая самой среды ниойс еклипс? пробовал нажимать на красный квадрат остановки отладки/запуска не помогает. Т.е. заливаеш в начале по джитагу прошивку из квартуса через байт бластер, потом запускаеш ниойс эклипс, заливаеш через него программу, останавливаеш выполнение, возврощаешся в квартус и пробуеш перезалить иную версию а он выдаёт: Цитата Info: Started Programmer operation at Thu May 06 10:27:01 2010 Error: Application Nios2 on 192.168.1.14 is using the target device Error: Operation failed Info: Ended Programmer operation at Thu May 06 10:27:01 2010 и пока среду разработки для ниойса вообще не закроеш квартус будет выдавать такую ошибку.
Сообщение отредактировал Omen_13 - May 13 2010, 15:52
Причина редактирования: Оформление цитаты. Omen_13
|
|
|
|
|
  |
3 чел. читают эту тему (гостей: 3, скрытых пользователей: 0)
Пользователей: 0
|
|
|