Kas keegi on gnuarm tööriistadega interrupti tööle saanud, ise kasutan versiooni 4.1.1 mis peaks kõige uuem olema.
prose SHARP LH75401
Mida iganes ma ka ei prooviks ikka on tulemuseks et irku nagu toimub, vastav flag on püsti kus vaja kui debugeriga vaadata. Ainult et irku sisu ei toimu ja asi tegeleb kesteab millega kus. Isegi mitte resetti ei toimu. Samuti ei tule ta sellest kunagi välja isegi kui debugeriga irku flag clearida.
Kui prooviks hüpata mainis sinna irku adrele mida debuger näitab siis kõik toimib. Tundub nagu compiler ei saaks aru et "return form interrupt" mitte " return from sub function"
Googlest otsinud juba 2 päeva, katsetanud kõike mida leidsin aga tulemus sama.
katsetasin siis nii:
void IRQ_Handler (void) __attribute__ ((interrupt("IRQ")));
void IRQ_Handler (void)
{
while (1) {UART0_DR='u';}
}
int Main(void){
..
VICIntSelect = 0x10000000;
VICDefVectAddr = (unsigned long) IRQ_Handler;
VICVectAddr10 = (unsigned long) IRQ_Handler;
VICVectCnt10 = UART0_INT + 32;
VICIntEnable =0x10000000;
...
}
prose SHARP LH75401
Mida iganes ma ka ei prooviks ikka on tulemuseks et irku nagu toimub, vastav flag on püsti kus vaja kui debugeriga vaadata. Ainult et irku sisu ei toimu ja asi tegeleb kesteab millega kus. Isegi mitte resetti ei toimu. Samuti ei tule ta sellest kunagi välja isegi kui debugeriga irku flag clearida.
Kui prooviks hüpata mainis sinna irku adrele mida debuger näitab siis kõik toimib. Tundub nagu compiler ei saaks aru et "return form interrupt" mitte " return from sub function"
Googlest otsinud juba 2 päeva, katsetanud kõike mida leidsin aga tulemus sama.
katsetasin siis nii:
void IRQ_Handler (void) __attribute__ ((interrupt("IRQ")));
void IRQ_Handler (void)
{
while (1) {UART0_DR='u';}
}
int Main(void){
..
VICIntSelect = 0x10000000;
VICDefVectAddr = (unsigned long) IRQ_Handler;
VICVectAddr10 = (unsigned long) IRQ_Handler;
VICVectCnt10 = UART0_INT + 32;
VICIntEnable =0x10000000;
...
}
Comment