у меня вообще железки нету... я чувствую себя ущербным каким-то...
Цитата
Как ускоряется процесс записи в переферийные регистры (использую 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