что то не могу разобраться с RTC.
схема RTC

тактирование

у меня нет LSE поэтому буду питаться от HSE/128
вот моя иницилизация его
Код
void mcu_rtc_init(void)
{
int rtc_value = 0x00;
if ((RCC->BDCR & RCC_BDCR_RTCEN) != RCC_BDCR_RTCEN) // если RTC отключен
{
RCC->BDCR |= RCC_BDCR_RTCSEL_0 | RCC_BDCR_RTCSEL_1; // выбираем внешний кварц 12MHz /128 =93750 Hz.
RCC->BDCR |= RCC_BDCR_BDRST; // сброс
RCC->BDCR &= ~RCC_BDCR_BDRST;
RCC->BDCR |= RCC_BDCR_RTCEN; // разрешить работу RTC
RTC->CRL |= RTC_CRL_CNF; // заходим в режим конфигурации
RTC->PRLH = 0;
RTC->PRLL = 2-1; // 93750Hz/3=31250Hz
// 1/31250Hz ->0.000032c
RTC->ALRH = 0; // 0.000032c*125=0.004c=4mc
RTC->ALRL = 125;
RTC->CNTH = rtc_value >> 16;
RTC->CNTL = rtc_value;
RTC->CRH |= RTC_CRH_ALRIE; // разрешение прерывания по аларму.
NVIC->ISER[0] |= ena_RTC_GLOBAL; // разрешить прерывание от RTC.
//NVIC->ISER[1] |= ena_RTC_ALARM; // разрешить прерывание от alarm RTC.
RTC->CRL &= ~RTC_CRL_CNF; // выходим из режима конфигурации
RTC->CRL &=~RTC_CRL_RSF; // запустить синхронизацию
while((RTC->CRL & RTC_CRL_RSF) != RTC_CRL_RSF){} // ожидание синхронизации
}
}
void RTC_IRQHandler(void)
{
count4ms++;
if(count4ms==250)
{
count4ms=0;
count1s++;
if(count1s==86400)
{
count1s=0;
}
}
}
и он повисает тут
RTC->CRL &=~RTC_CRL_RSF; // запустить синхронизацию
while((RTC->CRL & RTC_CRL_RSF) != RTC_CRL_RSF){} // ожидание синхронизации
значит часы не запускаются(((
Сообщение отредактировал 123kill12 - Oct 27 2011, 10:16