Skip to content

Commit

Permalink
adds board support for SparkFun Thing Plus NORAW306 (#233)
Browse files Browse the repository at this point in the history
* board support for SparkFun Thing Plus NORAW306

* added SPI function to pin descriptions

* board name correction

* SPI and Wire updates

* WS2812B board support compile error

* SPI.begin bug fix

-Moved SPI.begin() out of show() and into begin().
-whne you call show multiple times to change the LED, then SPI.begin() was being called and causing it to fail.

* Update WS2812B.cpp

fix for compatibility issue BOARD_AMB23, BOARD_AITHINKER_BW16
  • Loading branch information
lewispg228 committed Jun 10, 2024
1 parent ee86343 commit 0b90ffa
Show file tree
Hide file tree
Showing 10 changed files with 304 additions and 51 deletions.
45 changes: 45 additions & 0 deletions Arduino_package/hardware/boards.txt
Original file line number Diff line number Diff line change
Expand Up @@ -322,3 +322,48 @@ u-blox_NORA-W30.menu.UploadBaudrate.921600.upload.speed=921600
u-blox_NORA-W30.menu.UploadBaudrate.1500000=1500000
u-blox_NORA-W30.menu.UploadBaudrate.1500000.upload.speed=1500000
##############################################################

Sparkfun_ThingPlus-NORA-W306.name=SparkFun Thing Plus NORA-W306 (RTL8720DF)

Sparkfun_ThingPlus-NORA-W306.build.tarch=cortex-m33
Sparkfun_ThingPlus-NORA-W306.build.mcu=RTL8720DF
Sparkfun_ThingPlus-NORA-W306.build.f_cpu=200000000L
Sparkfun_ThingPlus-NORA-W306.build.usb_product="Sparkfun_ThingPlus-NORA-W306"
Sparkfun_ThingPlus-NORA-W306.build.board=SPARKFUN_THINGPLUS_NORAW306
Sparkfun_ThingPlus-NORA-W306.build.core=ambd
Sparkfun_ThingPlus-NORA-W306.build.extra_flags=-mthumb -DRTL8722DM -DBOARD_SPARKFUN_NORAW306 {build.usb_flags} -DArduino_STD_PRINTF
Sparkfun_ThingPlus-NORA-W306.build.ldscript=linker_scripts/gcc/amebad_img2_is_arduino.ld
Sparkfun_ThingPlus-NORA-W306.build.variant=sparkfun_thingplus-nora-w306

Sparkfun_ThingPlus-NORA-W306.upload.tool=ameba_d_tools
Sparkfun_ThingPlus-NORA-W306.upload.protocol=usb_serial
Sparkfun_ThingPlus-NORA-W306.upload.maximum_size=2097152
Sparkfun_ThingPlus-NORA-W306.upload.use_1200bps_touch=false
Sparkfun_ThingPlus-NORA-W306.upload.wait_for_upload_port=false
Sparkfun_ThingPlus-NORA-W306.upload.native_usb=false
Sparkfun_ThingPlus-NORA-W306.upload.auto_mode=Disable
Sparkfun_ThingPlus-NORA-W306.upload.erase_flash=Disable
Sparkfun_ThingPlus-NORA-W306.upload.speed=921600

Sparkfun_ThingPlus-NORA-W306.menu.EraseFlash.Disable=Disable
Sparkfun_ThingPlus-NORA-W306.menu.EraseFlash.Disable.upload.erase_flash=Disable
Sparkfun_ThingPlus-NORA-W306.menu.EraseFlash.Enable=Erase only
Sparkfun_ThingPlus-NORA-W306.menu.EraseFlash.Enable.upload.erase_flash=Enable

Sparkfun_ThingPlus-NORA-W306.menu.AutoUploadMode.Enable=Enable
Sparkfun_ThingPlus-NORA-W306.menu.AutoUploadMode.Enable.upload.auto_mode=Enable
Sparkfun_ThingPlus-NORA-W306.menu.AutoUploadMode.Disable=Disable
Sparkfun_ThingPlus-NORA-W306.menu.AutoUploadMode.Disable.upload.auto_mode=Disable

Sparkfun_ThingPlus-NORA-W306.menu.StdLibInit.Enable=Arduino_STD_PRINTF
Sparkfun_ThingPlus-NORA-W306.menu.StdLibInit.Enable.build.extra_flags=-mthumb -DRTL8722DM -DBOARD_SPARKFUN_NORAW306 {build.usb_flags} -DArduino_STD_PRINTF
Sparkfun_ThingPlus-NORA-W306.menu.StdLibInit.Disable=Disable
Sparkfun_ThingPlus-NORA-W306.menu.StdLibInit.Disable.build.extra_flags=-mthumb -DRTL8722DM -DBOARD_SPARKFUN_NORAW306 {build.usb_flags}
Sparkfun_ThingPlus-NORA-W306.menu.StdLibInit.Enable=Arduino_STD_PRINTF
Sparkfun_ThingPlus-NORA-W306.menu.StdLibInit.Enable.build.extra_flags=-mthumb -DRTL8722DM -DBOARD_SPARKFUN_NORAW306 {build.usb_flags} -DArduino_STD_PRINTF

Sparkfun_ThingPlus-NORA-W306.menu.UploadBaudrate.921600=921600
Sparkfun_ThingPlus-NORA-W306.menu.UploadBaudrate.921600.upload.speed=921600
Sparkfun_ThingPlus-NORA-W306.menu.UploadBaudrate.1500000=1500000
Sparkfun_ThingPlus-NORA-W306.menu.UploadBaudrate.1500000.upload.speed=1500000
##############################################################
2 changes: 1 addition & 1 deletion Arduino_package/hardware/libraries/SPI/src/SPI.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -396,7 +396,7 @@ SPIClass SPI((void *)(&spi_obj0), SPI_MOSI, SPI_MISO, SPI_SCLK, SPI_SS);
SPIClass SPI((void *)(&spi_obj0), SPI_MOSI, SPI_MISO, SPI_SCLK, SPI_SS); // 1, 2, 0, 8
SPIClass SPI1((void *)(&spi_obj1), SPI1_MOSI, SPI1_MISO, SPI1_SCLK, SPI1_SS); // 14, 15, 16, 17 or 4, 3, 29, 28

#elif defined(BOARD_AMB25) || defined(BOARD_AMB26) || defined(BOARD_UBLOX_NORAW30)
#elif defined(BOARD_AMB25) || defined(BOARD_AMB26) || defined(BOARD_UBLOX_NORAW30) || defined(BOARD_SPARKFUN_NORAW306)
SPIClass SPI((void *)(&spi_obj0), SPI_MOSI, SPI_MISO, SPI_SCLK, SPI_SS); // 17, 16, 19, 18
SPIClass SPI1((void *)(&spi_obj1), SPI1_MOSI, SPI1_MISO, SPI1_SCLK, SPI1_SS); // 3, 2, 1, 0

Expand Down
2 changes: 1 addition & 1 deletion Arduino_package/hardware/libraries/SPI/src/SPI.h
Original file line number Diff line number Diff line change
Expand Up @@ -131,7 +131,7 @@ extern SPIClass SPI;
#elif defined(BOARD_SPARKFUN_AWCU488)
extern SPIClass SPI;
extern SPIClass SPI1;
#elif defined(BOARD_AMB25) || defined(BOARD_AMB26) || defined(BOARD_UBLOX_NORAW30)
#elif defined(BOARD_AMB25) || defined(BOARD_AMB26) || defined(BOARD_UBLOX_NORAW30) || defined(BOARD_SPARKFUN_NORAW306)
extern SPIClass SPI;
extern SPIClass SPI1;
#else
Expand Down
68 changes: 22 additions & 46 deletions Arduino_package/hardware/libraries/WS2812B/src/WS2812B.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,28 @@ void WS2812B::begin(void) {
printf("spi_init: error. wrong spi_idx \r\n");
return;
}
if (_input_pin == SPI_MOSI) {
SPI.begin();
//Revert the unnecessary SPI pins to GPIO functions
Pinmux_Config((PinName)g_APinDescription[SPI_MISO].pinname, PINMUX_FUNCTION_GPIO);
Pinmux_Config((PinName)g_APinDescription[SPI_SCLK].pinname, PINMUX_FUNCTION_GPIO);
Pinmux_Config((PinName)g_APinDescription[SPI_SS].pinname, PINMUX_FUNCTION_GPIO);
SPI.setDefaultFrequency(2500000);
SPI.setDataMode(12, 0);
#if !defined(BOARD_AMB23) && !defined(BOARD_AITHINKER_BW16)
} else if (_input_pin == SPI1_MOSI) {
SPI1.begin();
//Revert the unnecessary SPI pins to GPIO functions
Pinmux_Config((PinName)g_APinDescription[SPI1_MISO].pinname, PINMUX_FUNCTION_GPIO);
Pinmux_Config((PinName)g_APinDescription[SPI1_SCLK].pinname, PINMUX_FUNCTION_GPIO);
Pinmux_Config((PinName)g_APinDescription[SPI1_SS].pinname, PINMUX_FUNCTION_GPIO);
SPI1.setDefaultFrequency(2500000);
SPI1.setDataMode(12, 0);
#endif
} else {
printf("spi_init: error. wrong spi_idx \r\n");
return;
}
}

