Files
super6502/doc/rtc/rtc.md
Byron Lathi 013f47fb3f Add rtc docs
2023-11-19 20:58:40 -08:00

2.4 KiB

RTC

Overview

The RTC is capable of keeping track of elapsed time as well as generating periodic interrupts. Its input frequency is (currently) the same as the CPU frequency. The architecture is shown below:

rtc.drawio.png

The counter register is a 32 bit register which increments by increment every clock tick. When this value reaches threshold, both output and irq_counter are incremented by 1. When irq_counter reaches irq_threshold, an interrupt is generated.

The interrupt frequency can be calculated with the following equations:

F_{out}=\frac{F_{in}\cdot{increment}}{threshold} F_{irq}=\frac{F_{out}}{irq\_threshold}

Where F_{out} is the frequency at which the output changes and F_{irq} is the frequency at which interrupts occur.

Interface

The RTC is controlled through two 8-bit registers, CMD and DAT. The upepr 4 bits of CMD control which register is accessed, and the lower 4 bits control the byte select. The RTC uses 32 bit registers, so only values of 0-3 are supported.

CMD

[7:4] [3:2 [1:0]
Register Address Reserved Byte Select

DAT

[7:0]
Data[8*Byte_sel +: 8]

Registers

Register Map

Address Read Write
0 Threshold Threshold
1 Increment Increment
2 IRQ Threshold IRQ Threshold
3 Output Control

Threshold

32 bit threshold register. When counter reaches this value, output and irq_counter are incremented by 1, and counter is reset back to 0.

Increment

32 bit increment register. Every clock cycle, counter is incremented by increment

IRQ Threshold

32 bit IRQ threshold register. When irq_counter reaches this value, and IRQ is generated and irq_counter is reset back to 0.

Output

32 bit output register. This value ticks up.

Control

[7:2] [1] [0]
Reserved IRQ Enable Enable

8 bit Control register. Regardless of Byte Select, any write to address 3 will write to this register. IRQ Enable controls interrupt generation. Enable is a global enable. When 0, all counter registers are set to 0.