Explorar el Código

display: Add pin configuration code.

Mathias Gottschlag hace 5 años
padre
commit
fce1929c30
Se han modificado 2 ficheros con 155 adiciones y 0 borrados
  1. 1
    0
      display/firmware/src/main.rs
  2. 154
    0
      display/firmware/src/pins.rs

+ 1
- 0
display/firmware/src/main.rs Ver fichero

@@ -2,6 +2,7 @@
2 2
 #![no_std]
3 3
 
4 4
 mod board;
5
+mod pins;
5 6
 mod assets {
6 7
     include!(concat!(env!("OUT_DIR"), "/assets.rs"));
7 8
 }

+ 154
- 0
display/firmware/src/pins.rs Ver fichero

@@ -0,0 +1,154 @@
1
+use mkl25z4::{GPIOA, GPIOB, GPIOC, GPIOD, GPIOE, SIM, SPI0, SPI1};
2
+use mkl25z4_hal::gpio::{self, gpioa, gpiob, gpioc, gpiod, gpioe, GpioExt};
3
+use mkl25z4_hal::spi::{self, Phase, Polarity, Spi};
4
+
5
+pub struct Pins {
6
+    /// 5V supply for the LED (active high).
7
+    pub enable_5v: gpioa::PA1<gpio::Output<gpio::PushPull>>,
8
+    /// Red display frontlight LEDs (active high).
9
+    pub red: gpioe::PE29<gpio::Output<gpio::PushPull>>,
10
+    /// Green display frontlight LEDs (active high).
11
+    pub green: gpioe::PE30<gpio::Output<gpio::PushPull>>,
12
+    /// Blue display frontlight LEDs (active high).
13
+    pub blue: gpioe::PE31<gpio::Output<gpio::PushPull>>,
14
+
15
+    /// Top switch (active low).
16
+    pub top_switch: gpioc::PC1<gpio::Input<gpio::PullUp>>,
17
+    /// Left switches (top to bottom, active low).
18
+    pub left_switches: (
19
+        gpiod::PD1<gpio::Input<gpio::PullUp>>,
20
+        gpiod::PD2<gpio::Input<gpio::PullUp>>,
21
+        gpiod::PD3<gpio::Input<gpio::PullUp>>,
22
+        gpiod::PD4<gpio::Input<gpio::PullUp>>,
23
+    ),
24
+    /// Right switches (top to bottom, active low).
25
+    pub right_switches: (
26
+        gpioa::PA13<gpio::Input<gpio::PullUp>>,
27
+        gpioa::PA12<gpio::Input<gpio::PullUp>>,
28
+        gpioa::PA5<gpio::Input<gpio::PullUp>>,
29
+        gpioa::PA4<gpio::Input<gpio::PullUp>>,
30
+    ),
31
+
32
+    /// Ambient light sensor enable (active high).
33
+    pub als_en: gpioe::PE20<gpio::Output<gpio::PushPull>>,
34
+    // TODO: ADC for the ambient light sensor.
35
+    /// Ambient light sensor.
36
+    pub als: gpioe::PE21<gpio::Input<gpio::Floating>>,
37
+
38
+    // TODO: PWM for the buzzer.
39
+    /// Buzzer (active high).
40
+    pub buzzer: gpioc::PC3<gpio::Output<gpio::PushPull>>,
41
+
42
+    /// NRF IRQ line (active low).
43
+    pub nrf_irq: gpiob::PB0<gpio::Input<gpio::PullUp>>,
44
+    /// NRF chip select (active low).
45
+    pub nrf_cs: gpiob::PB1<gpio::Output<gpio::PushPull>>,
46
+    /// NRF chip enable.
47
+    pub nrf_ce: gpiob::PB2<gpio::Output<gpio::PushPull>>,
48
+    /// NRF supply voltage enable (active low).
49
+    pub nrf_pwr: gpiob::PB3<gpio::Output<gpio::PushPull>>,
50
+    /// SPI for the NRF module.
51
+    pub nrf_spi: Spi<
52
+        SPI1,
53
+        gpiob::PB16<gpio::Alternate2>,
54
+        gpiob::PB17<gpio::Alternate2>,
55
+        gpiod::PD5<gpio::Alternate2>,
56
+    >,
57
+
58
+    /// BME280 chip select (active low).
59
+    pub bme_cs: gpioc::PC2<gpio::Output<gpio::PushPull>>,
60
+
61
+    /// Display busy (active low).
62
+    pub display_busy: gpioc::PC4<gpio::Input<gpio::PullUp>>,
63
+    /// Display chip select (active low).
64
+    pub display_cs: gpioc::PC8<gpio::Output<gpio::PushPull>>,
65
+    /// Display data/command.
66
+    pub display_dc: gpioc::PC9<gpio::Output<gpio::PushPull>>,
67
+    /// Display reset (active low).
68
+    pub display_rst: gpioc::PC10<gpio::Output<gpio::PushPull>>,
69
+    /// Display supply voltage enable (active low).
70
+    pub display_pwr: gpioc::PC11<gpio::Output<gpio::PushPull>>,
71
+
72
+    /// SPI for both display and BME280.
73
+    pub display_bme_spi: Spi<
74
+        SPI0,
75
+        gpioc::PC7<gpio::Alternate5>,
76
+        gpioc::PC6<gpio::Alternate5>,
77
+        gpioc::PC5<gpio::Alternate2>,
78
+    >,
79
+}
80
+
81
+impl Pins {
82
+    pub fn configure(
83
+        sim: &mut SIM,
84
+        gpioa: GPIOA,
85
+        gpiob: GPIOB,
86
+        gpioc: GPIOC,
87
+        gpiod: GPIOD,
88
+        gpioe: GPIOE,
89
+        spi0: SPI0,
90
+        spi1: SPI1,
91
+    ) -> Pins {
92
+        let mut gpioa = gpioa.split(sim);
93
+        let mut gpiob = gpiob.split(sim);
94
+        let mut gpioc = gpioc.split(sim);
95
+        let mut gpiod = gpiod.split(sim);
96
+        let mut gpioe = gpioe.split(sim);
97
+
98
+        // SPI0 for the display/BME module.
99
+        let mosi = gpioc.pc7.into_alternate(&mut gpioc.pddr);
100
+        let miso = gpioc.pc6.into_alternate(&mut gpioc.pddr);
101
+        let sck = gpioc.pc5.into_alternate(&mut gpioc.pddr);
102
+        let mode = spi::Mode {
103
+            polarity: Polarity::IdleLow,
104
+            phase: Phase::CaptureOnFirstTransition,
105
+        };
106
+        let spi0 = Spi::spi0(spi0, mosi, miso, sck, mode, sim);
107
+
108
+        // SPI1 for the NRF module.
109
+        let mosi = gpiob.pb16.into_alternate(&mut gpiob.pddr);
110
+        let miso = gpiob.pb17.into_alternate(&mut gpiob.pddr);
111
+        let sck = gpiod.pd5.into_alternate(&mut gpiod.pddr);
112
+        let mode = spi::Mode {
113
+            polarity: Polarity::IdleLow,
114
+            phase: Phase::CaptureOnFirstTransition,
115
+        };
116
+        let spi1 = Spi::spi1(spi1, mosi, miso, sck, mode, sim);
117
+
118
+        Pins {
119
+            enable_5v: gpioa.pa1.into_push_pull_output(&mut gpioa.pddr),
120
+            red: gpioe.pe29.into_push_pull_output(&mut gpioe.pddr),
121
+            green: gpioe.pe30.into_push_pull_output(&mut gpioe.pddr),
122
+            blue: gpioe.pe31.into_push_pull_output(&mut gpioe.pddr),
123
+            top_switch: gpioc.pc1.into_pull_up_input(&mut gpioc.pddr),
124
+            left_switches: (
125
+                gpiod.pd1.into_pull_up_input(&mut gpiod.pddr),
126
+                gpiod.pd2.into_pull_up_input(&mut gpiod.pddr),
127
+                gpiod.pd3.into_pull_up_input(&mut gpiod.pddr),
128
+                gpiod.pd4.into_pull_up_input(&mut gpiod.pddr),
129
+            ),
130
+            right_switches: (
131
+                gpioa.pa13.into_pull_up_input(&mut gpioa.pddr),
132
+                gpioa.pa12.into_pull_up_input(&mut gpioa.pddr),
133
+                gpioa.pa5.into_pull_up_input(&mut gpioa.pddr),
134
+                gpioa.pa4.into_pull_up_input(&mut gpioa.pddr),
135
+            ),
136
+            als_en: gpioe.pe20.into_push_pull_output(&mut gpioe.pddr),
137
+            als: gpioe.pe21.into_floating_input(&mut gpioe.pddr),
138
+            buzzer: gpioc.pc3.into_push_pull_output(&mut gpioc.pddr),
139
+            nrf_irq: gpiob.pb0.into_pull_up_input(&mut gpiob.pddr),
140
+            nrf_cs: gpiob.pb1.into_push_pull_output(&mut gpiob.pddr),
141
+            nrf_ce: gpiob.pb2.into_push_pull_output(&mut gpiob.pddr),
142
+            nrf_pwr: gpiob.pb3.into_push_pull_output(&mut gpiob.pddr),
143
+            nrf_spi: spi1,
144
+            bme_cs: gpioc.pc2.into_push_pull_output(&mut gpioc.pddr),
145
+            display_busy: gpioc.pc4.into_pull_up_input(&mut gpioc.pddr),
146
+            display_cs: gpioc.pc8.into_push_pull_output(&mut gpioc.pddr),
147
+            display_dc: gpioc.pc9.into_push_pull_output(&mut gpioc.pddr),
148
+            display_rst: gpioc.pc10.into_push_pull_output(&mut gpioc.pddr),
149
+            display_pwr: gpioc.pc11.into_push_pull_output(&mut gpioc.pddr),
150
+
151
+            display_bme_spi: spi0,
152
+        }
153
+    }
154
+}

Loading…
Cancelar
Guardar