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 ALARM interrupt problem

i use RTC to generate an ALARM.
i have a function that sets the values of ALHOUR and ALMIN. after doing that i call a function (see below) that handles the interrupt initialization. immediately when i call this function an interrupt is generated even though time condition is not matched. when time condition is matched interrupt is not asserted.

/***************************/
/*      Init ALARM       */
/***************************/
void ALARM_init (void)
{
  RTC_AMR = 0xFF;                       //Mask all bits
  RTC_AMR &= 0xF9;                  //enable MIN,HOUR

  /* Setup the VIC */
  VICIntEnClr |= 1<<13;                     // clear 13th bit (is the RTC)
  VICVectAddr13  = (unsigned long int) &start_ALARM_ISR;
  VICVectCntl13  = 0x07;              // Interrupt priority
  VICIntEnable  |= 1<<13;                   //enable RTC interrupt, 13th bit
  return;
}

/***************************/
/*      ALARM ISR          */
/***************************/
 void start_ALARM_ISR (void) __irq
{

Parents
  • Meir,
    Did you following this procedure exactly?
    I assume you are using an ARM7 core.

    4 CONFIGURATION MODE
    To write in the RTC_PRL, RTC_CNT, RTC_ALR registers, the peripheral must enter Configuration
    mode. This is done by setting the CNF bit in the RTC_CRL register.
    In addition, writing to any RTC register is only enabled if the previous write operation is finished.
    To enable the software to detect this situation, the RTOFF status bit is provided in the
    RTC_CR register to indicate that an update of the registers is in progress. A new value can be
    written to the RTC counters only when the RTOFF status bit value is 1.
    Configuration Procedure:
    1. Poll RTOFF, wait until its value goes to 1
    2. Set CNF bit to enter configuration mode
    2. Write to one or more RTC registers
    3 Clear CNF bit to exit configuration mode
    The write operation only executes when the CNF bit is cleared and it takes at least two
    Clock32 cycles to complete.
    

Reply
  • Meir,
    Did you following this procedure exactly?
    I assume you are using an ARM7 core.

    4 CONFIGURATION MODE
    To write in the RTC_PRL, RTC_CNT, RTC_ALR registers, the peripheral must enter Configuration
    mode. This is done by setting the CNF bit in the RTC_CRL register.
    In addition, writing to any RTC register is only enabled if the previous write operation is finished.
    To enable the software to detect this situation, the RTOFF status bit is provided in the
    RTC_CR register to indicate that an update of the registers is in progress. A new value can be
    written to the RTC counters only when the RTOFF status bit value is 1.
    Configuration Procedure:
    1. Poll RTOFF, wait until its value goes to 1
    2. Set CNF bit to enter configuration mode
    2. Write to one or more RTC registers
    3 Clear CNF bit to exit configuration mode
    The write operation only executes when the CNF bit is cleared and it takes at least two
    Clock32 cycles to complete.
    

Children
  • Hi Tamir,
    thanks for your response. where do you take this information from?
    i'm using the LPX236X user manual and under the RTC chapter i can't find anything you're writing about. even in my LPC23xx.h file there is no RTC_CR register.
    and your guess is right, i'm using the ARM7 LPC2368.

  • It comes from AN1780 available at http://www.st.com, titled "STR71X REAL TIME CLOCK APPLICATION EXAMPLE". It is possible that your LPC requires another procedure, though.

  • Here is what LPC23xx user manual says:

    The RTC is configured using the following registers:
    1. Power: In the PCONP register (Table 4-46), set bits PCRTC.
    Remark: On reset, the RTC is enabled.
    2. Clock: Select clock source in Table 26-492. If the peripheral clock is selected, select
    PCLK_RTC in the PCLK_SEL0 register (Table 4-39). For the RTC, the peripheral
    clock must be scaled (see Section 26-10).
    3. Interrupts: See Section 26-6.1 for RTC interrupt handling. Interrupts are enabled in
    the VIC using the VICIntEnable register (Table 70-71).
    

  • Hi Tamir
    thanks again.the LPC is much more comfortable to configure than the example you found. i'm familiar with the part you cut from the LPC user manual and i program accordingly. anyhow, in my application the RTC works fine, the problem is with the alarm. as i explained before the interrupt is asserted immediately after i call the function that suppose only to set the interrupt parameters even though the time condition is not matched. nonetheless while time condition is matched no interrupt is asserted.

  • I have not used the alarm function of the RTC, just the time keeping.

    Might the uninitialized registers have created a false match directly when you powered up the RTC and that gets trigged as sonn as you enable interrupts?

    When you get your spurious interrupt: Are you acknowledging it, to make sure that you may get a new interrupt at the actual alarm time?