NASA Astrobee Robot Software  Astrobee Version:
Flight software for the Astrobee robots operating inside the International Space Station.
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
gpio.h
Go to the documentation of this file.
1 /* Copyright (c) 2017, United States Government, as represented by the
2  * Administrator of the National Aeronautics and Space Administration.
3  *
4  * All rights reserved.
5  *
6  * The Astrobee platform is licensed under the Apache License, Version 2.0
7  * (the "License"); you may not use this file except in compliance with the
8  * License. You may obtain a copy of the License at
9  *
10  * http://www.apache.org/licenses/LICENSE-2.0
11  *
12  * Unless required by applicable law or agreed to in writing, software
13  * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
14  * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
15  * License for the specific language governing permissions and limitations
16  * under the License.
17  */
18 
19 #ifndef GPIO_GPIO_H_
20 #define GPIO_GPIO_H_
21 
22 #include <stdint.h>
23 
24 namespace gpio {
25 
26 // These functions do nothing if we are not on ARM. Technically I could give
27 // the operators direct access to variables for the IO line, but I'm using
28 // functions instead so that in the event this is x86_64, nothing happens
29 // here.
30 class IOManager {
31  volatile uint32_t* gpio4_;
32  volatile uint32_t* iomux_;
33 
34  public:
35  // Constants that are specific to iMX6 DL, which is what was used on Prototype 3 LLP
36  // This is the 32bit address for device mux for output pin GPIO19
37  static constexpr uint32_t kIOMUXC_SW_MUX_CTL_PAD_GPIO19 = static_cast<uint32_t>(0x20e0220);
38  // GPIO19 PIN corresponds to signal GPIO04_IO05
39  static constexpr uint32_t kGPIO4_DR = static_cast<uint32_t>(0x20A8000);
40  static constexpr uint32_t kGPIO4_GDIR = static_cast<uint32_t>(0x20A8004);
41  static constexpr uint32_t kGPIO4_PSR = static_cast<uint32_t>(0x20A8008);
42  static constexpr uint32_t kPageSize = 4096u;
43  static constexpr uint32_t kPageLMask = kPageSize - 1;
44  static constexpr uint32_t kPageHMask = ~(kPageSize - 1);
45 
46  // To find more of these magical constants, please read i.MX 6Solo/6DualLite
47  // Applications Processor Reference Manual.
48  //
49  // Again, this is specific to Prototype 3's LLP
50 
51  IOManager();
52 
53  void InitializeGPIO19();
54  void ToggleGPIO19();
55 };
56 
57 } // end namespace gpio
58 
59 #endif // GPIO_GPIO_H_
gpio::IOManager::kPageHMask
static constexpr uint32_t kPageHMask
Definition: gpio.h:44
gpio::IOManager
Definition: gpio.h:30
gpio::IOManager::kPageLMask
static constexpr uint32_t kPageLMask
Definition: gpio.h:43
gpio::IOManager::ToggleGPIO19
void ToggleGPIO19()
Definition: gpio.cc:80
gpio::IOManager::kGPIO4_PSR
static constexpr uint32_t kGPIO4_PSR
Definition: gpio.h:41
gpio::IOManager::kGPIO4_DR
static constexpr uint32_t kGPIO4_DR
Definition: gpio.h:39
gpio
Definition: GPIO.h:28
gpio::IOManager::kIOMUXC_SW_MUX_CTL_PAD_GPIO19
static constexpr uint32_t kIOMUXC_SW_MUX_CTL_PAD_GPIO19
Definition: gpio.h:37
gpio::IOManager::InitializeGPIO19
void InitializeGPIO19()
Definition: gpio.cc:79
gpio::IOManager::kPageSize
static constexpr uint32_t kPageSize
Definition: gpio.h:42
gpio::IOManager::kGPIO4_GDIR
static constexpr uint32_t kGPIO4_GDIR
Definition: gpio.h:40
gpio::IOManager::IOManager
IOManager()
Definition: gpio.cc:78