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

LPC2378 RTC' CISS number of counts for interrupt

Hi,

Why lpc2378's doc states that An interrupt is generated on every 16/32/64/etc. counts of the Clock Tick Counter and I have 16/32/64/ with Simulator and 32/64/128 with real chip ?

#include "LPC23xx.H"
#define ILR_RTCCIF      0x01
#define ILR_RTCALF      0x02
#define ILR_RTSSF       0x04
#define CCR_CLKEN       0x01
#define CCR_CTCRST      0x02
#define CCR_CLKSRC      0x10

int nclock = 0, nclocks = 0, t0=0, dt0=0;

volatile int alarm_on = 0;

 __irq  void RTCHandler (void)
{
        RTC_ILR |= ILR_RTSSF;
    alarm_on = 1;
    VICVectAddr = 0;            /* Acknowledge Interrupt */
}

int stat[256];
int main (void)
{       int i, dtmin, dtmax;
        for(i=0;i<256; i++) stat[i]=0;
    /*--- Initialize registers ---*/
    RTC_AMR = 0;
    RTC_CIIR = 0;
    RTC_CCR = CCR_CTCRST;
    RTC_CCR = CCR_CLKSRC;

 VICIntSelect   = 0x00000000;
 VICVectAddr13 = (unsigned) RTCHandler;
 VICVectCntl13 = 0x00000013;            /* Set channel =RTC */
 VICIntEnable = (1<<13);                /* Enable the interrupt */

    /*--- Start RTC counters ---*/
    RTC_CCR |= CCR_CLKEN;
    RTC_ILR = ILR_RTCCIF;
        RTC_CISS = 0x81; //subsecondes interrupt enable 0x80 = 488 mks, 0x87 = 62.5 ms

        t0 = RTC_CTC;
        dtmax = 0;
        dtmin = 1000000;
    while (1)
    {   /* Loop forever */
        nclocks++;
                if ( alarm_on != 0 )
                {       dt0 = RTC_CTC - t0;
                    t0 = RTC_CTC;

// RTC_CISS = 0x80;
//Simulator:  dtmin = 0x20 dtmax = 0x20 RTC_CISS = 0x80;  stat[]= 0,0,0,0.....   stat[16] = big value
//JTAG debug: dtmin = 0x0  dtmax = 0x20 RTC_CISS = 0x80;  stat[]= 1,0,1,0.....   stat[32] = big value
// RTC_CISS = 0x81;
//Simulator: dtmin = 0x40 dtmax = 0x40 RTC_CISS = 0x80;  stat[]= 0,0,0,0.....    stat[32] = big value
//JTAG debug:dtmin = 0x0  dtmax = 0x40 RTC_CISS = 0x80;  stat[]= 1,0,1,0.....    stat[64] = big value
                        if(dt0 >= 0)
                        {  if(dt0 > dtmax) dtmax = dt0;
                           if(dt0 < dtmin) dtmin = dt0;
                           if(dt0<256)
                             stat[dt0]++;
                        }
                        alarm_on = 0;
                        nclock++;
                }
    }
    return 0;
}

0