embassy_agb/
config.rs

1/// Configuration for embassy-agb initialization
2#[derive(Debug, Clone, Default)]
3pub struct Config {
4    /// Timer configuration for the embassy time driver
5    pub timer: TimerConfig,
6}
7
8/// Timer configuration for embassy time driver
9///
10/// GBA has four 16-bit timers (0-3). Embassy uses one with Divider256 (65.536kHz).
11/// Timers 0-1 often used by sound system, so Timer 2 is default.
12#[derive(Debug, Clone)]
13pub struct TimerConfig {
14    /// Which timer to use (default: Timer2)
15    pub timer_number: TimerNumber,
16
17    /// Timer overflow amount - lower = better precision, more CPU overhead
18    ///
19    /// At 65.536kHz: 4=~61μs, 16=~244μs, 64=~1ms (default), 256=~4ms, 1024=~16ms
20    pub overflow_amount: u16,
21}
22
23impl Default for TimerConfig {
24    fn default() -> Self {
25        Self {
26            timer_number: TimerNumber::Timer2,
27            overflow_amount: 64, // ~1ms
28        }
29    }
30}
31
32/// GBA timer selection (Timer 0-1 often used by sound)
33#[derive(Debug, Clone, Copy)]
34pub enum TimerNumber {
35    /// Timer 0 (0x4000100) - IE/IF bit 3, often used by sound system
36    Timer0,
37    /// Timer 1 (0x4000104) - IE/IF bit 4, often used by sound system
38    Timer1,
39    /// Timer 2 (0x4000108) - IE/IF bit 5 (default)
40    Timer2,
41    /// Timer 3 (0x400010C) - IE/IF bit 6
42    Timer3,
43}