mirror of
https://github.com/ArduPilot/ardupilot
synced 2025-02-20 14:54:09 -04:00
AP_HAL_Linux: GPIO: reduce macro and variable scopes
Also change the coding style in a few places.
This commit is contained in:
parent
4f14b9b7e2
commit
1d9d0a40db
@ -20,23 +20,39 @@
|
||||
#include "GPIO.h"
|
||||
#include "Util_RPI.h"
|
||||
|
||||
// Raspberry Pi GPIO memory
|
||||
#define BCM2708_PERI_BASE 0x20000000
|
||||
#define BCM2709_PERI_BASE 0x3F000000
|
||||
#define GPIO_BASE(address) (address + 0x200000)
|
||||
|
||||
// GPIO setup. Always use INP_GPIO(x) before OUT_GPIO(x) or SET_GPIO_ALT(x,y)
|
||||
#define GPIO_MODE_IN(g) *(_gpio+((g)/10)) &= ~(7<<(((g)%10)*3))
|
||||
#define GPIO_MODE_OUT(g) *(_gpio+((g)/10)) |= (1<<(((g)%10)*3))
|
||||
#define GPIO_MODE_ALT(g,a) *(_gpio+(((g)/10))) |= (((a)<=3?(a)+4:(a)==4?3:2)<<(((g)%10)*3))
|
||||
#define GPIO_SET_HIGH *(_gpio+7) // sets bits which are 1
|
||||
#define GPIO_SET_LOW *(_gpio+10) // clears bits which are 1
|
||||
#define GPIO_GET(g) (*(_gpio+13)&(1<<g)) // 0 if LOW, (1<<g) if HIGH
|
||||
|
||||
using namespace Linux;
|
||||
|
||||
static const AP_HAL::HAL& hal = AP_HAL::get_HAL();
|
||||
static const AP_HAL::HAL &hal = AP_HAL::get_HAL();
|
||||
|
||||
GPIO_RPI::GPIO_RPI()
|
||||
{}
|
||||
{
|
||||
}
|
||||
|
||||
void GPIO_RPI::init()
|
||||
{
|
||||
int rpi_version = UtilRPI::from(hal.util)->get_rpi_version();
|
||||
uint32_t gpio_address = rpi_version == 1 ? GPIO_BASE(BCM2708_PERI_BASE) : GPIO_BASE(BCM2709_PERI_BASE);
|
||||
// open /dev/mem
|
||||
if ((mem_fd = open("/dev/mem", O_RDWR|O_SYNC) ) < 0) {
|
||||
|
||||
int mem_fd = open("/dev/mem", O_RDWR|O_SYNC);
|
||||
if (mem_fd < 0) {
|
||||
AP_HAL::panic("Can't open /dev/mem");
|
||||
}
|
||||
|
||||
// mmap GPIO
|
||||
gpio_map = mmap(
|
||||
void *gpio_map = mmap(
|
||||
NULL, // Any adddress in our space will do
|
||||
BLOCK_SIZE, // Map length
|
||||
PROT_READ|PROT_WRITE, // Enable reading & writting to mapped memory
|
||||
@ -51,7 +67,7 @@ void GPIO_RPI::init()
|
||||
AP_HAL::panic("Can't open /dev/mem");
|
||||
}
|
||||
|
||||
gpio = (volatile uint32_t *)gpio_map; // Always use volatile pointer!
|
||||
_gpio = (volatile uint32_t *)gpio_map;
|
||||
}
|
||||
|
||||
void GPIO_RPI::pinMode(uint8_t pin, uint8_t output)
|
||||
@ -103,7 +119,8 @@ void GPIO_RPI::toggle(uint8_t pin)
|
||||
}
|
||||
|
||||
/* Alternative interface: */
|
||||
AP_HAL::DigitalSource* GPIO_RPI::channel(uint16_t n) {
|
||||
AP_HAL::DigitalSource* GPIO_RPI::channel(uint16_t n)
|
||||
{
|
||||
return new DigitalSource(n);
|
||||
}
|
||||
|
||||
|
@ -6,57 +6,35 @@
|
||||
#define LOW 0
|
||||
#define HIGH 1
|
||||
|
||||
// Raspberry Pi GPIO memory
|
||||
#define BCM2708_PERI_BASE 0x20000000
|
||||
#define BCM2709_PERI_BASE 0x3F000000
|
||||
#define GPIO_BASE(address) (address + 0x200000)
|
||||
#define PWM_BASE(address) (address + 0x20C000) /* PWM controller */
|
||||
#define CLOCK_BASE(address) (address + 0x101000)
|
||||
|
||||
#define PWM_CTL 0
|
||||
#define PWM_RNG1 4
|
||||
#define PWM_DAT1 5
|
||||
|
||||
#define PWMCLK_CNTL 40
|
||||
#define PWMCLK_DIV 41
|
||||
|
||||
#define PAGE_SIZE (4*1024)
|
||||
#define BLOCK_SIZE (4*1024)
|
||||
|
||||
// GPIO setup. Always use INP_GPIO(x) before OUT_GPIO(x) or SET_GPIO_ALT(x,y)
|
||||
#define GPIO_MODE_IN(g) *(gpio+((g)/10)) &= ~(7<<(((g)%10)*3))
|
||||
#define GPIO_MODE_OUT(g) *(gpio+((g)/10)) |= (1<<(((g)%10)*3))
|
||||
#define GPIO_MODE_ALT(g,a) *(gpio+(((g)/10))) |= (((a)<=3?(a)+4:(a)==4?3:2)<<(((g)%10)*3))
|
||||
#define GPIO_SET_HIGH *(gpio+7) // sets bits which are 1
|
||||
#define GPIO_SET_LOW *(gpio+10) // clears bits which are 1
|
||||
#define GPIO_GET(g) (*(gpio+13)&(1<<g)) // 0 if LOW, (1<<g) if HIGH
|
||||
|
||||
// Raspberry Pi GPIO mapping
|
||||
#define RPI_GPIO_2 2 // Pin 3 SDA
|
||||
#define RPI_GPIO_3 3 // Pin 5 SCL
|
||||
#define RPI_GPIO_4 4 // Pin 7 BH_PCA9685_OE
|
||||
#define RPI_GPIO_5 5 // Pin 29 BH_PWM_INPUT_0
|
||||
#define RPI_GPIO_6 6 // Pin 31 BH_PWM_INPUT_1
|
||||
#define RPI_GPIO_7 7 // Pin 26 CE1 MPU9250_CS
|
||||
#define RPI_GPIO_8 8 // Pin 24 CE0 UBLOX_CS
|
||||
#define RPI_GPIO_9 9 // Pin 21 MISO
|
||||
#define RPI_GPIO_10 10 // Pin 19 MOSI
|
||||
#define RPI_GPIO_11 11 // Pin 23 SCLK
|
||||
#define RPI_GPIO_12 12 // Pin 32 BH_PWM_INPUT_2
|
||||
#define RPI_GPIO_13 13 // Pin 33 BH_PWM_INPUT_3
|
||||
#define RPI_GPIO_14 14 // Pin 8 TxD
|
||||
#define RPI_GPIO_15 15 // Pin 10 RxD
|
||||
#define RPI_GPIO_2 2 // Pin 3
|
||||
#define RPI_GPIO_3 3 // Pin 5
|
||||
#define RPI_GPIO_4 4 // Pin 7
|
||||
#define RPI_GPIO_5 5 // Pin 29
|
||||
#define RPI_GPIO_6 6 // Pin 31
|
||||
#define RPI_GPIO_7 7 // Pin 26
|
||||
#define RPI_GPIO_8 8 // Pin 24
|
||||
#define RPI_GPIO_9 9 // Pin 21
|
||||
#define RPI_GPIO_10 10 // Pin 19
|
||||
#define RPI_GPIO_11 11 // Pin 23
|
||||
#define RPI_GPIO_12 12 // Pin 32
|
||||
#define RPI_GPIO_13 13 // Pin 33
|
||||
#define RPI_GPIO_14 14 // Pin 8
|
||||
#define RPI_GPIO_15 15 // Pin 10
|
||||
#define RPI_GPIO_16 16 // Pin 36
|
||||
#define RPI_GPIO_17 17 // Pin 11 UART_PORT_5
|
||||
#define RPI_GPIO_18 18 // Pin 12 UART_PORT_4
|
||||
#define RPI_GPIO_19 19 // Pin 35 BH_PWM_INPUT_4
|
||||
#define RPI_GPIO_20 20 // Pin 38 BH_PWM_INPUT_5
|
||||
#define RPI_GPIO_21 21 // Pin 40 BH_PWM_INPUT_6
|
||||
#define RPI_GPIO_22 22 // Pin 15 UBLOX_PPS
|
||||
#define RPI_GPIO_23 23 // Pin 16 MPU9250_DRDY BH_MPU6050_INTA
|
||||
#define RPI_GPIO_24 24 // Pin 18 SPI_PORT_6
|
||||
#define RPI_GPIO_25 25 // Pin 22 SPI_PORT_5
|
||||
#define RPI_GPIO_26 26 // Pin 37 BH_PWM_INPUT_7
|
||||
#define RPI_GPIO_17 17 // Pin 11
|
||||
#define RPI_GPIO_18 18 // Pin 12
|
||||
#define RPI_GPIO_19 19 // Pin 35
|
||||
#define RPI_GPIO_20 20 // Pin 38
|
||||
#define RPI_GPIO_21 21 // Pin 40
|
||||
#define RPI_GPIO_22 22 // Pin 15
|
||||
#define RPI_GPIO_23 23 // Pin 16
|
||||
#define RPI_GPIO_24 24 // Pin 18
|
||||
#define RPI_GPIO_25 25 // Pin 22
|
||||
#define RPI_GPIO_26 26 // Pin 37
|
||||
#define RPI_GPIO_27 27 // Pin 13
|
||||
#define RPI_GPIO_28 28 // Pin 3
|
||||
#define RPI_GPIO_29 29 // Pin 4
|
||||
@ -64,11 +42,6 @@
|
||||
#define RPI_GPIO_31 31 // Pin 6
|
||||
|
||||
class Linux::GPIO_RPI : public AP_HAL::GPIO {
|
||||
private:
|
||||
int mem_fd;
|
||||
void *gpio_map;
|
||||
volatile uint32_t *gpio;
|
||||
|
||||
public:
|
||||
GPIO_RPI();
|
||||
void init();
|
||||
@ -88,4 +61,7 @@ public:
|
||||
|
||||
/* return true if USB cable is connected */
|
||||
bool usb_connected(void);
|
||||
|
||||
private:
|
||||
volatile uint32_t *_gpio;
|
||||
};
|
||||
|
Loading…
Reference in New Issue
Block a user