Skip to content

Fix issue with header include. #128

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Oct 10, 2017
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions cores/arduino/Arduino.h
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ void yield(void);
} // extern "C"
#endif // __cplusplus

// Include board variant
#include "pins_arduino.h"
// Include pins variant
#include "pins_arduino_var.h"

#endif // Arduino_h
1 change: 1 addition & 0 deletions cores/arduino/pins_arduino.c
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
*/

#include "pins_arduino.h"
#include "pins_arduino_var.h"

#ifdef __cplusplus
extern "C" {
Expand Down
103 changes: 23 additions & 80 deletions cores/arduino/pins_arduino.h
Original file line number Diff line number Diff line change
Expand Up @@ -19,12 +19,6 @@
#define _PINS_ARDUINO_H_

#include "PeripheralPins.h"
#include "pins_arduino_common.h"
#include "variant.h"

#ifdef __cplusplus
extern "C" {
#endif

/**
* Libc porting layers
Expand All @@ -34,79 +28,28 @@ extern "C" {
#define WEAK __attribute__ ((weak))
#endif

#define NOT_AN_INTERRUPT NC // -1
#define DEND PEND
#define NUM_DIGITAL_PINS ((uint32_t)DEND)
#define NUM_ANALOG_INPUTS ((uint32_t)(AEND-A0))

// Convert a digital pin number Dxx to a PinName PX_n
// Note: Analog pin is also a digital pin.
#define digitalPinToPinName(p) (((uint32_t)p < NUM_DIGITAL_PINS) ? digitalPin[p] : NC)
// Convert a PinName PX_n to a digital pin number
uint32_t pinNametoDigitalPin(PinName p);

// Convert an analog pin number to a digital pin number
// Used by analogRead api to have A0 == 0
#define analogInputToDigitalPin(p) (((uint32_t)p < NUM_ANALOG_INPUTS) ? (p+A0) : p)
// Convert an analog pin number Axx to a PinName PX_n
#define analogInputToPinName(p) (digitalPinToPinName(analogInputToDigitalPin(p)))
// All pins could manage EXTI
#define digitalPinToInterrupt(p) (digitalPinIsValid(p) ? p : NOT_AN_INTERRUPT)

#define digitalPinHasI2C(p) (pin_in_pinmap(digitalPinToPinName(p), PinMap_I2C_SDA) ||\
pin_in_pinmap(digitalPinToPinName(p), PinMap_I2C_SCL))
#define digitalPinHasPWM(p) (pin_in_pinmap(digitalPinToPinName(p), PinMap_PWM))
#define digitalPinHasSerial(p) (pin_in_pinmap(digitalPinToPinName(p), PinMap_UART_RX) ||\
pin_in_pinmap(digitalPinToPinName(p), PinMap_UART_TX))
#define digitalPinHasSPI(p) (pin_in_pinmap(digitalPinToPinName(p), PinMap_SPI_MOSI) ||\
pin_in_pinmap(digitalPinToPinName(p), PinMap_SPI_MISO) ||\
pin_in_pinmap(digitalPinToPinName(p), PinMap_SPI_SCLK) ||\
pin_in_pinmap(digitalPinToPinName(p), PinMap_SPI_SSEL))


#define digitalPinToPort(p) (get_GPIO_Port(STM_PORT(digitalPinToPinName(p))))
#define digitalPinToBitMask(p) (STM_GPIO_PIN(digitalPinToPinName(p)))

#define analogInPinToBit(p) (STM_PIN(digitalPinToPinName(p)))
#define portOutputRegister(P) (&(P->ODR))
#define portInputRegister(P) (&(P->IDR))

#define portSetRegister(P) (&(P->BSRR))
#if defined(STM32F2xx) || defined(STM32F4xx) || defined(STM32F7xx)
// For those series reset are in the high part so << 16U needed
#define portClearRegister(P) (&(P->BSRR))
#else
#define portClearRegister(P) (&(P->BRR))
#endif


#if defined(STM32F1xx)
// Config registers split in 2 registers:
// CRL: pin 0..7
// CRH: pin 8..15
// Return only CRL
#define portModeRegister(P) (&(P->CRL))
#else
#define portModeRegister(P) (&(P->MODER))
#endif
#define portConfigRegister(P) (portModeRegister(P))


#define digitalPinIsValid(p) (digitalPinToPinName(p) != NC)

// As some pin could be duplicated in digitalPin[]
// return first occurence of linked PinName (PYx)
#define digitalPinFirstOccurence(p) (pinNametoDigitalPin(digitalPinToPinName(p)))

// Specific for Firmata. As some pins could be duplicated,
// ensure 'p' is not one of the serial pins
#if defined(PIN_SERIAL_RX) && defined(PIN_SERIAL_TX)
#define pinIsSerial(p) ((digitalPinFirstOccurence(p) == PIN_SERIAL_RX) ||\
(digitalPinFirstOccurence(p) == PIN_SERIAL_TX))
#endif

#ifdef __cplusplus
}
#endif
// Arduino digital pin alias
// GPIO port (A to K) * 16 pins: 176
enum {
D0, D1, D2, D3, D4, D5, D6, D7, D8, D9,
D10, D11, D12, D13, D14, D15, D16, D17, D18, D19,
D20, D21, D22, D23, D24, D25, D26, D27, D28, D29,
D30, D31, D32, D33, D34, D35, D36, D37, D38, D39,
D40, D41, D42, D43, D44, D45, D46, D47, D48, D49,
D50, D51, D52, D53, D54, D55, D56, D57, D58, D59,
D60, D61, D62, D63, D64, D65, D66, D67, D68, D69,
D70, D71, D72, D73, D74, D75, D76, D77, D78, D79,
D80, D81, D82, D83, D84, D85, D86, D87, D88, D89,
D90, D91, D92, D93, D94, D95, D96, D97, D98, D99,
D100, D101, D102, D103, D104, D105, D106, D107, D108, D109,
D110, D111, D112, D113, D114, D115, D116, D117, D118, D119,
D120, D121, D122, D123, D124, D125, D126, D127, D128, D129,
D130, D131, D132, D133, D134, D135, D136, D137, D138, D139,
D140, D141, D142, D143, D144, D145, D146, D147, D148, D149,
D150, D151, D152, D153, D154, D155, D156, D157, D158, D159,
D160, D161, D162, D163, D164, D165, D166, D167, D168, D169,
D170, D171, D172, D173, D174, D175,
DMAX
};

#endif /*_PINS_ARDUINO_H_*/
50 changes: 0 additions & 50 deletions cores/arduino/pins_arduino_common.h

This file was deleted.

108 changes: 108 additions & 0 deletions cores/arduino/pins_arduino_var.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,108 @@
/*
* Variant pins Arduino definition
*
* Copyright (C) 2017, STMicroelectronics - All Rights Reserved
* Author: Frederic Pillon for STMicroelectronics.
*
* License type: GPLv2
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 as published by
* the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
* or FITNESS FOR A PARTICULAR PURPOSE.
* See the GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along with
* this program. If not, see
* <http://www.gnu.org/licenses/>.
*/
#ifndef _PINS_ARDUINO_VAR_H_
#define _PINS_ARDUINO_VAR_H_

// Include board variant
#include "variant.h"

#ifdef __cplusplus
extern "C" {
#endif

#define NOT_AN_INTERRUPT NC // -1
#define DEND PEND
#define NUM_DIGITAL_PINS ((uint32_t)DEND)
#define NUM_ANALOG_INPUTS ((uint32_t)(AEND-A0))

// Convert a digital pin number Dxx to a PinName PX_n
// Note: Analog pin is also a digital pin.
#define digitalPinToPinName(p) (((uint32_t)p < NUM_DIGITAL_PINS) ? digitalPin[p] : NC)
// Convert a PinName PX_n to a digital pin number
uint32_t pinNametoDigitalPin(PinName p);

// Convert an analog pin number to a digital pin number
// Used by analogRead api to have A0 == 0
#define analogInputToDigitalPin(p) (((uint32_t)p < NUM_ANALOG_INPUTS) ? (p+A0) : p)
// Convert an analog pin number Axx to a PinName PX_n
#define analogInputToPinName(p) (digitalPinToPinName(analogInputToDigitalPin(p)))
// All pins could manage EXTI
#define digitalPinToInterrupt(p) (digitalPinIsValid(p) ? p : NOT_AN_INTERRUPT)

#define digitalPinHasI2C(p) (pin_in_pinmap(digitalPinToPinName(p), PinMap_I2C_SDA) ||\
pin_in_pinmap(digitalPinToPinName(p), PinMap_I2C_SCL))
#define digitalPinHasPWM(p) (pin_in_pinmap(digitalPinToPinName(p), PinMap_PWM))
#define digitalPinHasSerial(p) (pin_in_pinmap(digitalPinToPinName(p), PinMap_UART_RX) ||\
pin_in_pinmap(digitalPinToPinName(p), PinMap_UART_TX))
#define digitalPinHasSPI(p) (pin_in_pinmap(digitalPinToPinName(p), PinMap_SPI_MOSI) ||\
pin_in_pinmap(digitalPinToPinName(p), PinMap_SPI_MISO) ||\
pin_in_pinmap(digitalPinToPinName(p), PinMap_SPI_SCLK) ||\
pin_in_pinmap(digitalPinToPinName(p), PinMap_SPI_SSEL))


