/********************************************/
/*Real Time Clock Code                      */
/*                                          */
/*PIC32MX795F512L-80I/PF                    */
/********************************************/

#include "xc.h"

void RTC_Init(void)
{
    OSCCONbits.SOSCEN = 1;
    
    //wait for warm up
    while(OSCCONbits.SOSCRDY == 0)
    {
        
    }
    
    //Set Digital Pins to Input
    TRISCbits.TRISC13 = 1;
    TRISCbits.TRISC14 = 0;
    
    //RTC write enable
    RTCCONbits.RTCWREN = 1;
    
    //RTCC Pin
    TRISDbits.TRISD8 = 0;
    
    //seconds output on RTCC pin
    RTCCONbits.RTSECSEL = 0;
    RTCCONbits.RTCOE = 0;
    
    //Setup alarm for interrupt
    RTCALRMbits.ARPT = 0xff;
    RTCALRMbits.CHIME = 1;
    RTCALRMbits.AMASK = 4;      //every 10 minutes
    RTCALRMbits.ALRMEN = 1;
    
    //Set the time
    RTCDATEbits.YEAR10 = 2;
    RTCDATEbits.YEAR01 = 2;
    RTCDATEbits.MONTH10 = 1;
    RTCDATEbits.MONTH01 = 1; 
    RTCDATEbits.DAY10 = 0;
    RTCDATEbits.DAY01 = 0;
    RTCTIMEbits.HR10 = 0;
    RTCTIMEbits.HR01 = 0;
    RTCTIMEbits.MIN10 = 0;
    RTCTIMEbits.MIN01 = 0;
    RTCTIMEbits.SEC10 = 0;
    RTCTIMEbits.SEC01 = 0;    
    
    //set alarm 
    ALRMTIMEbits.HR10 = 0;
    ALRMTIMEbits.HR01 = 0;
    ALRMTIMEbits.MIN10 = 0;
    ALRMTIMEbits.MIN01 = 0;
    ALRMTIMEbits.SEC10 = 0;
    ALRMTIMEbits.SEC01 = 0;

    //enable interrupt
    IEC1bits.RTCCIE = 1;
    
    RTCCONbits.ON = 1;
    
    return;
}
