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.