W mim projekcie używałem przerwań IRQ z timera0 i wszystko ładnie działało. Jako, że tych przerwań jest naprawdę sporo, procesor traci dużo czasu na wywołanie przerwania, dlatego postanowiłem zrobić przerwania FIQ. Moim przewodnikiem jest książka luciana bryndza.
przerwanie wygląda tak:
włączenie przerwań, wygląda tak:
obsługa timera 0:
nic nie przerabiałem po przejscu z IRQ w timerze0 a sądzę ze gdzieś w nim jest błąd bo gdy podczas uruchamiania przerwań, zmienie na to przerwania sie zainicjują(32 to nie zainicjowany timer1, timer0 to 16), w przeciwnym wypadku program dojdzie tylko do wysłania do jako, że nie mam żadnego LCD wysyłam sobie po RS na kompa różne dane 'diagnostyczne' w powyższym kodzie jest właśnie wysłanie na ekran L3, będącego znacznikiem dokąd dochodzi program.
to juz moje drugie podejście do tematu po dłuższej przerwie i ciągle nie mogę przeskoczyć tego przerwania
pomóżcie proszę
edit:
znalazłem też stary post Freddie chopin'a gdzie opisywany był podobny problem, jednak mój make file ma optymalizacje 0 tego z thumbem też nie ma
przerwanie wygląda tak:
void FiqTimerHandler(void) __attribute__ ((interrupt("FIQ")));
void FiqTimerHandler(void)
{
// obsługa przerwania
//Kasuj zrodlo przerwania
T0IR = T0IR_MR0;
}
włączenie przerwań, wygląda tak:
//Zalaczenie przerwania
T0IR = T0IR_MR0;
VICIntSelect |= TIMER0_VIC;
Uart0NIPuts("L3\r\n");
VICIntEnable = TIMER0_VIC;
Uart0NIPuts("L4\r\n");
//Zalacz FIQ
enable_fiq();
Uart0NIPuts("L5\r\n");
obsługa timera 0:
//Licznik zlicza impulsy z czestotliwoscia 15Hz
T0PR = 17900;
//Gdy warunek spelniony zeruj Timer i zglaszaj przerwanie
T0MCR |= T0MCR_Interrupt_on_MR0 | T0MCR_Reset_on_MR0;
//Przeladowanie licznika co..
T0MR0 = 15;
//Zeruj licznik i preskaler
T0TCR = T0TCR_Counter_Reset;
//Zalacz licznik T0
T0TCR = T0TCR_Counter_Enable;
nic nie przerabiałem po przejscu z IRQ w timerze0 a sądzę ze gdzieś w nim jest błąd bo gdy podczas uruchamiania przerwań, zmienie
VICIntEnable = TIMER0_VIC;VICIntEnable = 32;Uart0NIPuts("L3\r\n");to juz moje drugie podejście do tematu po dłuższej przerwie i ciągle nie mogę przeskoczyć tego przerwania
pomóżcie proszę
edit:
znalazłem też stary post Freddie chopin'a gdzie opisywany był podobny problem, jednak mój make file ma optymalizacje 0 tego z thumbem też nie ma