32
Rabbit 3000 Microprocessor User’s Manual
4.3 Operation
4.3.1 Periodic Interrupt
The following steps explain how a periodic interrupt is used.
1. Write the vector to the interrupt service routine to the internal interrupt table.
2. Enable the periodic interrupt by writing to GCSR.
3. The interrupt request is cleared by reading from GCSR.
A sample interrupt handler is shown below.
periodic_isr::
push af
ioi ld a, (GCSR)
; clear the interrupt request and get status
; handle any periodic tasks here
pop af
ipres
ret
4.3.2 Real-Time Clock
The real-time clock consists of six 8-bit registers that together comprise a 48-bit value.
The real-time clock is not synchronized to the read operation, so the least-significant bit
should be read twice and checked for matching values; if the two reads do not match, then
the real-time clock may have been updating during the read and should be read again.
Writing to RTC0R latches the current real-time clock value into the RTCxR holding regis-
ters, so the following sequence should be used to read the real-time clock.
1. Write any value to RTC0R and then read back a value from RTC0R.
2. Write a value to RTC0R again, and again read back a value from RTC0R.
3. If the two values do not match, repeat Step 2 until the last two readings are identical.
4. At this point, registers RTC1R through RTC6R can also be read and used.
Note that the periodic interrupt and the real-time clock are clocked by the same edge of the
32 kHz clock; if read from the periodic interrupt, the count is guaranteed to be stable and
only needs to be read once (assuming it occurs within one clock of the 32 kHz clock).
The real-time clock can be reset by writing the sequence 0x0040 – 0x0080 to RTCCR. It
can be reset and left in the byte increment mode by writing 0x0040 – 0x00C0 to RTCCR
and then writing bytes repeatedly to RTCCR to increment the appropriate bytes of the
real-time clock. The byte increment mode is disabled by writing 0x0000 to RTCCR.