Skip to content

Commit

Permalink
Prepare Arduino Core NRF5 compatibility
Browse files Browse the repository at this point in the history
  • Loading branch information
d00616 committed Nov 19, 2017
1 parent 457e711 commit 4533429
Show file tree
Hide file tree
Showing 17 changed files with 866 additions and 247 deletions.
4 changes: 2 additions & 2 deletions .ci/arduino.groovy
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ def buildnRF52832(config, sketches, String key) {
def fqbn = '-fqbn=MySensors:nRF5:MyBoard_nRF52832:bootcode=none,lfclk=lfxo,reset=notenable -prefs build.f_cpu=16000000 -prefs build.mcu=cortex-m4'
config.pr.setBuildStatus(config, 'PENDING', 'Toll gate (nRF52832 - '+key+')', 'Building...', '${BUILD_URL}flowGraphTable/')
try {
buildArduino(config, fqbn, config.repository_root+'libraries/MyNRF5Board/examples/MyNRF5Board/MyNRF5Board.ino', key+'_nRF52832')
buildArduino(config, fqbn, config.repository_root+'libraries/MyBoardNRF5/examples/MyBoardNRF5/MyBoardNRF5.ino', key+'_nRF52832')
} catch (ex) {
echo "Build failed with: "+ ex.toString()
config.pr.setBuildStatus(config, 'FAILURE', 'Toll gate (nRF52832 - '+key+')', 'Build error', '${BUILD_URL}')
Expand All @@ -66,7 +66,7 @@ def buildnRF51822(config, sketches, String key) {
def fqbn = '-fqbn=MySensors:nRF5:MyBoard_nRF51822:chip=xxaa,bootcode=none,lfclk=lfxo -prefs build.f_cpu=16000000 -prefs build.mcu=cortex-m0'
config.pr.setBuildStatus(config, 'PENDING', 'Toll gate (nRF51822 - '+key+')', 'Building...', '${BUILD_URL}flowGraphTable/')
try {
buildArduino(config, fqbn, config.repository_root+'libraries/MyNRF5Board/examples/MyNRF5Board/MyNRF5Board.ino', key+'_nRF51822')
buildArduino(config, fqbn, config.repository_root+'libraries/MyBoardNRF5/examples/MyBoardNRF5/MyBoardNRF5.ino', key+'_nRF51822')
} catch (ex) {
echo "Build failed with: "+ ex.toString()
config.pr.setBuildStatus(config, 'FAILURE', 'Toll gate (nRF51822 - '+key+')', 'Build error', '${BUILD_URL}')
Expand Down
18 changes: 9 additions & 9 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ Current build status of master branch with respect to the master and development

Current build status of master branch with respect to the master and development branch of the MySensors library using the nightly build of the Arduino IDE: [![Build Status](https://ci.mysensors.org/job/MySensors-nightly-IDE/job/ArduinoHwNRF5/job/master/badge/icon)](https://ci.mysensors.org/job/MySensors-nightly-IDE/job/ArduinoHwNRF5/job/master/)

## MyNRF5Board
## MyBoardNRF5

This repository allows managing the nRF5 pin mapping as part of your code.
You can use the method for any nRF51822 or nRF52832 board or module.
Expand All @@ -24,27 +24,27 @@ To use the custom pin mapping you have to do following steps:
https://github.com/sandeepmistry/arduino-nRF5/
2. Install the "My Sensors nRF5 Boards" with the board manager like
explained at https://github.com/mysensors/ArduinoBoards
3. Copy the files "MyNRF5Board.cpp" and "MyNRF5Board.h" from
"MyNRF5Board" example into your sketch.
4. Modify pin mappings in "MyNRF5Board.cpp" and "MyNRF5Board.h" to fit
3. Copy the files "MyBoardNRF5.cpp" and "MyBoardNRF5.h" from
"MyBoardNRF5" example into your sketch.
4. Modify pin mappings in "MyBoardNRF5.cpp" and "MyBoardNRF5.h" to fit
your requirements.
5. Select "MyNRF5Board nrf52832" or "MyNRF5Board nrf52822" as your board.
5. Select "MyBoardNRF5 nrf52832" or "MyBoardNRF5 nrf52822" as your board.
Choose the correct parameters and programmer in the Tools menu.

### MyNRF5Board.h
### MyBoardNRF5.h

This file allows you to change the pins of internal hardware, like the
serial port, SPI bus or Wire bus.

All pins referenced here are mapped via the "g_ADigitalPinMap" Array
defined in "MyNRF5Board.cpp" to pins of the MCU.
defined in "MyBoardNRF5.cpp" to pins of the MCU.

As an example, if you have at the third position in "g_ADigitalPinMap" the
12, then all ports referenced in Arduino with 2 are mapped to P0.12. If you
don't change the "g_ADigitalPinMap" Array, the Arduino pins 0..31 are
translated to P0.00..P0..31.

### MyNRF5Board.cpp
### MyBoardNRF5.cpp

This file allows you to change the relation between pins referenced in
the Arduino IDE (0..31) and pins of the nRF5 MCU (P0.00..P0.31).
Expand All @@ -65,7 +65,7 @@ The pin mapping effects commands like "pinMode()", "digitalWrite()",
"analogRead()" and "analogWrite()".

If you change the pin mapping, you have to modify the pins in
"MyNRF5Board.h". Especially the analog pin mapping must be replaced with
"MyBoardNRF5.h". Especially the analog pin mapping must be replaced with
your pin numbers by replacing PIN_AIN0..7 with a number of your mapping
array. You can use the constants PIN_AIN0..7 in the "g_ADigitalPinMap"
Array if you want to reference analog ports MCU independent. You cannot
Expand Down
16 changes: 8 additions & 8 deletions boards.txt
Original file line number Diff line number Diff line change
Expand Up @@ -21,13 +21,13 @@ menu.bootcode=Bootloader/SD
menu.lfclk=Low Frequency Clock
menu.reset=Reset

# MyNRF5Board nRF52832
# MyBoardNRF5 nRF52832
# Board definition is expected in
# MyBoard.cpp and MyBoard.h as part
# of the sketch
###################################

MyBoard_nRF52832.name=MyNRF5Board nRF52832
MyBoard_nRF52832.name=MyBoardNRF5 nRF52832

MyBoard_nRF52832.bootloader.tool=sandeepmistry:openocd

Expand All @@ -39,9 +39,9 @@ MyBoard_nRF52832.build.mcu=cortex-m4
MyBoard_nRF52832.build.f_cpu=16000000
MyBoard_nRF52832.build.board=GENERIC
MyBoard_nRF52832.build.core=sandeepmistry:nRF5
MyBoard_nRF52832.build.variant=MyNRF5Board
MyBoard_nRF52832.build.variant=MyBoardNRF5
MyBoard_nRF52832.build.variant_system_lib=
# -I{build.path} and -DMYNRF5BOARD is only required by MyNRF5Board
# -I{build.path} and -DMYNRF5BOARD is only required by MyBoardNRF5
MyBoard_nRF52832.build.extra_flags=-DNRF52 -DMYNRF5BOARD -I{build.path}
MyBoard_nRF52832.build.float_flags=-mfloat-abi=hard -mfpu=fpv4-sp-d16
MyBoard_nRF52832.build.ldscript=nrf52_xxaa.ld
Expand All @@ -68,13 +68,13 @@ MyBoard_nRF52832.menu.reset.enabled=Enable
MyBoard_nRF52832.menu.reset.enabled.build.reset_flags=-DCONFIG_GPIO_AS_PINRESET


# MyNRF5Board nRF51822
# MyBoardNRF5 nRF51822
# Board definition is expected in
# MyBoard.cpp and MyBoard.h as part
# of the sketch
###################################

MyBoard_nRF51822.name=MyNRF5Board nRF51822
MyBoard_nRF51822.name=MyBoardNRF5 nRF51822
MyBoard_nRF51822.bootloader.tool=sandeepmistry:openocd
MyBoard_nRF51822.upload.tool=sandeepmistry:openocd
MyBoard_nRF51822.upload.target=nrf51
Expand All @@ -84,9 +84,9 @@ MyBoard_nRF51822.build.mcu=cortex-m0
MyBoard_nRF51822.build.f_cpu=16000000
MyBoard_nRF51822.build.board=GENERIC
MyBoard_nRF51822.build.core=sandeepmistry:nRF5
MyBoard_nRF51822.build.variant=MyNRF5Board
MyBoard_nRF51822.build.variant=MyBoardNRF5
MyBoard_nRF51822.build.variant_system_lib=
# -I{build.path} and -DMYNRF5BOARD is only required by MyNRF5Board
# -I{build.path} and -DMYNRF5BOARD is only required by MyBoardNRF5
MyBoard_nRF51822.build.extra_flags=-DNRF51 -DMYNRF5BOARD -I{build.path}
MyBoard_nRF51822.build.float_flags=
MyBoard_nRF51822.build.ldscript=nrf51_{build.chip}.ld
Expand Down
File renamed without changes.
107 changes: 107 additions & 0 deletions libraries/MyBoardNRF5/examples/MyBoardNRF5/MyBoardNRF5.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,107 @@
/*
If you don't use an nRF5 board, you can ignore this file.
This file was part of the "My Sensors nRF5 Boards" board repository
available at https://github.com/mysensors/ArduinoBoards If you have
questions, please refer the documentation at
https://github.com/mysensors/ArduinoHwNRF5 first.
This file is compatible with ArduinoHwNRF5 >= 0.2.0
This file allows you to change the relation between pins referenced in
the Arduino IDE (0..31) and pins of the nRF5 MCU (P0.00..P0.31).
If you can live with addressing the GPIO pins by using the Arduino pins
0..31 instead of a custom mapping, don't change this file. If you have
a lot of Arduino code with fixed pin numbers and you need to map these
pins to specific pins of the nRF5 MCU; you need to change this file.
If you fill the "g_APinDescription" Array with numbers between 0..31,
the Arduino pins 0..31 are assigned to pins P0.00..P0.31 of the MCU.
As an example, if you need to change the pin mapping for Arduino pin 5
to P0.12 of the MCU, you have to write the 12 after PORT0 into the sixth
position in the "g_APinDescription" Array.
The extended attributes only affects the nRF5 variants provided with
official Arduino boards. The arduino-nrf5 variant ignores the extended
attributes.
The pin mapping effects commands like "pinMode()", "digitalWrite()",
"analogRead()" and "analogWrite()".
If you change the pin mapping, you have to modify the pins in
"MyBoardNRF5.h". Especially the analog pin mapping must be replaced with
your pin numbers by replacing PIN_AIN0..7 with a number of your mapping
array. You can use the constants PIN_AIN0..7 in the "g_APinDescription"
Array if you want to reference analog ports MCU independent. You cannot
use the pins P0.00 and P0.01 for GPIO, when the 32kHz crystal is connected.
###########################################################################
Copyright (c) 2014-2015 Arduino LLC. All right reserved.
Copyright (c) 2016 Arduino Srl. All right reserved.
Copyright (c) 2017 Sensnology AB. All right reserved.
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
This library 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 Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/



#ifdef MYNRF5BOARD
#include <variant.h>

/*
* Pins descriptions. Attributes are ignored by arduino-nrf5 variant.
* Definition taken from Arduino Primo Core with ordered ports
*/
const PinDescription g_APinDescription[]=
{
{ NOT_A_PORT, 0, PIO_DIGITAL, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER}, // LFCLK
{ NOT_A_PORT, 1, PIO_DIGITAL, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER}, // LFCLK
{ PORT0, 2, PIO_DIGITAL, (PIN_ATTR_DIGITAL|PIN_ATTR_PWM), ADC_A0, PWM4, NOT_ON_TIMER},
{ PORT0, 3, PIO_DIGITAL, (PIN_ATTR_DIGITAL|PIN_ATTR_PWM), ADC_A1, PWM5, NOT_ON_TIMER},
{ PORT0, 4, PIO_DIGITAL, (PIN_ATTR_DIGITAL|PIN_ATTR_PWM), ADC_A2, PWM6, NOT_ON_TIMER},
{ PORT0, 5, PIO_DIGITAL, (PIN_ATTR_DIGITAL|PIN_ATTR_PWM), ADC_A3, PWM7, NOT_ON_TIMER},
{ PORT0, 6, PIO_DIGITAL, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER}, // INT3
{ PORT0, 7, PIO_DIGITAL, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER}, // INT4
{ PORT0, 8, PIO_DIGITAL, (PIN_ATTR_DIGITAL|PIN_ATTR_PWM), No_ADC_Channel, PWM10, NOT_ON_TIMER}, //USER_LED
{ PORT0, 9, PIO_DIGITAL, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER}, // NFC1
{ PORT0, 10, PIO_DIGITAL, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER}, // NFC2
{ PORT0, 11, PIO_DIGITAL, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER}, // TX
{ PORT0, 12, PIO_DIGITAL, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER}, // RX
{ PORT0, 13, PIO_DIGITAL, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER}, // SDA
{ PORT0, 14, PIO_DIGITAL, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER}, // SCL
{ PORT0, 15, PIO_DIGITAL, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER}, // SDA1
{ PORT0, 16, PIO_DIGITAL, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER}, // SCL1
{ PORT0, 17, PIO_DIGITAL, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER}, // TP4
{ PORT0, 18, PIO_DIGITAL, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER}, // TP5
{ PORT0, 19, PIO_DIGITAL, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER}, // INT2
{ PORT0, 20, PIO_DIGITAL, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER}, // INT1
{ PORT0, 21, PIO_DIGITAL, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER}, // INT1
{ PORT0, 22, PIO_DIGITAL, (PIN_ATTR_DIGITAL|PIN_ATTR_PWM), No_ADC_Channel, PWM9, NOT_ON_TIMER},
{ PORT0, 23, PIO_DIGITAL, (PIN_ATTR_DIGITAL|PIN_ATTR_PWM), No_ADC_Channel, PWM8, NOT_ON_TIMER},
{ PORT0, 24, PIO_DIGITAL, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER}, // INT
{ PORT0, 25, PIO_DIGITAL, (PIN_ATTR_DIGITAL|PIN_ATTR_PWM), No_ADC_Channel, PWM11, NOT_ON_TIMER}, //RED_LED
{ PORT0, 26, PIO_DIGITAL, (PIN_ATTR_DIGITAL|PIN_ATTR_PWM), No_ADC_Channel, PWM11, NOT_ON_TIMER}, //GREEN_LED
{ PORT0, 27, PIO_DIGITAL, (PIN_ATTR_DIGITAL|PIN_ATTR_PWM), No_ADC_Channel, PWM11, NOT_ON_TIMER}, //BLUE_LED
{ PORT0, 28, PIO_DIGITAL, (PIN_ATTR_DIGITAL|PIN_ATTR_PWM), ADC_A4, PWM3, NOT_ON_TIMER},
{ PORT0, 29, PIO_DIGITAL, (PIN_ATTR_DIGITAL|PIN_ATTR_PWM), ADC_A5, PWM2, NOT_ON_TIMER},
{ PORT0, 30, PIO_DIGITAL, (PIN_ATTR_DIGITAL|PIN_ATTR_PWM), ADC_A6, PWM1, NOT_ON_TIMER},
{ PORT0, 31, PIO_DIGITAL, (PIN_ATTR_DIGITAL|PIN_ATTR_PWM), ADC_A7, PWM0, NOT_ON_TIMER}
};

#endif
Original file line number Diff line number Diff line change
Expand Up @@ -6,13 +6,13 @@
questions, please refer the documentation at
https://github.com/mysensors/ArduinoHwNRF5 first.
This file is compatible with ArduinoHwNRF5 > 0.1.0
This file is compatible with ArduinoHwNRF5 >= 0.2.0
This file allows you to change the pins of internal hardware, like the
serial port, SPI bus or Wire bus.
All pins referenced here are mapped via the "g_ADigitalPinMap" Array
defined in "MyNRF5Board.cpp" to pins of the MCU.
defined in "MyBoardNRF5.cpp" to pins of the MCU.
As an example, if you have at the third position in "g_ADigitalPinMap" the
12, then all ports referenced in Arduino with 2 are mapped to P0.12. If you
Expand Down Expand Up @@ -64,14 +64,19 @@ extern "C"
* https://github.com/mysensors/MySensors/blob/development/drivers/NRF5/nrf5_wiring_constants.h
*
*/
#define PIN_LED1 (13)
// #define PIN_LED2 (9)
// #define PIN_LED3 (10)
// #define PIN_LED4 (11)
// #define PIN_LED5 (12)
// #define PIN_LED6 (14)
// #define PIN_LED7 (15)
// #define PIN_LED8 (16)
#define PIN_LED1 (8)
// #define PIN_LED2 (25)
// #define PIN_LED3 (26)
// #define PIN_LED4 (27)
// #define PIN_LED5 (12)
// #define PIN_LED6 (14)
// #define PIN_LED7 (15)
// #define PIN_LED8 (16)
// #define USER_LED (PIN_LED2)
// #define RED_LED (PIN_LED3)
// #define GREEN_LED (PIN_LED4)
// #define BLUE_LED (PIN_LED1)
// #define BLE_LED BLUE_LED
#define LED_BUILTIN PIN_LED1

/*
Expand All @@ -91,21 +96,21 @@ extern "C"
/*
* Analog ports
*
* If you change g_ADigitalPinMap, replace PIN_AIN0 with
* port numbers mapped by the g_ADigitalPinMap Array.
* You can add PIN_AIN0 to the g_ADigitalPinMap Array if
* If you change g_APinDescription, replace PIN_AIN0 with
* port numbers mapped by the g_APinDescription Array.
* You can add PIN_AIN0 to the g_APinDescription Array if
* you want provide analog ports MCU independed, you can add
* PIN_AIN0..PIN_AIN7 to your custom g_ADigitalPinMap Array
* defined in MyNRF5Board.cpp
* PIN_AIN0..PIN_AIN7 to your custom g_APinDescription Array
* defined in MyBoardNRF5.cpp
*/
static const uint8_t A0 = PIN_AIN0;
static const uint8_t A1 = PIN_AIN1;
static const uint8_t A2 = PIN_AIN2;
static const uint8_t A3 = PIN_AIN3;
static const uint8_t A4 = PIN_AIN4;
static const uint8_t A5 = PIN_AIN5;
static const uint8_t A6 = PIN_AIN6;
static const uint8_t A7 = PIN_AIN7;
static const uint8_t A0 = ADC_A0;
static const uint8_t A1 = ADC_A1;
static const uint8_t A2 = ADC_A2;
static const uint8_t A3 = ADC_A3;
static const uint8_t A4 = ADC_A4;
static const uint8_t A5 = ADC_A5;
static const uint8_t A6 = ADC_A6;
static const uint8_t A7 = ADC_A7;

/*
* Serial interfaces
Expand All @@ -114,10 +119,10 @@ static const uint8_t A7 = PIN_AIN7;
* If you have no serial port, use unused pins
* CTS and RTS are optional.
*/
#define PIN_SERIAL_RX (2)
#define PIN_SERIAL_TX (3)
// #define PIN_SERIAL_CTS (4)
// #define PIN_SERIAL_RTS (5)
#define PIN_SERIAL_RX (12)
#define PIN_SERIAL_TX (11)
// #define PIN_SERIAL_CTS (13)
// #define PIN_SERIAL_RTS (14)

/*
* SPI Interfaces
Expand All @@ -129,10 +134,10 @@ static const uint8_t A7 = PIN_AIN7;
*/
#define SPI_INTERFACES_COUNT 1

#define PIN_SPI_MISO (22)
#define PIN_SPI_MOSI (23)
#define PIN_SPI_SCK (24)
#define PIN_SPI_SS (21)
#define PIN_SPI_MISO (2)
#define PIN_SPI_MOSI (3)
#define PIN_SPI_SCK (4)
#define PIN_SPI_SS (5)

static const uint8_t SS = PIN_SPI_SS;
static const uint8_t MOSI = PIN_SPI_MOSI;
Expand All @@ -144,10 +149,13 @@ static const uint8_t SCK = PIN_SPI_SCK;
*
* This is optional
*/
#define WIRE_INTERFACES_COUNT 1
#define WIRE_INTERFACES_COUNT 2

#define PIN_WIRE_SDA (13u)
#define PIN_WIRE_SCL (14u)

#define PIN_WIRE_SDA (20u)
#define PIN_WIRE_SCL (21u)
#define PIN_WIRE_SDA1 (15u)
#define PIN_WIRE_SCL1 (16u)

static const uint8_t SDA = PIN_WIRE_SDA;
static const uint8_t SCL = PIN_WIRE_SCL;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,11 +13,11 @@
* https://github.com/sandeepmistry/arduino-nRF5/
* 2. Install the "My Sensors nRF5 Boards" with the board manager like
* explained at https://github.com/mysensors/ArduinoBoards
* 3. Copy the files "MyNRF5Board.cpp" and "MyNRF5Board.h" from
* "MyNRF5Board" example into your sketch.
* 4. Modify pin mappings in "MyNRF5Board.cpp" and "MyNRF5Board.h" to fit
* 3. Copy the files "MyBoardNRF5.cpp" and "MyBoardNRF5.h" from
* "MyBoardNRF5" example into your sketch.
* 4. Modify pin mappings in "MyBoardNRF5.cpp" and "MyBoardNRF5.h" to fit
* your requirements.
* 5. Select "MyNRF5Board nrf52832" or "MyNRF5Board nrf52822" as your board.
* 5. Select "MyBoardNRF5 nrf52832" or "MyBoardNRF5 nrf52822" as your board.
* Choose the correct parameters and programmer in the Tools menu.
*/

Expand Down
Loading

0 comments on commit 4533429

Please sign in to comment.