User Tools

Site Tools


timers

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Next revision
Previous revision
timers [2024/09/23 17:43] – created arisoturatimers [2025/04/13 13:51] (current) arisotura
Line 3: Line 3:
 The gamepad has the following timer registers: (TODO word better) The gamepad has the following timer registers: (TODO word better)
 ^ Address    ^ Desc. ^ ^ Address    ^ Desc. ^
 +| 0xF0000400 | Prescaler for timer 0/1 |
 +| 0xF0000404 | Prescaler for count-up timer |
 +| 0xF0000408 | Count-up timer |
 | 0xF0000410 | Timer 0 control | | 0xF0000410 | Timer 0 control |
-| 0xF0000414 | Timer 0 value   |+| 0xF0000414 | Timer 0 counter |
 | 0xF0000418 | Timer 0 target  | | 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.
 +
 +These registers are 8 bits wide.
 +
 +===== 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.
 +
 +This register is 32 bits wide.
  
  
 ===== Timer 0 ===== ===== Timer 0 =====
  
-When the timer value goes past the target value, the timer is reloaded to 0 and IRQ 0x00 is triggered.+**0xF0000410** 
 + 
 +Timer control. 
 + 
 +^ Bits ^ Desc. ^ 
 +| 0    | ?? | 
 +| 1    | Timer enable | 
 +| 2    | Count direction; 0=up, 1=down | 
 +| 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. Writes are ignored when the timer isn't active. 
 + 
 +When the timer goes past the target in count-up mode, or below zero in count-down mode, the timer is reloaded (to 0 in count-up mode, to the target value in count-down mode) and IRQ 0x00 is triggered
 + 
 +Writing a new value greater than the target does not cause a reload. 
 + 
 +This register is 32 bits wide. 
 + 
 + 
 +**0xF0000418** 
 + 
 +Target. 
 + 
 +In count-up mode, before a reload, the last value the timer takes is equal to the target. It is then reloaded to 0. 
 + 
 +In count-down mode, before a reload, the last value the timer takes is 0. It is then reloaded to the target value. 
 + 
 + 
 +===== Timer 1 ===== 
 + 
 +Function identical to timer 0, except it triggers IRQ 0x01.
  
-TODO: more details 
timers.1727113418.txt.gz · Last modified: 2024/09/23 17:43 by arisotura

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki