/****************************************************************************//
// RTC_Config //
//****************************************************************************//
void RTC_Config(){
//Enables the LP OSC for RTCC operation
asm("mov #OSCCON,W1");
asm("mov.b #0x02, W0");
asm("mov.b #0x46, W2");
asm("mov.b #0x57, W3");
asm("mov.b W2, [W1]");
asm("mov.b W3, [W1]");
asm("mov.b W0, [W1]");
// OSCCON unlock sequence, setting SOSCEN
asm volatile ("mov #OSCCON,W1");
asm volatile ("mov.b #0x46, W2");
asm volatile ("mov.b #0x57, W3");
asm volatile ("mov.b #0x02, W0"); // SOSCEN =1
asm volatile ("mov.b W2, [W1]");
asm volatile ("mov.b W3, [W1]");
asm volatile ("mov.b W0, [W1]");
_SOSCEN =1;
// RCFGCAL unlock sequence, setting RTCWREN
asm volatile("disi #5");
asm volatile("mov #0x55, w7");
asm volatile("mov w7,_NVMKEY");
asm volatile("mov #0xAA, w8");
asm volatile("mov w8,_NVMKEY");
asm volatile("bset _RCFGCAL, #13"); // RTCWREN =1;
asm volatile("nop");
asm volatile("nop");
__builtin_write_OSCCONL(0x02);
_RTCWREN = 1;
RtccInitClock(); //Initialize the clock
RtccWrOn(); //Enable Write
rtccTime time; //Create a time data structure
char hourTens[] = {__TIME__[0], '\0'}; //Get Compile Time
char hourOnes[] = {__TIME__[1], '\0'};
char minTens[] = {__TIME__[3],'\0'};
char minOnes[] = {__TIME__[4],'\0'};
char secTens[] = { __TIME__[6],'\0'};
char secOnes[] = { __TIME__[7],'\0'};
secTime = (( atoi(secTens)<<4) & 0b11110000) | ( (atoi(secOnes) )& 0b00001111);
minTime = (( atoi(minTens)<<4) & 0b11110000) | (atoi(minOnes) & 0b00001111);
hoursTime = (( atoi(hourTens)<<4) & 0b11110000) | (atoi(hourOnes) & 0b00001111);
time.f.sec = secTime;
time.f.min = minTime;
time.f.hour = hoursTime;
RtccWriteTime(&time,TRUE);
RCFGCALbits.RTCEN=1; //Turn on RTC!
// disable alarm
_ALRMEN = 0;
rtccRepeat repeat = RTCC_RPT_HOUR;
RtccSetAlarmRpt(repeat,TRUE);
RtccSetAlarmRptCount(1,TRUE);
RtccSetChimeEnable(TRUE,TRUE);
rtccTime time2;
time2.f.sec = 0;
time2.f.min =minTime + 1 ;
time2.f.hour = hoursTime;
RtccWriteAlrmTime(&time2);
_RTCWREN = 1;
_ALRMEN = 1; // enable alarm
_RTCIF = 0; // clear interrupt flag
_RTCIE = 1; // enable interrupt
}