|
некоторые вопросы по написанию софта для NIOS II |
|
|
|
Oct 3 2007, 08:11
|

Частый гость
 
Группа: Свой
Сообщений: 154
Регистрация: 16-08-07
Из: Москва
Пользователь №: 29 829

|
при создании проекта в nios2ide, я создаю пустой проект, какие файлы мне необходимы? кроме *.ptf... и где их взять... скажить где читать ничего найти не могу и я понять не могу зачем "System ID Peripheral" из документации ясно то, что ничего не ясно Цитата The system ID peripheral safeguards against accidentally downloading software compiled for a different Nios II system. If the system includes the system ID peripheral, the Nios II IDE prevents you from downloading programs compiled for a different system. каков этой ID смысл, скажите пжлста??? p.s. если честно то я перестал что-либо понимать... ситуация такая вчера т.е. во вторник я по туториалу "tt_nios2_hardware_tutorial.pdf" всё сделал и мне квартус7 выдал 494 варнинга... сегодня при той же процедуре мне квартус выдал 544 варнинга... что за чудеса???
--------------------
все косяки, даже о которых не знает сам разработчик, - мои
|
|
|
|
3 страниц
1 2 3 >
|
 |
Ответов
(1 - 33)
|
Oct 3 2007, 09:59
|

Частый гость
 
Группа: Свой
Сообщений: 154
Регистрация: 16-08-07
Из: Москва
Пользователь №: 29 829

