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}