Skip to content

Commit a8864e7

Browse files
authored
Merge pull request #407 from tineira/master
Arduino Giga support Issue #349
2 parents 5ff9378 + 674f2f2 commit a8864e7

File tree

3 files changed

+78
-2
lines changed

3 files changed

+78
-2
lines changed

.github/workflows/githubci.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ jobs:
2020
run: bash ci/actions_install.sh
2121

2222
- name: test platforms
23-
run: python3 ci/build_platform.py main_platforms
23+
run: python3 ci/build_platform.py main_platforms giga
2424

2525
- name: doxygen
2626
env:

Adafruit_NeoPixel.cpp

+69-1
Original file line numberDiff line numberDiff line change
@@ -1844,9 +1844,69 @@ void Adafruit_NeoPixel::show(void) {
18441844

18451845
#elif defined(__arm__)
18461846

1847+
#if defined(TARGET_GIGA) || defined(TARGET_M4)
1848+
// Arduino GIGA -----------------------------------------------------------
1849+
uint8_t *p = pixels, *end = p + numBytes, pix;
1850+
while (p < end)
1851+
{
1852+
pix = *p++;
1853+
for (int i = 7; i >= 0; i--)
1854+
{
1855+
// gpio_write(&gpio->gpio, 1);
1856+
gpio->write(1);
1857+
1858+
// duty cycle determines bit value
1859+
// if (pix & 0x80)
1860+
if (bitRead(pix, i) == 0)
1861+
{
1862+
// one
1863+
// wait_ns(400); -> 192 cycles
1864+
#if defined(TARGET_GIGA)
1865+
for (int j = 0; j < 96; j++)
1866+
#else
1867+
for (int j = 0; j < 48; j++)
1868+
#endif
1869+
__NOP();
1870+
1871+
// gpio_write(&gpio->gpio, 0);
1872+
gpio->write(0);
1873+
1874+
// wait_ns(850) -> 408 cycles
1875+
#if defined(TARGET_GIGA)
1876+
for (int j = 0; j < 204; j++)
1877+
#else
1878+
for (int j = 0; j < 102; j++)
1879+
#endif
1880+
__NOP();
1881+
}
1882+
else
1883+
{
1884+
// zero
1885+
// wait_ns(800) -> 384 cycles
1886+
#if defined(TARGET_GIGA)
1887+
for (int j = 0; j < 192; j++)
1888+
#else
1889+
for (int j = 0; j < 96; j++)
1890+
#endif
1891+
__NOP();
1892+
1893+
gpio->write(0);
1894+
// gpio_write(&gpio->gpio, 0);
1895+
// wait_ns(450) -> 216 cycles
1896+
#if defined(TARGET_GIGA)
1897+
for (int j = 0; j < 108; j++)
1898+
#else
1899+
for (int j = 0; j < 54; j++)
1900+
#endif
1901+
__NOP();
1902+
}
1903+
1904+
// pix = pix << 1; // shift to next bit
1905+
}
1906+
}
18471907
// ARM MCUs -- Teensy 3.0, 3.1, LC, Arduino Due, RP2040 -------------------
18481908

1849-
#if defined(ARDUINO_ARCH_RP2040)
1909+
#elif defined(ARDUINO_ARCH_RP2040)
18501910
// Use PIO
18511911
rp2040Show(pin, pixels, numBytes, is800KHz);
18521912

@@ -3369,6 +3429,14 @@ void Adafruit_NeoPixel::setPin(int16_t p) {
33693429
}
33703430
#endif
33713431
#endif
3432+
#if defined(TARGET_GIGA) || defined(TARGET_M4)
3433+
gpio = digitalPinToGpio(pin);
3434+
if (gpio == NULL)
3435+
{
3436+
gpio = new mbed::DigitalInOut(digitalPinToPinName(pin), PIN_OUTPUT, PullNone, 0);
3437+
digitalPinToGpio(pin) = gpio;
3438+
}
3439+
#endif
33723440
}
33733441

33743442
/*!

Adafruit_NeoPixel.h

+8
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,11 @@
5454
#include <Arduino.h>
5555
#endif
5656

57+
#if defined(TARGET_GIGA) || defined(TARGET_M4)
58+
#include "mbed.h"
59+
#include "pinDefinitions.h"
60+
#endif
61+
5762
#if defined(ARDUINO_ARCH_RP2040)
5863
#include <stdlib.h>
5964
#include "hardware/pio.h"
@@ -411,6 +416,9 @@ class Adafruit_NeoPixel {
411416
GPIO_TypeDef *gpioPort; ///< Output GPIO PORT
412417
uint32_t gpioPin; ///< Output GPIO PIN
413418
#endif
419+
#if defined(TARGET_GIGA) || defined(TARGET_M4)
420+
mbed::DigitalInOut *gpio;
421+
#endif
414422
#if defined(ARDUINO_ARCH_RP2040)
415423
PIO pio = pio0;
416424
int sm = 0;

0 commit comments

Comments
 (0)