|
создал пустой проект... написал пару строчек Код #include <stdio.h> #include "system.h"
int main(){ } как теперь обратиться, к примеру, к pio и где можно найти вот эту структуру Код typedef volatile struct { int np_piodata; // read/write, up to 32 bits int np_piodirection; // write/readable, up to 32 bits, // 1->output bit int np_piointerruptmask; // write/readable, up to 32 bits, // 1->enable interrupt int np_pioedgecapture; // read, up to 32 bits, // cleared by any write } np_pio; это из ds_nios_pio.pdf ...
Сообщение отредактировал Mozart - Oct 3 2007, 10:06
--------------------
все косяки, даже о которых не знает сам разработчик, - мои
|
|
|
|
|
Oct 3 2007, 13:09
|
Местный
  
Группа: Свой
Сообщений: 347
Регистрация: 16-02-06
Из: г.Николаев, Украина
Пользователь №: 14 377

|
Посмотрите на ug_nios2_ide_help.pdf из http://www.altera.com/literature/lit-ug.jsp Там, кажется, несколько более систематизировано, хотя тоже..
|
|
|
|
|
Oct 3 2007, 14:00
|

Частый гость
 
Группа: Свой
Сообщений: 154
Регистрация: 16-08-07
Из: Москва
Пользователь №: 29 829

|
там создаётся проект Цитата "Select the Count Binary project template in the Select Project Template list" это всё хорошо, а дальше что?... вот мне допустим эти мигающие лампочки уже... ладно допустим я что-то удалю... и допустим это будет работать, но вопрос как мне пользоваться периферией, которую я сам подцеплю...как мне её инициализировать и где? как мне к примеру обратиться к таймеру? вот тут Код int main(void) { int t = 0; // Set timer for 1 second na_timer1->np_timerperiodl = (short)(nasys_clock_freq & 0x0000ffff); na_timer1->np_timerperiodh = (short)((nasys_clock_freq >> 16) & 0x0000ffff); // Set timer running, looping, no interrupts na_timer1->np_timercontrol = np_timercontrol_start_mask + np_timercontrol_cont_mask; // Poll timer forever, print once per second while(1) { if(na_timer1->np_timerstatus & np_timerstatus_to_mask) { printf("A second passed! (%d)\n",t++); // Clear the to (timeout) bit na_timer1->np_timerstatus = 0; // (any value) } } } всё просто... но это если я просто вставлю в проект не работает... значит нужно где-то объявить структуру, или знать как она называется... в каком месте на неё можно посмотреть??? структура выглядит так Код typedef volatile struct { int np_timerstatus; // read only, 2 bits (any write to clear TO) int np_timercontrol; // write/readable, 4 bits int np_timerperiodl; // write/readable, 16 bits int np_timerperiodh; // write/readable, 16 bits int np_timersnapl; // read only, 16 bits int np_timersnaph; // read only, 16 bits } np_timer; из файла ds_nios_timer.pdf... p.s. существует ли в природе вообще понятный мануал, о том как писать проекты с нуля к примеру?
--------------------
все косяки, даже о которых не знает сам разработчик, - мои
|
|
|
|
|
Oct 3 2007, 15:09
|
carpe manana
  
Группа: Свой
Сообщений: 321
Регистрация: 2-06-05
Пользователь №: 5 659

|
Цитата(Mozart @ Oct 3 2007, 18:00)  всё просто... но это если я просто вставлю в проект не работает... значит нужно где-то объявить структуру, или знать как она называется... в каком месте на неё можно посмотреть??? Всякие штуки для работы с периферией лежат в библиотеках, и доступны из проекта my_project_syslib/Device Drivers [Sopc Builder]/altera_avalon_timer/sdk/timer_struct.h И когда вы таймер встраиваете в билдере, драйверы должны цепляться или руками через include пропишите.
|
|
|
|
|
Oct 3 2007, 15:53
|

Частый гость
 
Группа: Свой
Сообщений: 154
Регистрация: 16-08-07
Из: Москва
Пользователь №: 29 829

|
Цитата(RHnd @ Oct 3 2007, 18:57)  А где вы вообще берете все эти ds_nios_*.pdf? Я в свое время прочитал главу про встроенную переферию и с тех пор пользуюсь описанными там макросами и функциями. Например, для pio: #include altera_avalon_pio.h - могу и ошибиться в точных названиях void main() { IOWR_ALTERA_AVALON_PIO_DATA(LED_BASE,0xAA) - на leds выводится число 0xAA. }
Расскажите, где лежат все эти структуры? http://www.altera.com/literature/ds/ds_nios_timer.pdfвот ссылочка... всё... частично разобрался... приятно...
Сообщение отредактировал Mozart - Oct 3 2007, 15:28
--------------------
все косяки, даже о которых не знает сам разработчик, - мои
|
|
|
|
|
Oct 4 2007, 10:08
|

Частый гость
 
Группа: Свой
Сообщений: 154
Регистрация: 16-08-07
Из: Москва
Пользователь №: 29 829

|
вот такой ещё вопросец Код void MyPIO_ISR(int context);
// Main program
int main(void) { np_pio *pio = na_button_pio; . . . pio->np_pioedgecapture = 0; // clear any existing IRQ condition pio->np_piodirection = 0; // all input pio->np_piointerruptmask = 0xff; // they all generate irq's! na_button_pio - это как я понимаю название pio... если я так запишу но присвою своё название pio, которое я указал при создании проца, указателю *pio, то он выдаст ошибку, а вот если я присвою начальный адрес pio, то всё будет ок... в чём косяк, где я не прав? з.ы. к сожалению железки пока нету, проверить не на чем  ещё можно вот так записать Код volatile np_pio *pio_l = "/dev/pio"; вроде работает, и симулируется...
Сообщение отредактировал Mozart - Oct 4 2007, 09:54
--------------------
все косяки, даже о которых не знает сам разработчик, - мои
|
|
|
|
|
Oct 4 2007, 10:45
|
Местный
  
Группа: Свой
Сообщений: 347
Регистрация: 16-02-06
Из: г.Николаев, Украина
Пользователь №: 14 377

|
Цитата(id_gene @ Oct 3 2007, 18:09)  Всякие штуки для работы с периферией лежат в библиотеках, и доступны из проекта my_project_syslib/Device Drivers [Sopc Builder]/altera_avalon_timer/sdk/timer_struct.h
И когда вы таймер встраиваете в билдере, драйверы должны цепляться или руками через include пропишите. Где можно найти информацию (источники) об освоении и применении в своих проектах всех этих системных библиотек? Похоже, что без них не обойтись, иначе ситуация похожа на хождение (или езду на велосипеде) по очень большой темной комнате без GPS.
|
|
|
|
|
Oct 5 2007, 09:26
|
carpe manana
  
Группа: Свой
Сообщений: 321
Регистрация: 2-06-05
Пользователь №: 5 659

|
Цитата(Волощенко @ Oct 4 2007, 14:45)  Где можно найти информацию (источники) об освоении и применении в своих проектах всех этих системных библиотек? Не знаю. В описании компонента периферии может быть что-то есть. Можно просто поковырять исходники. Можно примеры посмотреть. Я, честно говоря, очень мало пользовался периферией.
|
|
|
|
|
Oct 5 2007, 10:43
|
Местный
  
Группа: Свой
Сообщений: 347
Регистрация: 16-02-06
Из: г.Николаев, Украина
Пользователь №: 14 377

|
Цитата(id_gene @ Oct 5 2007, 12:26)  Не знаю. В описании компонента периферии может быть что-то есть. Можно просто поковырять исходники. Можно примеры посмотреть. Я, честно говоря, очень мало пользовался периферией. Ситуация - out, такого со мной еще не было... Выполнил симуляцию Nios II на hello_wolrd_small, потратив несколько дней жизни (старт-кита пока еще нет). Теперь хочу поработать с timer в режиме симуляции в Instruction Set Simulator с выводом на Console, чтобы сделать что-то самому и разобраться... Документации скачал горы, но не могу найти, где описано, как правильно связывать между собой SoPC и С/С++ в прямом и обратном направлении, хотя бы с тем же таймером. Нужно пару маленький примеров, с небольшими разъяснениями, но где их найти в этой массе PDF…
|
|
|
|
|
Oct 5 2007, 12:35
|
carpe manana
  
Группа: Свой
Сообщений: 321
Регистрация: 2-06-05
Пользователь №: 5 659

|
Ну если вы еще этого не сделали, то нужно скачать комплект доков с сайта альтеры разом (первая ссылка) или по отдельности. В комплекте в разделе ug есть "getting started", а в hb/nios2 есть handbooks. Какие-то примеры периферии есть в третьем хандбуке. Связь простая - вы создаете систему в СОПС-билдере, получаете ptf файл. Потом в НИОС ИДЕ создаете проект nios c++ application в той же папке, он (ИДЕ) цепляет PTF, видит там периферию и ее адреса. В обратном направлении не работает. Или я не понял, что вы хотели. С ISS я не работал. Вы же сами писали, что PIO не поддерживается ISS-ом. Думаете, таймер поддерживается? Или вообще какая-либо периферия?
|
|
|
|
|
Oct 9 2007, 09:03
|
Местный
  
Группа: Свой
Сообщений: 347
Регистрация: 16-02-06
Из: г.Николаев, Украина
Пользователь №: 14 377

|
Цитата(Mozart @ Oct 9 2007, 09:45)  таймер в ISS не работает, проверено... У меня пока тот же результат, но есть утверждения, что должен работать (вот два): 1. http://forum.niosforum.com/forum/index.php?showtopic=322The iss supports simulation of the following peripherals: . memory (ram/rom) . avalon timer . avalon jtag uart . avalon uart 2. http://forum.niosforum.com/forum/index.php?showtopic=5418"If any unsupported components are present in the system, the ISS displays a warning message at the start of the run or debug session. The ISS ignores writes to unsupported components during simulation. Reading from an unsupported component during simulation returns zero. suported component list: -All Nios II processor cores: Nios II/f, Nios II/s, Nios II/e -Interval timer core -JTAG UART core -UART core -On-chip memory (RAM/ROM) -SDRAM controller core -IDT71V416 SRAM (1 MB SRAM mounted on Nios development board) -EPCS serial flash controller core, with limitations." And here is aditonal limitations of ISS: Simulations are functional only, and not cycle-accurate. The ISS does not model Nios II instruction and data caches, and will not find bugs involving cache initialization, flushing, or bypassing. The ISS does not support reading or writing tightly coupled memories connected to the Nios II processor. The ISS does not support custom instructions. 3. А это взято из Nios II IDE HelpInstruction Set Simulator (ISS) The Nios II instruction set simulator (ISS) allows you to execute and debug Nios II programs in simulation on a host PC. The ISS simulates software executing on a Nios II processor core connected to a limited set of peripherals. The simulation is at the functional level, and all operations complete in one cycle. It is not a cycle-accurate simulation, and therefore performance benchmarking on the ISS gives optimistic results. On a modern Windows PC, the ISS runs at about 300K instructions per second when simulating code on the fast example design provided in the Nios II Embedded Design Suite. The ISS can produce an execution trace. The trace output appears in the Console view, and you can optionally redirect it to a file. It is common to output trace data to a file, because trace tends to produce a large amount of information. ISS-supported SOPC Builder components: - All Nios II processor cores: Nios II/f, Nios II/s, Nios II/e - Interval timer core - JTAG UART core - UART core - On-chip memory (RAM/ROM) - SDRAM controller core - IDT71V416 SRAM (1 MB SRAM mounted on Nios development board) - EPCS serial flash controller core, with limitations. If any unsupported components are present in the system, the ISS displays a warning message at the start of the run or debug session. The ISS ignores writes to unsupported components during simulation. Reading from an unsupported component during simulation returns zero. SOPC Builder system requirements: The Nios II ISS simulates a Nios II processor system described by an SOPC Builder system file (.ptf). The Nios II ISS makes the following assumptions about the SOPC Builder system: - SOPC Builder successfully generated the .ptf file. - All memories with initialized content are initialized from one .elf file. - The system contains exactly one Nios II CPU. The ISS does not support multiprocessor systems. - The system has one clock domain. - The system has one address map. (This is true for all Nios II systems created by SOPC Builder.) ISS limitations: - Simulations are functional only, and not cycle-accurate. - The ISS does not model Nios II instruction and data caches, and will not find bugs involving cache initialization, flushing, or bypassing. - The ISS does not support reading or writing tightly coupled memories connected to the Nios II processor. - The ISS does not support custom instructions. - The ISS models the Nios II ienable register as a complete 32-bit register. In hardware (both on a target board and in HDL simulation), all bits associated with unused interrupt inputs are always zero. - The EPCS Serial Flash Controller core only supports boot-from-flash behavior. If the SOPC Builder system contains an EPCS Serial Flash Controller core, the simulation does not model the full behavior of the EPCS device. The ISS only models the first 1 Kbytes of the controller's register map as a block of ROM. In the case that the processor resets to the EPCS controller address (the typical boot-from-flash scenario), the simulation relies on the fact that RAMs are pre-initialized. Therefore, the controller's boot-loader does not need to copy code from EPCS memory to RAM. Instead, the controller simply jumps directly to RAM.
|
|
|
|
|
Oct 10 2007, 10:16
|

Частый гость
 
Группа: Свой
Сообщений: 154
Регистрация: 16-08-07
Из: Москва
Пользователь №: 29 829

|
техническая документация нас спасёт... Цитата The Timeout Period setting determines the initial value of the periodl and periodh registers. When the Writeable period setting is enabled, a processor can change the value of the period by writing periodl and periodh. When Writeable period (see below) is off, the period is fixed and cannot be updated at runtime. сейчас проверю это утверждение... у меня такой код получился Код volatile np_timer *timer = TIMER_BASE;
void InitTimer1(void) { timer->np_timerperiodl = 0xffff; timer->np_timerperiodh = 0xffff; timer->np_timercontrol = np_timercontrol_start_mask + np_timercontrol_cont_mask; }
void delay(void) { while(timer->np_timerstatus & np_timerstatus_to_mask); timer->np_timerstatus = 0; } int main(void){ while(1) { delay(); printf(" ok "); } return 0; } как я понимаю при изменении timer->np_timerperiodl и timer->np_timerperiodh вывод "ок" должен быть с различной скоростью... может быть в железе так и есть.. но при симуляции т.е. ISS ничего подобного.... в сопс билдере я изменил период с мС до С....
Сообщение отредактировал Mozart - Oct 10 2007, 10:40
--------------------
все косяки, даже о которых не знает сам разработчик, - мои
|
|
|
|
|
Oct 11 2007, 09:12
|

Частый гость
 
Группа: Свой
Сообщений: 154
Регистрация: 16-08-07
Из: Москва
Пользователь №: 29 829

|
это я действительно забыл инит вставить... вставил всё равно не пашет... зато появился варнинг... Цитата Warning : SOPC Builder system component pio_led is not supported by the simulato r. Simulation may be incorrect if your software attempts to access it но это ничего страшного... мдаа...
--------------------
все косяки, даже о которых не знает сам разработчик, - мои
|
|
|
|
|
Oct 15 2007, 13:12
|

Частый гость
 
Группа: Свой
Сообщений: 154
Регистрация: 16-08-07
Из: Москва
Пользователь №: 29 829

|
у меня вообще железки нету... я чувствую себя ущербным каким-то... Цитата Как ускоряется процесс записи в переферийные регистры (использую IOWR()) - сейчас интервал составляет аж 40 тактов из-за вызовов функций, на самом быстром Ниосе - переферийное устройство Slave Avalon я уже на такие вещи натыкаюсь и не раз... железки нету чтобы проверить, но если это повально у всех... то НИОС мягко говоря не оч хорошо... меня nios2 ide добивает потихоньку... то симуляция идёт нормально то тормозит со страшной силой... то debug as nios ISS запускается, то посылает на три буковы... чаще посылает... исходничек Код int main(void){ InitPioLed(); InitTimer1(); InitTimerM(); // printf("timer->np_timerperiodl = %d \n", timer->np_timerperiodl); // printf("timer->np_timerperiodh = %d \n", timer->np_timerperiodh); // printf("timer->np_timercontrol = %d \n", timer->np_timercontrol); //usleep(10000); unsigned char DataInPort = 101; DataInPort = IORD_ALTERA_AVALON_TIMER_STATUS(TIMER_BASE); printf("%d \n", DataInPort); //usleep(10000); IOWR_ALTERA_AVALON_TIMER_STATUS(TIMER_BASE, 0x3); printf("%d \n", IORD_ALTERA_AVALON_TIMER_STATUS(TIMER_BASE)); //usleep(10000); while(1) { //delay(); // printf(" timer->np_timersnapl = %d ", timer->np_timersnapl); // printf(" timer->np_timersnaph = %d ", timer->np_timersnaph); // printf(" timer->np_timerstatus = %d \n", timer->np_timerstatus); // while(timer->np_timerstatus & np_timerstatus_to_mask); //led_pio->np_piodata = DataInPort; //delay(); DelayM(); printf(" ok \n"); DataInPort = IORD_ALTERA_AVALON_TIMER_STATUS(TIMER_BASE); printf("%d \n", DataInPort); usleep(10000); printf("%d \n", IORD_ALTERA_AVALON_TIMER_STATUS(TIMER_BASE)); usleep(10000); } return 0; } Код int main(void){ 0x00000310 <main>: addi sp,sp,-12 0x00000314 <main+4>: stw ra,8(sp) 0x00000318 <main+8>: stw fp,4(sp) 0x0000031c <main+12>: mov fp,sp InitPioLed(); 0x00000320 <main+16>: call 0x2e4 <InitPioLed> InitTimer1(); 0x00000324 <main+20>: call 0x200 <InitTimer1> InitTimerM(); 0x00000328 <main+24>: call 0x238 <InitTimerM> // printf("timer->np_timerperiodl = %d \n", timer->np_timerperiodl); // printf("timer->np_timerperiodh = %d \n", timer->np_timerperiodh); // printf("timer->np_timercontrol = %d \n", timer->np_timercontrol); usleep(10000); 0x0000032c <main+28>: movi r4,10000 0x00000330 <main+32>: call 0xd60 <usleep> unsigned char DataInPort = 101; 0x00000334 <main+36>: movi r2,101 0x00000338 <main+40>: stb r2,0(fp) DataInPort = IORD_ALTERA_AVALON_TIMER_STATUS(TIMER_BASE); 0x0000033c <main+44>: movui r2,32800 0x00000340 <main+48>: ldwio r2,0(r2) 0x00000344 <main+52>: stb r2,0(fp) printf("%d \n", DataInPort); 0x00000348 <main+56>: ldbu r5,0(fp) 0x0000034c <main+60>: movhi r4,0 0x00000350 <main+64>: addi r4,r4,10136 0x00000354 <main+68>: call 0x3dc <printf> usleep(10000); 0x00000358 <main+72>: movi r4,10000 0x0000035c <main+76>: call 0xd60 <usleep> IOWR_ALTERA_AVALON_TIMER_STATUS(TIMER_BASE, 0x3); 0x00000360 <main+80>: movui r3,32800 0x00000364 <main+84>: movi r2,3 0x00000368 <main+88>: stwio r2,0(r3) printf("%d \n", IORD_ALTERA_AVALON_TIMER_STATUS(TIMER_BASE)); 0x0000036c <main+92>: movui r2,32800 0x00000370 <main+96>: ldwio r5,0(r2) 0x00000374 <main+100>: movhi r4,0 0x00000378 <main+104>: addi r4,r4,10136 0x0000037c <main+108>: call 0x3dc <printf> usleep(10000); 0x00000380 <main+112>: movi r4,10000 0x00000384 <main+116>: call 0xd60 <usleep> while(1) { //delay(); // printf(" timer->np_timersnapl = %d ", timer->np_timersnapl); // printf(" timer->np_timersnaph = %d ", timer->np_timersnaph); // printf(" timer->np_timerstatus = %d \n", timer->np_timerstatus); // while(timer->np_timerstatus & np_timerstatus_to_mask); //led_pio->np_piodata = DataInPort; //delay(); DelayM(); 0x00000388 <main+120>: call 0x274 <DelayM> printf(" ok \n"); 0x0000038c <main+124>: movhi r4,0 0x00000390 <main+128>: addi r4,r4,10144 0x00000394 <main+132>: call 0x3dc <printf> DataInPort = IORD_ALTERA_AVALON_TIMER_STATUS(TIMER_BASE); 0x00000398 <main+136>: movui r2,32800 0x0000039c <main+140>: ldwio r2,0(r2) 0x000003a0 <main+144>: stb r2,0(fp) printf("%d \n", DataInPort); 0x000003a4 <main+148>: ldbu r5,0(fp) 0x000003a8 <main+152>: movhi r4,0 0x000003ac <main+156>: addi r4,r4,10136 0x000003b0 <main+160>: call 0x3dc <printf> usleep(10000); 0x000003b4 <main+164>: movi r4,10000 0x000003b8 <main+168>: call 0xd60 <usleep> printf("%d \n", IORD_ALTERA_AVALON_TIMER_STATUS(TIMER_BASE)); 0x000003bc <main+172>: movui r2,32800 0x000003c0 <main+176>: ldwio r5,0(r2) 0x000003c4 <main+180>: movhi r4,0 0x000003c8 <main+184>: addi r4,r4,10136 0x000003cc <main+188>: call 0x3dc <printf> usleep(10000); 0x000003d0 <main+192>: movi r4,10000 0x000003d4 <main+196>: call 0xd60 <usleep> 0x000003d8 <main+200>: br 0x388 <main+120> вот дизасм...
Сообщение отредактировал Mozart - Oct 15 2007, 13:28
--------------------
все косяки, даже о которых не знает сам разработчик, - мои
|
|
|
|
|
Oct 15 2007, 13:33
|

Частый гость
 
Группа: Свой
Сообщений: 154
Регистрация: 16-08-07
Из: Москва
Пользователь №: 29 829

|
Цитата(Manfred @ Oct 15 2007, 17:27)  Где дизасм можно найти?)
Я задержки между выставлениями данных смотрю в модел симе открываешь nios2ide потом жмёшь кнопочку debug, выбираешь nios II ISS, чисто теоретически у тебя всё проходит хорошо, тебя перекидывают на debug и справа там есть disasm.... если вдруг нету, то window->show view это я так делал, может быть как-то по другому мона... хз...
Сообщение отредактировал Mozart - Oct 15 2007, 13:34
--------------------
все косяки, даже о которых не знает сам разработчик, - мои
|
|
|
|
|
Oct 16 2007, 09:35
|

Участник

Группа: Участник
Сообщений: 54
Регистрация: 29-08-07
Из: Красногорск
Пользователь №: 30 128

|
Цитата(Mozart @ Oct 15 2007, 17:33)  открываешь nios2ide потом жмёшь кнопочку debug, выбираешь nios II ISS, чисто теоретически у тебя всё проходит хорошо, тебя перекидывают на debug и справа там есть disasm.... если вдруг нету, то window->show view это я так делал, может быть как-то по другому мона... хз... Спасибо - я давно в дебаг не заглядывал сразу моделирование запускал) - чтоб он быстрее работал надо оптимизацию ставить тогда данные из массива во внешнее устройство записываются за 3-5 тактов Не видел ли где файл асемблеровского листинга? Тот листинг, что в дебаге у меня почему-то не полный, не до конца программы Не скажет ли кто, что надо сделать, чтобы можно было симулировать программу с самостоятельно сделаным устройством на шину авалон в симуляторе ISS? в Модел Симе работа устройства симулируется правильно
|
|
|
|
|
Oct 30 2007, 09:43
|
Местный
  
Группа: Свой
Сообщений: 347
Регистрация: 16-02-06
Из: г.Николаев, Украина
Пользователь №: 14 377

|
Цитата(Mozart' @ Oct 9 2007, 09:45)  таймер в ISS не работает, проверено... Цитата(Волощенко @ Oct 9 2007, 13:03)  У меня пока тот же результат, но есть утверждения, что должен работать (вот два): Все-таки таймер симулируется в ISS. Ниже текст программы с выводом на Console состояния изменяющегося таймера. Вот первые строки, что видны на Console:Hello from Nios II! 00000000, 00000646, 00000dad, 00001582, 00001dc4, 00002644, 00002eb8, 000 03784, 0000401e, 0000487a, 00005168, 00005a02, 00006274, 00006b14, 000073 bc, 00007cb6, 000085c4, 00008eba, 00009806, 0000a0ca, 0000a9b2, 0000b2bc, А это программа:#include "sys/alt_stdio.h" //----------------------------- #include "alt_types.h" #include "system.h" //----------------------------- #include "altera_avalon_timer_regs.h" //all for timer //----------------------------- int alt_timestamp_start(void) { void* base = TIMER_BASE; { IOWR_ALTERA_AVALON_TIMER_CONTROL (base,ALTERA_AVALON_TIMER_CONTROL_STOP_MSK); IOWR_ALTERA_AVALON_TIMER_PERIODL (base,0xFFFF); IOWR_ALTERA_AVALON_TIMER_PERIODH (base,0xFFFF); IOWR_ALTERA_AVALON_TIMER_CONTROL (base,ALTERA_AVALON_TIMER_CONTROL_START_MSK); } return 0; } alt_u32 alt_timestamp(void) { alt_u32 lower; alt_u32 upper; void* base = TIMER_BASE; { IOWR_ALTERA_AVALON_TIMER_SNAPL (base, 0); lower = IORD_ALTERA_AVALON_TIMER_SNAPL(base); upper = IORD_ALTERA_AVALON_TIMER_SNAPH(base); return (0xFFFFFFFF - ((upper << 16) | lower)); } } //----------------------------- int main() {alt_u32 a; a=alt_timestamp_start(); alt_putstr("Hello from Nios II!\n"); printf("%08x, ", a); while (1){a=alt_timestamp(); printf("%08x, ", a);}; return 0; }
|
|
|
|
|
Nov 7 2007, 14:39
|

Частый гость
 
Группа: Свой
Сообщений: 154
Регистрация: 16-08-07
Из: Москва
Пользователь №: 29 829

|
вот я сейчас читаю документацию на этот таймер и там написано Цитата The TO (timeout) bit is set to 1 when the internal counter reaches zero. Once set by a timeout event, the TO bit stays set until explicitly cleared by a master peripheral. Write zero to the status register to clear the TO bit. вот мой код... Код #include "C:\altera\71\quartus\sopc_builder\components\altera_avalon_pio\sdk\pio_struct.h" #include "C:\altera\71\quartus\sopc_builder\components\altera_avalon_timer\sdk\timer_struct.h"
void InitTimer0(void) { na_timer0->np_timercontrol = np_timercontrol_stop_mask; na_timer0->np_timerperiodl = 0x0000; na_timer0->np_timerperiodh = 0x01F4; na_timer0->np_timercontrol = np_timercontrol_cont_mask|np_timercontrol_start_mask; }
int main() { //if (alt_avalon_sysid_test()) { InitTimer0(); InitPio(); unsigned char a = 0x01; while(1) { //CountTimer0(); while (!(na_timer0->np_timerstatus & (1 << 0))); na_timer0->np_timerstatus = 0; na_pio->np_piodata = a++; } } } если честно мне только не нравися прописывать такие длинные пути.... как от этого уйти? эмулировал всё на доске... ещё не получается запускать Debug ISS он раз через раз запускается, нашёл где-то про индексирование, но после индексации тоже не всегда запускается.... надо где-нить что-нить прописывать?
Сообщение отредактировал Mozart - Nov 7 2007, 15:29
--------------------
все косяки, даже о которых не знает сам разработчик, - мои
|
|
|
|
|
Nov 20 2007, 07:38
|
Группа: Участник
Сообщений: 10
Регистрация: 22-03-07
Пользователь №: 26 400

|
Здравствуйте! Подскажите пожалуйста как отладить обработчик прерывания в NIOS IDE? Отладка программы ведется на реальном железе (т.е. hardware debug mode), при запуске программы без IDE (т.е. старт после сброса) программа корректно выполняет обработчик прерывания (загораются светодиодики). Если начинать отлаживать по шагам, при возникновении прерывания (прерывание выставляется по записи в регистр) дебагер не входит в обработчик, а просто продолжает выполнять программу далее (причем в этом случае некоторые значения регистров устройства вычитываются неправильно), и заветные светодиодики не загораются. Помогите плиз разобраться.
|
|
|
|
|
Dec 5 2007, 14:13
|
Группа: Участник
Сообщений: 10
Регистрация: 22-03-07
Пользователь №: 26 400

|
Цитата(Stewart Little @ Nov 29 2007, 19:20)  По шагам отлаживать вход в обработчик - не фонтан. Установите точку останова в обработчике прерывания. По достижению этого останова продолжайте отлаживать обработчик по шагам. БОЛЬШОЕ СПАСИБО, помогло!!!
|
|
|
|
|
Feb 2 2009, 09:16
|

Лентяй
     
Группа: Свой
Сообщений: 2 203
Регистрация: 11-10-04
Из: Санкт-Петербург
Пользователь №: 843

|
Цитата(slog @ Feb 1 2009, 20:29)  Как узнать размер полученной программы? Т.е. сколько получилось в байтах. Никаких файлов отчёта или листингов от линкера не обнаружил и не нашёл где можно включить их генерацию. Да и на ассемблерный листинг хотелось бы глянуть. Отчет линкера выводится в консоль. Там указывается, сколько кода получилось в байтах. Посмотрите вот эту тему : http://electronix.ru/forum/index.php?showtopic=45936и еще вот эту демонстрашку : http://www.artlebedev.ru/tools/technogrett...e-introduction/Много вопросов по эклипсу разрешится  Цитата(slog @ Feb 1 2009, 20:29)  Сейчас программа выполняется из onchip памяти, но её мало. Зато к FPGA подключено мно-о-ого внешней памяти. Каким образом программу для отладки можно залить через JTAG во внешнюю память а потом запустить на выполнение? Для заливки исполняемого кода во внешнюю память нужно следующее : - ядро nios'а должно иметь jtag-debug модуль; - вектор сброса ниоса должен указывать на эту память; - в свойствах библиотеки проекта сегменты кода и ридонли-данных (.text и .rodata) должны быть размещены в этой памяти; - микросхема должна быть сконфигурирована соответствующим хардверным проектом. Если все это сделано, то в Nios IDE в меню Run выбираем пункт Run..., далее NiosII Hardware, указываем тип загрузочного кабеля, и заливаем код.
--------------------
Чтобы слова не расходились с делом, нужно молчать и ничего не делать...
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|