Не могу запустить RTC на STM8L051F3P6.
Пробую делать так:
Код: Выделить всё
CLK_PCKENR2 = 0b00000101; // ADC + RTC
while (CLK_CRTCR & CLK_CRTCR_RTCSWBSY); // Wait for RTCSWBSY flag to clear
led(LED_3);
CLK_CRTCR = 0xB0; // RTC clock: source LSE, RTCDIV = 32
while (!(CLK_ECKCR & CLK_ECKCR_LSERDY)); // Wait for LSE stabilization
led(LED_2);
RTC_WPR = 0xCA;
RTC_WPR = 0x53;
RTC_ISR1 |= RTC_ISR1_INIT; // Enter initialization mode
while (!(RTC_ISR1 & RTC_ISR1_INITF)); // <--- тут зависаем
led(LED_1);
RTC_APRER = 0x08;
RTC_SPRERH = 0x00;
RTC_SPRERL = 0x80;
RTC_WUTRH = 0xFF; // Wakeup timer = 0xFFFF
RTC_WUTRL = 0xFF;
RTC_DR1 = 0x16;
RTC_DR2 = 0x04;
RTC_DR3 = 0x18;
RTC_TR3 = 0x21;
RTC_TR2 = 0x37;
RTC_TR1 = 0x54;
RTC_ISR1 &= ~RTC_ISR1_INIT; // Exit initialization mode
RTC_WPR = 0xFF;
Код: Выделить всё
#define RTC_ISR1_INIT ((uint8_t)0x80)
#define RTC_ISR1_INITF ((uint8_t)0x40)
#define CLK_CRTCR_RTCSWBSY ((uint8_t)0x01) /*!< RTC clock switch busy */
#define CLK_ECKCR_LSERDY ((uint8_t)0x08) /*!< Low speed external crystal oscillator ready */
Код: Выделить всё
#define RTC_ISR1 *(unsigned char*)0x514C // RTC Initialization and status register 1 0x01
#define RTC_WPR *(unsigned char*)0x5159 // RTC Write protection register 0x00
Вроде бы и разблокировку делаю, и адреса правильные, но что-то не работает.
Даже LSI вместо LSE пытался использовать, результат тот же.
Если читать из регистров RTC, то в RTC_DR1 получам 0x01, в RTC_DR2 - 0x21 - всё как положено. Ну, а если убрать ожидание входа в режим инициализации, то содержимое регистров не изменяется.
Помогите найти ошибку, где я не прав.
Спасибо.

