Forum: Mikrocontroller und Digitale Elektronik NXP LPC1768 CMSIS RTC-Alarm deaktivieren


von Karsten (Gast)


Lesenswert?

Hallo,

mit folgendem Code-Schnipsel kann ich per CMSIS einen RTC-Alarm setzen:
1
void main(void) {
2
3
RTC_SetTime(LPC_RTC, RTC_TIMETYPE_SECOND, 0);
4
RTC_SetAlarmTime (LPC_RTC, RTC_TIMETYPE_SECOND, 10);
5
6
}

Blöderweise bekomme ich den Alarm in der ISR dann nicht mehr deaktiviert 
und die ISR wird alle 60 Sekunden erneut ausgelöst:
1
void RTC_IRQHandler(void) {
2
3
  if (RTC_GetIntPending(LPC_RTC, RTC_INT_ALARM))
4
  {
5
    debugMessage("ALARM!");
6
    RTC_ClearIntPending(LPC_RTC, RTC_INT_ALARM);
7
  }
8
}

Weiß jmd. Rat?

von Grundschüler (Gast)


Lesenswert?

Karsten schrieb:
> Weiß jmd. Rat?

Manual 27.6.2.4

von Karsten (Gast)


Lesenswert?

Gemäß der Doku sollte es dann ausreichen wenn das AMR auf 255 gesetzt 
wird, aber das Problem besteht weiterhin
1
void RTC_IRQHandler(void) {
2
3
  if (RTC_GetIntPending(LPC_RTC, RTC_INT_ALARM))
4
  {
5
    debugMessage("ALARM!");
6
    LPC_RTC->AMR = 255;
7
  }
8
}

von Didi S. (kokisan2000)


Lesenswert?

Versuche es doch mal mit der Funktion
1
void RTC_CntIncrIntConfig (LPC_RTC_TypeDef *RTCx, uint32_t CntIncrIntType, FunctionalState NewState)
wobei NeState=DISABLE sein sollte.

DISABLE: Counter Increment interrupt for this time type are disabled

Wahlweise kann auch die zugehörige Clock abgeschaltet werden mit
1
void RTC_DeInit(LPC_RTC_TypeDef *RTCx)

von Grundschüler (Gast)


Lesenswert?

27.6.1: in  ilr rtcalf auf 0 setzen

von hellseher (Gast)


Lesenswert?

@Grundschüler: da fehlt aber noch die Fluxkompensatorkonstante!

von Karsten (Gast)


Lesenswert?

danke, so klappt's:
1
LPC_RTC->CIIR = 0;
2
LPC_RTC->AMR = 255;
3
LPC_RTC->ILR = 0x02;

von Peter D. (peda)


Lesenswert?

Spätestens nach einem halben Jahr wüßte ich nicht mehr, was diese 3 
magischen Konstanten bedeuten sollen.

Dafür gibt es bestimmt auch Defines oder Bitfelder.

von Didi S. (kokisan2000)


Lesenswert?

Hallo Karsten,

ich habe keine Erfahrung mit RTC und CMSIS auf ARM Cortex M3, dass aber 
in der umfangreichen Library die Funktionen zum Setzen und Aktivieren 
der Alarm Clock enthalten sein sollen und keine der Funktionen wieder
abschalten kann, ist doch etwas befremdlich. Hat CMSIS schlechte Arbeit 
geleistet oder ist die Doku nicht eindeutig?

http://mbed.org/users/yoonghm/code/CMSIS/docs/tip/group__RTC__Public__Functions.html

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
Noch kein Account? Hier anmelden.