hallo, habe folgendes problem: will den code im debug mode testen aber irgendwie wird die Interrupt Service Routine nie aufgerufen. Wäre gut wenn jemand mal meinen code anschauen könnte :/ Danke im Vorraus controller: mc9s08JM60 #include <hidef.h> /* for EnableInterrupts macro */ #include "derivative.h" /* include peripheral declarations */ #include "MCUinit.h" #ifdef __cplusplus extern "C" #endif void MCU_init(void); /* Device initialization function declaration */ Bool Tick = FALSE; void main(void) { MCU_init(); /* call Device Initialization */ EnableInterrupts; RTCMOD= 0x00; RTCSC = 0x1F | 0x80; for(;;){ if (Tick == TRUE) { RTCMOD = 0x00;//Re-setting the counter value RTCSC = 0x1F; //Re-enabling the interrupt re-configuring the clock source Tick = FALSE; } } } __interrupt void RTC_ISR(void) { RTCSC = RTCSC | 0x80; Tick = TRUE; }
Moin, (1) also eigentlich tut man zuerst alles initialisieren und dann erst die Interrupts freigeben. (2) das zyklische ReInit der RTC in der Endlosschleife macht nichts besser sondern ist einfach nur schwachsinnig. Wenn du das Datenblatt liest, dann wirst du sehen, dass hier nichts erneut beschreiben werden muss. (3) wenn du die Variable "Tick" im Interrupt setzt und in der Hauptschleife löscht und womöglich vielleicht auch noch auswerten willst, dann mit "volatille" deklarieren (4) und daran wird es liegen, dass der Interrupt nicht aufgerufen wird: Beim Debuggen werden meistens die Interrupts deaktiviert (I-Flag wird vom Debugger gesetzt). Dies läßt sich irgendwo einstellen oder im vermute jetzt mal, dass du den Hiwave nimmst, dann lösche doch einfach das I-Flag im CCR.
danke für die schnelle antwort.. volatile Bool Tick = FALSE; void main(void) { MCU_init(); /* call Device Initialization */ RTCMOD= 0x00; RTCSC = 0x17 | 0x80; EnableInterrupts; for(;;){ if (Tick == TRUE) { RTCMOD = 0x00;//Re-setting the counter value //RTCSC = 0x1F; //Re-enabling the interrupt re-configuring the clock source Tick = FALSE; } } } __interrupt void RTC_ISR(void) { RTCSC = RTCSC | 0x80; Tick = TRUE; } habe den code soweit geändert.. habe in codewarrior in der debug config die option gefunden dass interrupts disabled sind. komme jedoch immer nohc nicht in den interrupt habe jetzt auch versucht in das linker file (.prm) den vector zu definieren: INTVECTS = READ_WRITE 0xFFC4 TO 0xFFC5; __interrup <vectornumber> void RTC_ISR code: __interrupt 29 void RTC_ISR(void) { RTCSC = RTCSC | 0x80; Tick = TRUE; } sobald ich debug starte bekomme ich folgende fehlermeldung Faileed writing target adress ffc4. Expected value: 0x1a7d4f00 Actual value: 0xfff2900
so wie es scheint funktionert die rtc nicht... rtccnt bleibt immer auf 0
hat sich erledigt, funktioniert jetzt. habe der simulation die rtc komponente hinzufügen müssen, ansonsten wird es anscheinend in codewarrier nicht simuliert. danke für die hilfestellung
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.