This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

RTC in MCB2300

Hi All,

I am using MCB2300 board populated with LPC2388 for development purpose & I am facing problem in RTC.

When I disables CLKSRC bit in CCR register, RTC works well with desired values in PREINT & PREFRAC registers.

But when I enable CLKSRC bit in CCR register, RTC doesnt update.

I am posting my sample code here;

1 . RTC Configured with External Oscillator

#include <LPC23xx.H>
#include <TIME.H>
#include <stdarg.h>
#include <stdio.h>
#include <string.h>


#define Fosc    12000000                //      OScillator frequency - 12MHz
#define Fcco    288000000               //      PLL output frequency - 288MHz
#define Fcclk   48000000                //      CPU running frequency - 48MHz
#define Fpclk   (Fcclk / 2)             //      Peripheral frequency - 12MHz


void RTC_Init(void)
{
        PCONP |= (1 << 9);

//      //      PCLK = 12MHz
//      RTC_PREINT = 0x016D;
//      RTC_PREFRAC = 0x1B00;

        RTC_CIIR        = 0;
        RTC_CCR         = 0x11;
}



void RTC_SetTime(struct tm      *timeptr)
{
        RTC_CCR         = 0x10;
    RTC_SEC     = timeptr->tm_sec;
    RTC_MIN     = timeptr->tm_min;
    RTC_HOUR    = timeptr->tm_hour;
    RTC_DOM     = timeptr->tm_mday;
    RTC_DOW     = timeptr->tm_wday;
    RTC_DOY     = timeptr->tm_yday;
    RTC_MONTH   = timeptr->tm_mon + 1;
    RTC_YEAR    = timeptr->tm_year + 1900;
    RTC_CCR     = 0x11;
}


void RTC_GetTime(struct tm      *timeptr)
{
        timeptr->tm_sec              =       RTC_SEC;
        timeptr->tm_min              =       RTC_MIN;
        timeptr->tm_hour     =       RTC_HOUR;
        timeptr->tm_mday     =       RTC_DOM;
        timeptr->tm_wday     =       RTC_DOW;
        timeptr->tm_yday     =       RTC_DOY;
        timeptr->tm_mon              =       RTC_MONTH - 1;
        timeptr->tm_year     =       RTC_YEAR - 1900;
}



void UART0_Open(unsigned long Baudrate)
{
        unsigned long   Fdiv;

        PINSEL0 |= 0x00000050;                                  // Enable TxD0 and RxD0

        U0LCR   = 0x83;
        Fdiv    = ( Fpclk / 16 ) / Baudrate;
        U0DLL   = Fdiv % 256;
        U0DLM   = Fdiv / 256;
        U0FDR   = 0x00;
        U0LCR   = 0x03;

}


unsigned short UART0_Send(unsigned char *data, unsigned short len)
{
        unsigned short recvdlen = len;
        while ( len != 0 )
        {
                while (!(U0LSR & 0x20));
                U0THR = *data;
                data++;
                len--;
        }

    return recvdlen;
}


void  DEBUG_Printf (const  unsigned char *format, ...)
{
        static  unsigned char   buffer[100];
        va_list                         vArgs;

        va_start(vArgs, format);
        vsprintf((char *)buffer, (char const *)format, vArgs);
        va_end(vArgs);
        UART0_Send(buffer,strlen((const char *)buffer));
}


void Delay(unsigned long Cnt)
{
        while(Cnt--);
}

int main(void)
{
        struct tm       TM_CurrentTime;

        RTC_Init();
        UART0_Open(115200);

        while(1)
        {
                RTC_GetTime(&TM_CurrentTime);
                DEBUG_Printf("\n\rTime : %s",asctime(&TM_CurrentTime));
                Delay(0xffff);
        }
}

2 . RTC configured with PCLK

void RTC_Init(void)
{
        PCONP |= (1 << 9);


// PCLK = 12MHz RTC_PREINT = 0x016D; RTC_PREFRAC = 0x1B00;
RTC_CIIR = 0; RTC_CCR = 0x01; }
void RTC_SetTime(struct tm *timeptr) { RTC_CCR = 0x00; RTC_SEC = timeptr->tm_sec; RTC_MIN = timeptr->tm_min; RTC_HOUR = timeptr->tm_hour; RTC_DOM = timeptr->tm_mday; RTC_DOW = timeptr->tm_wday; RTC_DOY = timeptr->tm_yday; RTC_MONTH = timeptr->tm_mon + 1; RTC_YEAR = timeptr->tm_year + 1900; RTC_CCR = 0x01; }

please suggest me if I am missing any configuration..

Xafar

0