Вот так я инициализирую часы:
Код
void RTC_Init(void)
{
RTC_Startup_Set();
CIIR = 0;
AMR = 0;
ALSEC = 0;
ALMIN = 0;
ALHOUR = 0;
ALDOM = 0;
ALDOW = 0;
ALDOY = 0;
ALMON = 0;
ALYEAR = 0;
// initialize the interrupt vector
VICIntSelect &= ~(1<<VIC_RTC);
VICVectAddr4 = (unsigned long)RTC_Handler;
VICVectCntl4 = (1<<VIC_CHNL_ENABLE_BIT) | VIC_RTC;
VICIntEnable |= (1<<VIC_RTC);
ALHOUR = RTC_SYNC_WITCH_FM_31256_TIME; //Установим час периодической синхронизации с FM31256
PREINT = (unsigned short)(PCLK/32768)-1;
PREFRAC = PCLK - ((PREINT + 1) * 32768);
CCR = (1<<CCR_CLKEN_BIT);
}
Как видите, пришлось нулями забивать регистры. А иначе наблюдал эффекты вроде того, что вы писали.