application: Set up pins for the GPS.
authorTilman Sauerbeck <tilman@code-monkey.de>
Mon, 30 Dec 2019 10:42:42 +0000 (11:42 +0100)
committerTilman Sauerbeck <tilman@code-monkey.de>
Sun, 5 Jan 2020 19:38:11 +0000 (20:38 +0100)
This configures UART0 as well as the GPS' reset line.

src/application/main.rs

index dffa4ee189ebeb1e724057499e0a0b095519b05f..edb234eae4fafe355e3541c1dbdfb9cb80c52ddc 100644 (file)
@@ -36,6 +36,7 @@ use common::port;
 use common::gpio;
 use common::nvic;
 use common::i2c;
+use common::uart;
 use common::usb_serial;
 use common::display;
 
@@ -64,6 +65,14 @@ pub unsafe extern "C" fn _start() -> ! {
     gpio::set_direction(gpio::GPIOB, 1 << 16, gpio::Direction::Output);
     port::set_af(port::PORTB, 16, 1);
 
+    // Configure pins for UART0.
+    port::set_af(port::PORTE, 20, 4);
+    port::set_af(port::PORTE, 21, 4);
+
+    // Configure pin for the GPS's reset line.
+    gpio::set_direction(gpio::GPIOB, 1 << 1, gpio::Direction::Output);
+    port::set_af(port::PORTB, 1, 1);
+
     // Configure upper right push button.
     gpio::set_direction(gpio::GPIOA, 1 << 12, gpio::Direction::Input);
     port::set_af(port::PORTA, 12, 1);
@@ -81,6 +90,15 @@ pub unsafe extern "C" fn _start() -> ! {
     display.init();
     display.clear();
 
+    // Hold GPS in reset while configuring its UART.
+    gpio::clear(gpio::GPIOB, 1);
+    systick::delay_ms(50);
+    uart::configure(uart::UART0);
+    systick::delay_ms(50);
+    gpio::set(gpio::GPIOB, 1);
+
+    nvic::enable_irq(12); // UART0
+
     loop {
         systick::delay_ms(1000);