kstmApp/src/pi_2_mmio.h
author Heinz Junkes <junkes@fhi-berlin.mpg.de>
Fri, 14 Aug 2015 11:30:43 +0200
changeset 0 bd6bb22c6533
permissions -rw-r--r--
First import
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
bd6bb22c6533 First import
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
     1
// Copyright (c) 2014 Adafruit Industries
bd6bb22c6533 First import
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
     2
// Author: Tony DiCola
bd6bb22c6533 First import
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
     3
// Based on code from Gert van Loo & Dom: http://elinux.org/RPi_Low-level_peripherals#GPIO_Code_examples
bd6bb22c6533 First import
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
     4
bd6bb22c6533 First import
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
     5
// Permission is hereby granted, free of charge, to any person obtaining a copy
bd6bb22c6533 First import
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
     6
// of this software and associated documentation files (the "Software"), to deal
bd6bb22c6533 First import
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
     7
// in the Software without restriction, including without limitation the rights
bd6bb22c6533 First import
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
     8
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
bd6bb22c6533 First import
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
     9
// copies of the Software, and to permit persons to whom the Software is
bd6bb22c6533 First import
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    10
// furnished to do so, subject to the following conditions:
bd6bb22c6533 First import
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    11
bd6bb22c6533 First import
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    12
// The above copyright notice and this permission notice shall be included in all
bd6bb22c6533 First import
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    13
// copies or substantial portions of the Software.
bd6bb22c6533 First import
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    14
bd6bb22c6533 First import
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    15
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
bd6bb22c6533 First import
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    16
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
bd6bb22c6533 First import
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    17
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
bd6bb22c6533 First import
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    18
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
bd6bb22c6533 First import
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    19
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
bd6bb22c6533 First import
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    20
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
bd6bb22c6533 First import
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    21
// SOFTWARE.
bd6bb22c6533 First import
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    22
bd6bb22c6533 First import
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    23
// Simple fast memory-mapped GPIO library for the Raspberry Pi.
bd6bb22c6533 First import
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    24
#ifndef PI_2_MMIO_H
bd6bb22c6533 First import
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    25
#define PI_2_MMIO_H
bd6bb22c6533 First import
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    26
bd6bb22c6533 First import
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    27
#include <stdint.h>
bd6bb22c6533 First import
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    28
bd6bb22c6533 First import
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    29
#define MMIO_SUCCESS 0
bd6bb22c6533 First import
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    30
#define MMIO_ERROR_DEVMEM -1
bd6bb22c6533 First import
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    31
#define MMIO_ERROR_MMAP -2
bd6bb22c6533 First import
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    32
#define MMIO_ERROR_OFFSET -3
bd6bb22c6533 First import
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    33
bd6bb22c6533 First import
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    34
volatile uint32_t* pi_2_mmio_gpio;
bd6bb22c6533 First import
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    35
bd6bb22c6533 First import
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    36
int pi_2_mmio_init(void);
bd6bb22c6533 First import
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    37
bd6bb22c6533 First import
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    38
static inline void pi_2_mmio_set_input(const int gpio_number) {
bd6bb22c6533 First import
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    39
  // Set GPIO register to 000 for specified GPIO number.
bd6bb22c6533 First import
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    40
  *(pi_2_mmio_gpio+((gpio_number)/10)) &= ~(7<<(((gpio_number)%10)*3));
bd6bb22c6533 First import
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    41
}
bd6bb22c6533 First import
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    42
bd6bb22c6533 First import
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    43
static inline void pi_2_mmio_set_output(const int gpio_number) {
bd6bb22c6533 First import
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    44
  // First set to 000 using input function.
bd6bb22c6533 First import
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    45
  pi_2_mmio_set_input(gpio_number);
bd6bb22c6533 First import
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    46
  // Next set bit 0 to 1 to set output.
bd6bb22c6533 First import
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    47
  *(pi_2_mmio_gpio+((gpio_number)/10)) |=  (1<<(((gpio_number)%10)*3));
bd6bb22c6533 First import
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    48
}
bd6bb22c6533 First import
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    49
bd6bb22c6533 First import
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    50
static inline void pi_2_mmio_set_high(const int gpio_number) {
bd6bb22c6533 First import
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    51
  *(pi_2_mmio_gpio+7) = 1 << gpio_number;
bd6bb22c6533 First import
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    52
}
bd6bb22c6533 First import
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    53
bd6bb22c6533 First import
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    54
static inline void pi_2_mmio_set_low(const int gpio_number) {
bd6bb22c6533 First import
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    55
  *(pi_2_mmio_gpio+10) = 1 << gpio_number;
bd6bb22c6533 First import
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    56
}
bd6bb22c6533 First import
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    57
bd6bb22c6533 First import
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    58
static inline uint32_t pi_2_mmio_input(const int gpio_number) {
bd6bb22c6533 First import
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    59
  return *(pi_2_mmio_gpio+13) & (1 << gpio_number);
bd6bb22c6533 First import
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    60
}
bd6bb22c6533 First import
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    61
bd6bb22c6533 First import
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    62
#endif