#define digitalPinToPort(p) (get_GPIO_Port(STM_PORT(digitalPinToPinName(p))))
#define digitalPinToBitMask(p) (STM_GPIO_PIN(digitalPinToPinName(p)))

#define analogInPinToBit(p) (STM_PIN(digitalPinToPinName(p)))
#define portOutputRegister(P) (&(P->ODR))
#define portInputRegister(P) (&(P->IDR))

#define portSetRegister(P) (&(P->BSRR))
#if defined(STM32F2xx) || defined(STM32F4xx) || defined(STM32F7xx)
// For those series reset are in the high part so << 16U needed
#define portClearRegister(P) (&(P->BSRR))
#else
#define portClearRegister(P) (&(P->BRR))
#endif


#if defined(STM32F1xx)
// Config registers split in 2 registers:
// CRL: pin 0..7
// CRH: pin 8..15
// Return only CRL
#define portModeRegister(P) (&(P->CRL))
#else
#define portModeRegister(P) (&(P->MODER))
#endif
#define portConfigRegister(P) (portModeRegister(P))


#define digitalPinIsValid(p) (digitalPinToPinName(p) != NC)

// As some pin could be duplicated in digitalPin[]
// return first occurence of linked PinName (PYx)
#define digitalPinFirstOccurence(p) (pinNametoDigitalPin(digitalPinToPinName(p)))

// Specific for Firmata. As some pins could be duplicated,
// ensure 'p' is not one of the serial pins
#if defined(PIN_SERIAL_RX) && defined(PIN_SERIAL_TX)
#define pinIsSerial(p) ((digitalPinFirstOccurence(p) == PIN_SERIAL_RX) ||\
(digitalPinFirstOccurence(p) == PIN_SERIAL_TX))
#endif

#ifdef __cplusplus
}
#endif

#endif /*_PINS_ARDUINO_VAR_H_*/