libnds
|
Contains defines, macros and functions for ARM7 and ARM9 timer operation. More...
#include <nds/ndstypes.h>
Macros | |
#define | BUS_CLOCK (33513982) |
The speed in which the timer ticks in Hz. | |
#define | TIMER0_CR (*(vu16 *)0x04000102) |
Same as TIMER_CR(0). | |
#define | TIMER0_DATA (*(vu16 *)0x04000100) |
Same as TIMER_DATA(0). | |
#define | TIMER1_CR (*(vu16 *)0x04000106) |
Same as TIMER_CR(1). | |
#define | TIMER1_DATA (*(vu16 *)0x04000104) |
Same as TIMER_DATA(1). | |
#define | TIMER2_CR (*(vu16 *)0x0400010A) |
Same as TIMER_CR(2). | |
#define | TIMER2_DATA (*(vu16 *)0x04000108) |
Same as TIMER_DATA(2). | |
#define | TIMER3_CR (*(vu16 *)0x0400010E) |
Same as TIMER_CR(3). | |
#define | TIMER3_DATA (*(vu16 *)0x0400010C) |
Same as TIMER_DATA(3). | |
#define | TIMER_CASCADE (1 << 2) |
When set will cause the timer to count when the timer below overflows (unavailable for timer 0). | |
#define | TIMER_CR(n) (*(vu16 *)(0x04000102 + ((n) << 2))) |
Returns a dereferenced pointer to the data register for timer control register. | |
#define | TIMER_DATA(n) (*(vu16 *)(0x04000100 + ((n) << 2))) |
Returns a dereferenced pointer to the data register for timer number "n". | |
#define | TIMER_DIV_1 (0) |
Causes the timer to count at 33.514 MHz. | |
#define | TIMER_DIV_1024 (3) |
Causes the timer to count at (33.514 / 1024) MHz. | |
#define | TIMER_DIV_256 (2) |
Causes the timer to count at (33.514 / 256) MHz. | |
#define | TIMER_DIV_64 (1) |
Causes the timer to count at (33.514 / 64) MHz. | |
#define | TIMER_ENABLE (1 << 7) |
Enables the timer. | |
#define | TIMER_FREQ(n) TIMER_FREQ_SHIFT(n, 1, 0) |
A macro that calculates TIMER_DATA(n) settings for a given frequency of n. | |
#define | TIMER_FREQ_1024(n) TIMER_FREQ_SHIFT(n, 1, 10) |
Macro that calculates TIMER_DATA(n) settings for a given frequency of n. | |
#define | TIMER_FREQ_256(n) TIMER_FREQ_SHIFT(n, 1, 8) |
A macro that calculates TIMER_DATA(n) settings for a given frequency of n. | |
#define | TIMER_FREQ_64(n) TIMER_FREQ_SHIFT(n, 1, 6) |
A macro that calculates TIMER_DATA(n) settings for a given frequency of n. | |
#define | TIMER_FREQ_SHIFT(n, divisor, shift) ((-((BUS_CLOCK >> (shift)) * (divisor)) - ((((n) + 1)) >> 1)) / (n)) |
A macro that calculates TIMER_DATA(n) settings for a given frequency of n and shift. Correctly rounds the timer to the closest available frequency. | |
#define | TIMER_IRQ_REQ (1 << 6) |
Causes the timer to request an Interrupt on overflow. | |
Enumerations | |
enum | ClockDivider { ClockDivider_1 = 0 , ClockDivider_64 = 1 , ClockDivider_256 = 2 , ClockDivider_1024 = 3 } |
Allowable timer clock dividers. More... | |
Functions | |
u32 | cpuEndTiming (void) |
Ends CPU timing. | |
u32 | cpuGetTiming (void) |
Returns the number of ticks which have elapsed since cpuStartTiming. | |
void | cpuStartTiming (int timer) |
Begins CPU timing using two timers for 32bit resolution. | |
u16 | timerElapsed (int timer) |
Returns the ticks elapsed since the last call to timerElapsed(). | |
u16 | timerPause (int timer) |
Pauses the specified timer. | |
void | timerStart (int timer, ClockDivider divider, u16 ticks, VoidFn callback) |
Start a hardware timer. | |
u16 | timerStop (int timer) |
Stops the specified timer. | |
static u16 | timerTick (int timer) |
Returns the raw ticks of the specified timer. | |
static void | timerUnpause (int timer) |
Unpauses the specified timer. | |
Contains defines, macros and functions for ARM7 and ARM9 timer operation.
It also contains a simplified API for timer use and some cpu timing functions.
The timers are fed with a 33.513982 MHz source on the ARM9 and ARM7.
#define TIMER_CR | ( | n | ) | (*(vu16 *)(0x04000102 + ((n) << 2))) |
Returns a dereferenced pointer to the data register for timer control register.
Example Usage:
Possible bit defines:
#define TIMER_DATA | ( | n | ) | (*(vu16 *)(0x04000100 + ((n) << 2))) |
Returns a dereferenced pointer to the data register for timer number "n".
TIMER_DATA(n) when set will latch that value into the counter. Every time the counter rolls over, TIMER_DATA(0) will return to the latched value. This allows you to control the frequency of the timer using the following formula:
Example Usage:
#define TIMER_FREQ | ( | n | ) | TIMER_FREQ_SHIFT(n, 1, 0) |
A macro that calculates TIMER_DATA(n) settings for a given frequency of n.
It will calculate the correct value for TIMER_DATA(n) given the frequency in Hz (number of times the timer should overflow per second).
Example Usage:
Max frequency is: 33513982 Hz Min frequency is: ~511 Hz
#define TIMER_FREQ_1024 | ( | n | ) | TIMER_FREQ_SHIFT(n, 1, 10) |
Macro that calculates TIMER_DATA(n) settings for a given frequency of n.
It wtill calculate the correct value for TIMER_DATA(n) given the frequency in Hz (number of times the timer should overflow per second).
Example Usage:
Max frequency is: ~32728 Hz Min frequency is: ~0.5 Hz
#define TIMER_FREQ_256 | ( | n | ) | TIMER_FREQ_SHIFT(n, 1, 8) |
A macro that calculates TIMER_DATA(n) settings for a given frequency of n.
It will calculate the correct value for TIMER_DATA(n) given the frequency in Hz (number of times the timer should overflow per second).
Example Usage:
Max frequency is: ~130914 Hz Min frequency is: ~2 Hz
#define TIMER_FREQ_64 | ( | n | ) | TIMER_FREQ_SHIFT(n, 1, 6) |
A macro that calculates TIMER_DATA(n) settings for a given frequency of n.
It will calculate the correct value for TIMER_DATA(n) given the frequency in Hz (number of times the timer should overflow per second).
Example Usage:
Max frequency is: ~523656 Hz Min frequency is: 8 Hz
#define TIMER_FREQ_SHIFT | ( | n, | |
divisor, | |||
shift | |||
) | ((-((BUS_CLOCK >> (shift)) * (divisor)) - ((((n) + 1)) >> 1)) / (n)) |
A macro that calculates TIMER_DATA(n) settings for a given frequency of n and shift. Correctly rounds the timer to the closest available frequency.
Shift values:
enum ClockDivider |
u32 cpuEndTiming | ( | void | ) |
Ends CPU timing.
u32 cpuGetTiming | ( | void | ) |
Returns the number of ticks which have elapsed since cpuStartTiming.
void cpuStartTiming | ( | int | timer | ) |
Begins CPU timing using two timers for 32bit resolution.
timer | The base hardware timer to use (0 - 2). |
u16 timerElapsed | ( | int | timer | ) |
Returns the ticks elapsed since the last call to timerElapsed().
timer | The hardware timer to use (0 - 3). |
u16 timerPause | ( | int | timer | ) |
Pauses the specified timer.
timer | The hardware timer to use (0 - 3). |
void timerStart | ( | int | timer, |
ClockDivider | divider, | ||
u16 | ticks, | ||
VoidFn | callback | ||
) |
Start a hardware timer.
Callback is tied directly to interrupt table and called directly, resulting in less latency than the attached timer.
timer | The hardware timer to use (0 - 3). |
divider | The timer channel clock divider (clock will tick at 33.513982 MHz / divider). |
ticks | The number of ticks which must elapse before the timer overflows. |
callback | The callback to be called when the timer expires (if NULL, no IRQ will be generated by the timer). |
u16 timerStop | ( | int | timer | ) |
Stops the specified timer.
timer | The hardware timer to use (0 - 3). |
|
inlinestatic |
Returns the raw ticks of the specified timer.
timer | The hardware timer to use (0 - 3). |
|
inlinestatic |
Unpauses the specified timer.
timer | The hardware timer to use (0 - 3). |