void WS2812B::sendPixel(uint8_t red ,uint8_t green ,uint8_t blue) {
Expand All @@ -55,52 +77,6 @@ void WS2812B::sendPixel(uint8_t red ,uint8_t green ,uint8_t blue) {
}

void WS2812B::show(void) {
#if 0
if (_input_pin == SPI_MOSI) {
//Initialise SPI
spi_init((spi_t *)pSpiMaster, (PinName)g_APinDescription[_input_pin].pinname, (PinName)g_APinDescription[SPI_MISO].pinname, (PinName)g_APinDescription[SPI_SCLK].pinname, (PinName)g_APinDescription[SPI_SS].pinname);
//Revert the unnecessary SPI pins to GPIO functions
Pinmux_Config((PinName)g_APinDescription[SPI_SCLK].pinname, PINMUX_FUNCTION_GPIO);
Pinmux_Config((PinName)g_APinDescription[SPI_SCLK].pinname, PINMUX_FUNCTION_GPIO);
Pinmux_Config((PinName)g_APinDescription[SPI_SS].pinname, PINMUX_FUNCTION_GPIO);
} else if (_input_pin == SPI1_MOSI) {
spi_init((spi_t *)pSpiMaster, (PinName)g_APinDescription[_input_pin].pinname, (PinName)g_APinDescription[SPI1_MISO].pinname, (PinName)g_APinDescription[SPI1_SCLK].pinname, (PinName)g_APinDescription[SPI1_SS].pinname);
//Revert the unnecessary SPI pins to GPIO functions
Pinmux_Config((PinName)g_APinDescription[SPI1_SCLK].pinname, PINMUX_FUNCTION_GPIO);
Pinmux_Config((PinName)g_APinDescription[SPI1_SCLK].pinname, PINMUX_FUNCTION_GPIO);
Pinmux_Config((PinName)g_APinDescription[SPI1_SS].pinname, PINMUX_FUNCTION_GPIO);
} else {
printf("spi_init: error. wrong spi_idx \r\n");
return;
}
spi_format((spi_t *)pSpiMaster, 12, 0, 0);
spi_frequency((spi_t *)pSpiMaster, 2500000);
#else
if (_input_pin == SPI_MOSI) {
//Initialise SPI
SPI.begin();
//Revert the unnecessary SPI pins to GPIO functions
Pinmux_Config((PinName)g_APinDescription[SPI_MISO].pinname, PINMUX_FUNCTION_GPIO);
Pinmux_Config((PinName)g_APinDescription[SPI_SCLK].pinname, PINMUX_FUNCTION_GPIO);
Pinmux_Config((PinName)g_APinDescription[SPI_SS].pinname, PINMUX_FUNCTION_GPIO);
SPI.setDefaultFrequency(2500000);
SPI.setDataMode(12, 0);
#if !defined(BOARD_AMB23) && !defined(BOARD_AITHINKER_BW16)
} else if (_input_pin == SPI1_MOSI) {
//Initialise SPI
SPI1.begin();
//Revert the unnecessary SPI pins to GPIO functions
Pinmux_Config((PinName)g_APinDescription[SPI1_MISO].pinname, PINMUX_FUNCTION_GPIO);
Pinmux_Config((PinName)g_APinDescription[SPI1_SCLK].pinname, PINMUX_FUNCTION_GPIO);
Pinmux_Config((PinName)g_APinDescription[SPI1_SS].pinname, PINMUX_FUNCTION_GPIO);
SPI1.setDefaultFrequency(2500000);
SPI1.setDataMode(12, 0);
#endif
} else {
printf("spi_init: error. wrong spi_idx \r\n");
return;
}
#endif
//Send Reset pulse of at least 50us duration
for (uint8_t i = 0; i < reset_count; i++) {
spi_slave_write((spi_t *)pSpiMaster, 0);
Expand Down
2 changes: 1 addition & 1 deletion Arduino_package/hardware/libraries/WS2812B/src/WS2812B.h
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ extern SPIClass SPI;
#elif defined(BOARD_SPARKFUN_AWCU488)
extern SPIClass SPI;
extern SPIClass SPI1;
#elif defined(BOARD_AMB25) || defined(BOARD_AMB26) || defined(BOARD_UBLOX_NORAW30)
#elif defined(BOARD_AMB25) || defined(BOARD_AMB26) || defined(BOARD_UBLOX_NORAW30) || defined(BOARD_SPARKFUN_NORAW306)
extern SPIClass SPI;
extern SPIClass SPI1;
#else
Expand Down
2 changes: 1 addition & 1 deletion Arduino_package/hardware/libraries/Wire/src/Wire.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -317,7 +317,7 @@ TwoWire Wire = TwoWire(I2C_SDA, I2C_SCL); // PA_26, PA_25
// HW: I2C0
TwoWire Wire = TwoWire(I2C_SDA, I2C_SCL); // PA_26, PA_25 / PB_6, PB_5

#elif defined(BOARD_AMB25) || defined(BOARD_AMB26) || defined(BOARD_UBLOX_NORAW30)
#elif defined(BOARD_AMB25) || defined(BOARD_AMB26) || defined(BOARD_UBLOX_NORAW30) || defined(BOARD_SPARKFUN_NORAW306)
// SDA SCL
// HW: I2C0
TwoWire Wire = TwoWire(I2C_SDA, I2C_SCL); // PA_26, PA_25
Expand Down
2 changes: 1 addition & 1 deletion Arduino_package/hardware/libraries/Wire/src/Wire.h
Original file line number Diff line number Diff line change
Expand Up @@ -108,7 +108,7 @@ extern TwoWire Wire1;
extern TwoWire Wire;
#elif defined(BOARD_SPARKFUN_AWCU488)
extern TwoWire Wire;
#elif defined(BOARD_AMB25) || defined(BOARD_AMB26) || defined(BOARD_UBLOX_NORAW30)
#elif defined(BOARD_AMB25) || defined(BOARD_AMB26) || defined(BOARD_UBLOX_NORAW30) || defined(BOARD_SPARKFUN_NORAW306)
extern TwoWire Wire;
#endif

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
/*
Copyright (c) 2011 Arduino. 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
*/

// API compatibility
#include "variant.h"
Original file line number Diff line number Diff line change
@@ -0,0 +1,89 @@
/*
Copyright (c) 2011 Arduino. 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
*/

/* SparkFun Thing Plus NORA-W306 (RTL8720DF) */

#include "variant.h"

#ifdef __cplusplus
extern "C" {
#endif

//#include "PinNames.h"
void __libc_init_array(void);

/*
* Pins descriptions
*/

PinDescription g_APinDescription[TOTAL_GPIO_PIN_NUM]=
{
{PA_8, TYPE_DIGITAL, PIO_GPIO | PIO_GPIO_IRQ , MODE_NOT_INITIAL}, // AMB_D0
{PA_7, TYPE_DIGITAL, PIO_GPIO | PIO_GPIO_IRQ , MODE_NOT_INITIAL}, // AMB_D1
{PA_30, TYPE_DIGITAL, PIO_GPIO | PIO_GPIO_IRQ | PIO_PWM , MODE_NOT_INITIAL}, // AMB_D2
{PA_28, TYPE_DIGITAL, PIO_GPIO | PIO_GPIO_IRQ | PIO_PWM , MODE_NOT_INITIAL}, // AMB_D3
{PB_21, TYPE_DIGITAL, PIO_GPIO | PIO_GPIO_IRQ | PIO_PWM | PIO_SPI, MODE_NOT_INITIAL}, // AMB_D4
{PB_20, TYPE_DIGITAL, PIO_GPIO | PIO_GPIO_IRQ | PIO_PWM | PIO_SPI, MODE_NOT_INITIAL}, // AMB_D5
{PB_18, TYPE_DIGITAL, PIO_GPIO | PIO_GPIO_IRQ | PIO_PWM | PIO_SPI, MODE_NOT_INITIAL}, // AMB_D6
{PB_19, TYPE_DIGITAL, PIO_GPIO | PIO_GPIO_IRQ | PIO_PWM | PIO_SPI, MODE_NOT_INITIAL}, // AMB_D7
{PB_2, TYPE_DIGITAL | TYPE_ANALOG, PIO_GPIO | PIO_GPIO_IRQ | PIO_ADC , MODE_NOT_INITIAL}, // AMB_D8
{PB_1, TYPE_DIGITAL | TYPE_ANALOG, PIO_GPIO | PIO_GPIO_IRQ | PIO_ADC , MODE_NOT_INITIAL}, // AMB_D9
{PA_27, TYPE_DIGITAL, PIO_GPIO | PIO_GPIO_IRQ , MODE_NOT_INITIAL}, // AMB_D10
{PA_26, TYPE_DIGITAL, PIO_GPIO | PIO_GPIO_IRQ | PIO_PWM | PIO_I2C , MODE_NOT_INITIAL}, // AMB_D11
{PA_25, TYPE_DIGITAL, PIO_GPIO | PIO_GPIO_IRQ | PIO_PWM | PIO_I2C , MODE_NOT_INITIAL}, // AMB_D12
{PA_13, TYPE_DIGITAL, PIO_GPIO | PIO_GPIO_IRQ | PIO_PWM | PIO_SPI, MODE_NOT_INITIAL}, // AMB_D13
{PA_12, TYPE_DIGITAL, PIO_GPIO | PIO_GPIO_IRQ | PIO_PWM | PIO_SPI, MODE_NOT_INITIAL}, // AMB_D14
{PA_15, TYPE_DIGITAL, PIO_GPIO | PIO_GPIO_IRQ | PIO_SPI, MODE_NOT_INITIAL}, // AMB_D15
{PA_14, TYPE_DIGITAL, PIO_GPIO | PIO_GPIO_IRQ | PIO_SPI, MODE_NOT_INITIAL}, // AMB_D16
{PB_23, TYPE_DIGITAL, PIO_GPIO | PIO_GPIO_IRQ | PIO_PWM , MODE_NOT_INITIAL}, // AMB_D17
{PB_22, TYPE_DIGITAL, PIO_GPIO | PIO_GPIO_IRQ | PIO_PWM , MODE_NOT_INITIAL}, // AMB_D18
{PB_3, TYPE_DIGITAL | TYPE_ANALOG, PIO_GPIO | PIO_GPIO_IRQ | PIO_ADC , MODE_NOT_INITIAL}, // AMB_D19
{PB_24, TYPE_DIGITAL, PIO_GPIO | PIO_GPIO_IRQ | PIO_PWM , MODE_NOT_INITIAL}, // AMB_D20
};

void *gpio_pin_struct[TOTAL_GPIO_PIN_NUM] = {NULL};
void *gpio_irq_handler_list[TOTAL_GPIO_PIN_NUM] = {NULL};

#ifdef __cplusplus
} // extern C
#endif

void serialEvent() __attribute__((weak));
bool Serial_available() __attribute__((weak));

// ----------------------------------------------------------------------------

void serialEventRun(void)
{
if (Serial_available && serialEvent && Serial_available()) serialEvent();
}

void init(void)
{
// Initialize C library
__libc_init_array();
}

// ----------------------------------------------------------------------------

void wait_for_debug(void) {
while (((CoreDebug->DHCSR) & CoreDebug_DHCSR_C_DEBUGEN_Msk) == 0) {
asm("nop");
}
delay(1000);
}
Loading

0 comments on commit 0b90ffa

Please sign in to comment.