User Tools

Site Tools


timers

Timers

The gamepad has the following timer registers: (TODO word better)

Address Desc.
0xF0000400 Prescaler for timer 0/1
0xF0000404 Prescaler for count-up timer
0xF0000408 Count-up timer
0xF0000410 Timer 0 control
0xF0000414 Timer 0 counter
0xF0000418 Timer 0 target
0xF0000420 Timer 1 control
0xF0000424 Timer 1 counter
0xF0000428 Timer 1 target

Prescalers

Registers 0xF0000400 and 0xF0000404 control the rate at which timers 0/1 and the count-up timer run, respectively.

They are simple prescaler counters. For example, setting them to 63 will divide the input clock by 64.

The input clock seems to be the system clock, which is about 108MHz at the fast clock settings.

Count-up timer

This is a simple timer that is always counting up. When writing a value to 0xF0000408, it will begin counting from the new value.

Timer 0

0xF0000410

Timer control.

Bits Desc.
0 ??
1 Timer enable
4-6 Prescaler

Bit0 is possibly used by firmware code but has no observable effect.

Writing 0 to bit1 resets the timer to 0.

The prescaler value has the following possible settings:

Value Frequency
0 Divide by 2
1 Divide by 4
2 Divide by 8
3 Divide by 16
4 Divide by 32
5 Divide by 64
6 Divide by 128
7 Divide by 256

0xF0000414

Counter. Can be written to, the timer will count from the new value.

When the timer goes past the target, the timer is reloaded to 0 and IRQ 0x00 is triggered.

Writing a new value greater than the target does not cause a reload.

0xF0000418

Target.

Before a reload, the last value the timer takes is equal to the target.

Timer 1

Function identical to timer 0, except it triggers IRQ 0x01.

timers.txt · Last modified: 2024/09/23 18:31 by arisotura

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki