User Tools

Site Tools


timers

Differences

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

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
timers [2024/09/23 17:51] 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 counter | | 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.
  
  
Line 17: Line 38:
 | 0    | ?? | | 0    | ?? |
 | 1    | Timer enable | | 1    | Timer enable |
-| 4-6  | Prescaler|+| 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** **0xF0000414**
  
-Counter. Can be written to, the timer will count from the new value.+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, the timer is reloaded to 0 and IRQ 0x00 is triggered.+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. Writing a new value greater than the target does not cause a reload.
 +
 +This register is 32 bits wide.
  
  
Line 33: Line 72:
 Target. Target.
  
-Before a reload, the last value the timer takes is equal to the 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. 
timers.1727113891.txt.gz · Last modified: 2024/09/23 17:51 by arisotura

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki