Forum: Mikrocontroller und Digitale Elektronik [STM32] RTC Interrupts Funktionieren nicht


von Philipp (Gast)


Lesenswert?

Hallo,
ich versuch mich gerade an der RTC vom STM32.
Wenn man mal von den Interrupts absieht, funktioniert auch alles wie es 
soll,
bloß egal was ich mache es wird einfach kein Interrupt ausgelöst.

So sieht meine Initialisierung aus:
1
RCC_APB1ENR |= (1<<RCC_APB1ENR_BKPEN) | (1<<RCC_APB1ENR_PWREN);
2
3
PWR_CR |= (1<<PWR_CR_DBP);
4
5
RCC_BDCR |= (1<<RCC_BDCR_LSEON);  
6
while(!(RCC_BDCR & (1<<RCC_BDCR_LSERDY)));
7
8
RCC_BDCR |= (1<<RCC_BDCR_RTCSEL0);
9
RCC_BDCR |= (1<<RCC_BDCR_RTCEN);
10
11
while(!(RTC_CRL & (1<<RTC_CRL_RTOFF)));
12
13
RTC_CRL |= (1<<RTC_CRL_CNF);
14
  
15
RTC_PRLH = 0x0000;
16
RTC_PRLL = 0x7FFF;
17
  
18
RTC_CNTH = 0;
19
RTC_CNTL = 0;
20
  
21
RTC_CRH |= (1<<RTC_CRH_SECIE);
22
    
23
RTC_CRL &= ~(1<<RTC_CRL_CNF);
24
while(!(RTC_CRL & (1<<RTC_CRL_RTOFF)));

und die ISR:
1
if(RTC_CRL & (1<<RTC_CRL_ALRF))
2
{
3
  RTC_CRL &= ~(1<<RTC_CRL_SECF);
4
    
5
  if(GPIOB_ODR & GPIO_PIN(5))
6
    GPIOB_BRR |= GPIO_PIN(5);
7
  else
8
    GPIOB_BSRR |= GPIO_PIN(5);
9
      
10
  while(!(RTC_CRL & (1<<RTC_CRL_RSF)));
11
}

Kann mir bitte jemand sagen, was ich Falsch mache?

von (prx) A. K. (prx)


Lesenswert?

Wird der Interrupt-Controller auch irgendwo gestreichelt?

von Philipp (Gast)


Lesenswert?

>Wird der Interrupt-Controller auch irgendwo gestreichelt?
ähm nein... Ich hab im Reference Manual keinen Hinweis darauf gefunden, 
das ich noch was im Interrupt Controller einstellen muss.
Warscheinlich unter Interrupts and Events?
Da lese ich nur was von externen Interrupts.

von Philipp (Gast)


Lesenswert?

kleines update:
hatte in der ISR auf RTC_CRL_ALRF geprüft, was ich jetzt auf 
RTC_CRL_SECF geändert habe, wie es eigentlich sein sollte. Ist aber 
nicht die Lösung des Problems.

von (prx) A. K. (prx)


Lesenswert?

Philipp schrieb:

> ähm nein... Ich hab im Reference Manual keinen Hinweis darauf gefunden,
> das ich noch was im Interrupt Controller einstellen muss.

Yep, du musst. Beispielsweise diesen Interrupt dort einschalten, und 
ggf. die Priorität einstellen.

von Philipp (Gast)


Lesenswert?

Okay, jetzt funktioniert es.
Danke schön.

Die hätten im Reference Manual aber mal ruhig nen hinweis auf das STM32 
Cortex M3 Programming Manual geben können. >.<

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.