Version 2.8b - 13th August 2019
Add support for ItsyBitsy M0, Gemma M0, and Grand Central M4
This commit is contained in:
parent
8549aa0957
commit
88366887ab
147
ulisp-arm.ino
147
ulisp-arm.ino
|
@ -1,5 +1,5 @@
|
||||||
/* uLisp ARM 2.8a - www.ulisp.com
|
/* uLisp ARM 2.8b - www.ulisp.com
|
||||||
David Johnson-Davies - www.technoblogy.com - 6th August 2019
|
David Johnson-Davies - www.technoblogy.com - 13th August 2019
|
||||||
|
|
||||||
Licensed under the MIT license: https://opensource.org/licenses/MIT
|
Licensed under the MIT license: https://opensource.org/licenses/MIT
|
||||||
*/
|
*/
|
||||||
|
@ -121,10 +121,50 @@ typedef void (*pfun_t)(char);
|
||||||
#define WORDALIGNED __attribute__((aligned (4)))
|
#define WORDALIGNED __attribute__((aligned (4)))
|
||||||
#define BUFFERSIZE 34 // Number of bits+2
|
#define BUFFERSIZE 34 // Number of bits+2
|
||||||
|
|
||||||
#if defined(ARDUINO_SAMD_ZERO)
|
#if defined(ADAFRUIT_ITSYBITSY_M0)
|
||||||
#define WORKSPACESIZE 3072-SDSIZE /* Cells (8*bytes) */
|
#define WORKSPACESIZE 3072-SDSIZE /* Cells (8*bytes) */
|
||||||
|
#define FLASHSIZE 65536 /* Bytes */
|
||||||
#define SYMBOLTABLESIZE 512 /* Bytes */
|
#define SYMBOLTABLESIZE 512 /* Bytes */
|
||||||
#define SDCARD_SS_PIN 10
|
#define HASDATAFLASH
|
||||||
|
uint8_t _end;
|
||||||
|
|
||||||
|
#elif defined(ADAFRUIT_GEMMA_M0)
|
||||||
|
#define WORKSPACESIZE 3072-SDSIZE /* Cells (8*bytes) */
|
||||||
|
#define SYMBOLTABLESIZE 512 /* Bytes */
|
||||||
|
uint8_t _end;
|
||||||
|
|
||||||
|
#elif defined(ADAFRUIT_FEATHER_M0_EXPRESS)
|
||||||
|
#define WORKSPACESIZE 3072-SDSIZE /* Cells (8*bytes) */
|
||||||
|
#define SYMBOLTABLESIZE 512 /* Bytes */
|
||||||
|
#define SDCARD_SS_PIN 4
|
||||||
|
uint8_t _end;
|
||||||
|
|
||||||
|
#elif defined(ADAFRUIT_METRO_M4_EXPRESS)
|
||||||
|
#define WORKSPACESIZE 20480-SDSIZE /* Cells (8*bytes) */
|
||||||
|
#define FLASHSIZE 65536 /* Bytes */
|
||||||
|
#define SYMBOLTABLESIZE 1024 /* Bytes */
|
||||||
|
#define HASDATAFLASH
|
||||||
|
uint8_t _end;
|
||||||
|
|
||||||
|
#elif defined(ADAFRUIT_ITSYBITSY_M4)
|
||||||
|
#define WORKSPACESIZE 20480-SDSIZE /* Cells (8*bytes) */
|
||||||
|
#define FLASHSIZE 65536 /* Bytes */
|
||||||
|
#define SYMBOLTABLESIZE 1024 /* Bytes */
|
||||||
|
#define HASDATAFLASH
|
||||||
|
uint8_t _end;
|
||||||
|
|
||||||
|
#elif defined(ADAFRUIT_FEATHER_M4)
|
||||||
|
#define WORKSPACESIZE 20480-SDSIZE /* Cells (8*bytes) */
|
||||||
|
#define FLASHSIZE 65536 /* Bytes */
|
||||||
|
#define SYMBOLTABLESIZE 1024 /* Bytes */
|
||||||
|
#define HASDATAFLASH
|
||||||
|
uint8_t _end;
|
||||||
|
|
||||||
|
#elif defined(ADAFRUIT_GRAND_CENTRAL_M4)
|
||||||
|
#define WORKSPACESIZE 30720-SDSIZE /* Cells (8*bytes) */
|
||||||
|
#define FLASHSIZE 65536 /* Bytes */
|
||||||
|
#define SYMBOLTABLESIZE 1024 /* Bytes */
|
||||||
|
#define HASDATAFLASH
|
||||||
uint8_t _end;
|
uint8_t _end;
|
||||||
|
|
||||||
#elif defined(ARDUINO_SAM_DUE)
|
#elif defined(ARDUINO_SAM_DUE)
|
||||||
|
@ -138,22 +178,10 @@ typedef void (*pfun_t)(char);
|
||||||
#define SYMBOLTABLESIZE 512 /* Bytes */
|
#define SYMBOLTABLESIZE 512 /* Bytes */
|
||||||
uint8_t _end;
|
uint8_t _end;
|
||||||
|
|
||||||
#elif defined(ARDUINO_METRO_M4)
|
#elif defined(ARDUINO_SAMD_ZERO) /* Put this last, otherwise overrides the Adafruit boards */
|
||||||
#define WORKSPACESIZE 20480-SDSIZE /* Cells (8*bytes) */
|
#define WORKSPACESIZE 3072-SDSIZE /* Cells (8*bytes) */
|
||||||
#define FLASHSIZE 65536 /* Bytes */
|
#define SYMBOLTABLESIZE 512 /* Bytes */
|
||||||
#define SYMBOLTABLESIZE 1024 /* Bytes */
|
#define SDCARD_SS_PIN 10
|
||||||
uint8_t _end;
|
|
||||||
|
|
||||||
#elif defined(ARDUINO_ITSYBITSY_M4)
|
|
||||||
#define WORKSPACESIZE 20480-SDSIZE /* Cells (8*bytes) */
|
|
||||||
#define FLASHSIZE 65536 /* Bytes */
|
|
||||||
#define SYMBOLTABLESIZE 1024 /* Bytes */
|
|
||||||
uint8_t _end;
|
|
||||||
|
|
||||||
#elif defined(ARDUINO_FEATHER_M4)
|
|
||||||
#define WORKSPACESIZE 20480-SDSIZE /* Cells (8*bytes) */
|
|
||||||
#define FLASHSIZE 65536 /* Bytes */
|
|
||||||
#define SYMBOLTABLESIZE 1024 /* Bytes */
|
|
||||||
uint8_t _end;
|
uint8_t _end;
|
||||||
|
|
||||||
#elif defined(_VARIANT_BBC_MICROBIT_)
|
#elif defined(_VARIANT_BBC_MICROBIT_)
|
||||||
|
@ -409,7 +437,7 @@ void SDWriteInt (File file, int data) {
|
||||||
file.write(data & 0xFF); file.write(data>>8 & 0xFF);
|
file.write(data & 0xFF); file.write(data>>8 & 0xFF);
|
||||||
file.write(data>>16 & 0xFF); file.write(data>>24 & 0xFF);
|
file.write(data>>16 & 0xFF); file.write(data>>24 & 0xFF);
|
||||||
}
|
}
|
||||||
#elif defined(ARDUINO_METRO_M4) || defined(ARDUINO_ITSYBITSY_M4) || defined(ARDUINO_FEATHER_M4)
|
#elif defined(HASDATAFLASH)
|
||||||
// Winbond DataFlash support for Adafruit M4 Express boards
|
// Winbond DataFlash support for Adafruit M4 Express boards
|
||||||
#define PAGEPROG 0x02
|
#define PAGEPROG 0x02
|
||||||
#define READSTATUS 0x05
|
#define READSTATUS 0x05
|
||||||
|
@ -419,12 +447,16 @@ void SDWriteInt (File file, int data) {
|
||||||
#define READID 0x90
|
#define READID 0x90
|
||||||
|
|
||||||
// Arduino pins used for dataflash
|
// Arduino pins used for dataflash
|
||||||
#if defined(ARDUINO_ITSYBITSY_M4)
|
#if defined(ADAFRUIT_ITSYBITSY_M0)
|
||||||
|
const int sck = 38, ssel = 39, mosi = 37, miso = 36;
|
||||||
|
#elif defined(ADAFRUIT_ITSYBITSY_M4)
|
||||||
const int sck = 32, ssel = 33, mosi = 34, miso = 35;
|
const int sck = 32, ssel = 33, mosi = 34, miso = 35;
|
||||||
#elif defined(ARDUINO_METRO_M4)
|
#elif defined(ARDUINO_METRO_M4)
|
||||||
const int sck = 41, ssel = 42, mosi = 43, miso = 44;
|
const int sck = 41, ssel = 42, mosi = 43, miso = 44;
|
||||||
#elif defined(ARDUINO_FEATHER_M4)
|
#elif defined(ADAFRUIT_FEATHER_M4)
|
||||||
const int sck = 34, ssel = 35, mosi = 36, miso = 37;
|
const int sck = 34, ssel = 35, mosi = 36, miso = 37;
|
||||||
|
#elif defined(ADAFRUIT_GRAND_CENTRAL_M4)
|
||||||
|
const int sck = 89, ssel = 90, mosi = 91, miso = 92;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
boolean FlashSetup () {
|
boolean FlashSetup () {
|
||||||
|
@ -439,7 +471,7 @@ boolean FlashSetup () {
|
||||||
for(uint8_t i=0; i<4; i++) manID = FlashRead();
|
for(uint8_t i=0; i<4; i++) manID = FlashRead();
|
||||||
devID = FlashRead();
|
devID = FlashRead();
|
||||||
digitalWrite(ssel, HIGH);
|
digitalWrite(ssel, HIGH);
|
||||||
return (devID == 0x14); // Found correct device
|
return (devID == 0x14 || devID == 0x16); // Found correct device
|
||||||
}
|
}
|
||||||
|
|
||||||
inline void FlashWrite (uint8_t data) {
|
inline void FlashWrite (uint8_t data) {
|
||||||
|
@ -542,7 +574,7 @@ int saveimage (object *arg) {
|
||||||
}
|
}
|
||||||
file.close();
|
file.close();
|
||||||
return imagesize;
|
return imagesize;
|
||||||
#elif defined(ARDUINO_METRO_M4) || defined(ARDUINO_ITSYBITSY_M4) || defined(ARDUINO_FEATHER_M4)
|
#elif defined(HASDATAFLASH)
|
||||||
if (!(arg == NULL || listp(arg))) error(SAVEIMAGE, PSTR("illegal argument"), arg);
|
if (!(arg == NULL || listp(arg))) error(SAVEIMAGE, PSTR("illegal argument"), arg);
|
||||||
if (!FlashSetup()) error2(SAVEIMAGE, PSTR("no DataFlash found."));
|
if (!FlashSetup()) error2(SAVEIMAGE, PSTR("no DataFlash found."));
|
||||||
// Save to DataFlash
|
// Save to DataFlash
|
||||||
|
@ -578,7 +610,7 @@ int SDReadInt (File file) {
|
||||||
uintptr_t b2 = file.read(); uintptr_t b3 = file.read();
|
uintptr_t b2 = file.read(); uintptr_t b3 = file.read();
|
||||||
return b0 | b1<<8 | b2<<16 | b3<<24;
|
return b0 | b1<<8 | b2<<16 | b3<<24;
|
||||||
}
|
}
|
||||||
#elif defined(ARDUINO_METRO_M4) || defined(ARDUINO_ITSYBITSY_M4) || defined(ARDUINO_FEATHER_M4)
|
#elif defined(HASDATAFLASH)
|
||||||
int FlashReadInt () {
|
int FlashReadInt () {
|
||||||
uint8_t b0 = FlashReadByte(); uint8_t b1 = FlashReadByte();
|
uint8_t b0 = FlashReadByte(); uint8_t b1 = FlashReadByte();
|
||||||
uint8_t b2 = FlashReadByte(); uint8_t b3 = FlashReadByte();
|
uint8_t b2 = FlashReadByte(); uint8_t b3 = FlashReadByte();
|
||||||
|
@ -610,7 +642,7 @@ int loadimage (object *arg) {
|
||||||
file.close();
|
file.close();
|
||||||
gc(NULL, NULL);
|
gc(NULL, NULL);
|
||||||
return imagesize;
|
return imagesize;
|
||||||
#elif defined(ARDUINO_METRO_M4) || defined(ARDUINO_ITSYBITSY_M4) || defined(ARDUINO_FEATHER_M4)
|
#elif defined(HASDATAFLASH)
|
||||||
if (!FlashSetup()) error2(LOADIMAGE, PSTR("no DataFlash found."));
|
if (!FlashSetup()) error2(LOADIMAGE, PSTR("no DataFlash found."));
|
||||||
FlashBeginRead();
|
FlashBeginRead();
|
||||||
FlashReadInt(); // Skip eval address
|
FlashReadInt(); // Skip eval address
|
||||||
|
@ -648,7 +680,7 @@ void autorunimage () {
|
||||||
loadimage(NULL);
|
loadimage(NULL);
|
||||||
apply(0, autorun, NULL, NULL);
|
apply(0, autorun, NULL, NULL);
|
||||||
}
|
}
|
||||||
#elif defined(ARDUINO_METRO_M4) || defined(ARDUINO_ITSYBITSY_M4) || defined(ARDUINO_FEATHER_M4)
|
#elif defined(HASDATAFLASH)
|
||||||
if (!FlashSetup()) error2(0, PSTR("no DataFlash found."));
|
if (!FlashSetup()) error2(0, PSTR("no DataFlash found."));
|
||||||
FlashBeginRead();
|
FlashBeginRead();
|
||||||
object *autorun = (object *)FlashReadInt();
|
object *autorun = (object *)FlashReadInt();
|
||||||
|
@ -1138,12 +1170,12 @@ void I2Cstop (uint8_t read) {
|
||||||
// Streams
|
// Streams
|
||||||
|
|
||||||
inline int spiread () { return SPI.transfer(0); }
|
inline int spiread () { return SPI.transfer(0); }
|
||||||
#if defined(ARDUINO_SAMD_ZERO) || defined(ARDUINO_SAMD_MKRZERO) || defined(ARDUINO_METRO_M4) || defined(ARDUINO_ITSYBITSY_M4) || defined(ARDUINO_FEATHER_M4) || defined(MAX32620)
|
#if defined(ARDUINO_SAM_DUE)
|
||||||
inline int serial1read () { while (!Serial1.available()) testescape(); return Serial1.read(); }
|
|
||||||
#elif defined(ARDUINO_SAM_DUE)
|
|
||||||
inline int serial1read () { while (!Serial1.available()) testescape(); return Serial1.read(); }
|
inline int serial1read () { while (!Serial1.available()) testescape(); return Serial1.read(); }
|
||||||
inline int serial2read () { while (!Serial2.available()) testescape(); return Serial2.read(); }
|
inline int serial2read () { while (!Serial2.available()) testescape(); return Serial2.read(); }
|
||||||
inline int serial3read () { while (!Serial3.available()) testescape(); return Serial3.read(); }
|
inline int serial3read () { while (!Serial3.available()) testescape(); return Serial3.read(); }
|
||||||
|
#elif !defined(_VARIANT_BBC_MICROBIT_)
|
||||||
|
inline int serial1read () { while (!Serial1.available()) testescape(); return Serial1.read(); }
|
||||||
#endif
|
#endif
|
||||||
#if defined(sdcardsupport)
|
#if defined(sdcardsupport)
|
||||||
File SDpfile, SDgfile;
|
File SDpfile, SDgfile;
|
||||||
|
@ -1158,24 +1190,23 @@ inline int SDread () {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
void serialbegin (int address, int baud) {
|
void serialbegin (int address, int baud) {
|
||||||
#if defined(ARDUINO_SAMD_ZERO) || defined(ARDUINO_SAMD_MKRZERO) || defined(ARDUINO_METRO_M4) || defined(ARDUINO_ITSYBITSY_M4) || defined(ARDUINO_FEATHER_M4) || defined(MAX32620)
|
#if defined(ARDUINO_SAM_DUE)
|
||||||
if (address == 1) Serial1.begin((long)baud*100);
|
|
||||||
else error(WITHSERIAL, PSTR("port not supported"), number(address));
|
|
||||||
#elif defined(ARDUINO_SAM_DUE)
|
|
||||||
if (address == 1) Serial1.begin((long)baud*100);
|
if (address == 1) Serial1.begin((long)baud*100);
|
||||||
else if (address == 2) Serial2.begin((long)baud*100);
|
else if (address == 2) Serial2.begin((long)baud*100);
|
||||||
else if (address == 3) Serial3.begin((long)baud*100);
|
else if (address == 3) Serial3.begin((long)baud*100);
|
||||||
else error(WITHSERIAL, PSTR("port not supported"), number(address));
|
#elif !defined(_VARIANT_BBC_MICROBIT_)
|
||||||
|
if (address == 1) Serial1.begin((long)baud*100);
|
||||||
#endif
|
#endif
|
||||||
|
else error(WITHSERIAL, PSTR("port not supported"), number(address));
|
||||||
}
|
}
|
||||||
|
|
||||||
void serialend (int address) {
|
void serialend (int address) {
|
||||||
#if defined(ARDUINO_SAMD_ZERO) || defined(ARDUINO_SAMD_MKRZERO) || defined(ARDUINO_METRO_M4) || defined(ARDUINO_ITSYBITSY_M4) || defined(ARDUINO_FEATHER_M4) || defined(MAX32620)
|
#if defined(ARDUINO_SAM_DUE)
|
||||||
if (address == 1) {Serial1.flush(); Serial1.end(); }
|
|
||||||
#elif defined(ARDUINO_SAM_DUE)
|
|
||||||
if (address == 1) {Serial1.flush(); Serial1.end(); }
|
if (address == 1) {Serial1.flush(); Serial1.end(); }
|
||||||
else if (address == 2) {Serial2.flush(); Serial2.end(); }
|
else if (address == 2) {Serial2.flush(); Serial2.end(); }
|
||||||
else if (address == 3) {Serial3.flush(); Serial3.end(); }
|
else if (address == 3) {Serial3.flush(); Serial3.end(); }
|
||||||
|
#elif !defined(_VARIANT_BBC_MICROBIT_)
|
||||||
|
if (address == 1) {Serial1.flush(); Serial1.end(); }
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1191,7 +1222,11 @@ gfun_t gstreamfun (object *args) {
|
||||||
else if (streamtype == SPISTREAM) gfun = spiread;
|
else if (streamtype == SPISTREAM) gfun = spiread;
|
||||||
else if (streamtype == SERIALSTREAM) {
|
else if (streamtype == SERIALSTREAM) {
|
||||||
if (address == 0) gfun = gserial;
|
if (address == 0) gfun = gserial;
|
||||||
#if !defined(_VARIANT_BBC_MICROBIT_)
|
#if defined(ARDUINO_SAM_DUE)
|
||||||
|
else if (address == 1) gfun = serial1read;
|
||||||
|
else if (address == 2) gfun = serial2read;
|
||||||
|
else if (address == 3) gfun = serial3read;
|
||||||
|
#elif !defined(_VARIANT_BBC_MICROBIT_)
|
||||||
else if (address == 1) gfun = serial1read;
|
else if (address == 1) gfun = serial1read;
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
@ -1203,7 +1238,11 @@ gfun_t gstreamfun (object *args) {
|
||||||
}
|
}
|
||||||
|
|
||||||
inline void spiwrite (char c) { SPI.transfer(c); }
|
inline void spiwrite (char c) { SPI.transfer(c); }
|
||||||
#if !defined(_VARIANT_BBC_MICROBIT_)
|
#if defined(ARDUINO_SAM_DUE)
|
||||||
|
inline void serial1write (char c) { Serial1.write(c); }
|
||||||
|
inline void serial2write (char c) { Serial2.write(c); }
|
||||||
|
inline void serial3write (char c) { Serial3.write(c); }
|
||||||
|
#elif !defined(_VARIANT_BBC_MICROBIT_)
|
||||||
inline void serial1write (char c) { Serial1.write(c); }
|
inline void serial1write (char c) { Serial1.write(c); }
|
||||||
#endif
|
#endif
|
||||||
#if defined(sdcardsupport)
|
#if defined(sdcardsupport)
|
||||||
|
@ -1222,7 +1261,11 @@ pfun_t pstreamfun (object *args) {
|
||||||
else if (streamtype == SPISTREAM) pfun = spiwrite;
|
else if (streamtype == SPISTREAM) pfun = spiwrite;
|
||||||
else if (streamtype == SERIALSTREAM) {
|
else if (streamtype == SERIALSTREAM) {
|
||||||
if (address == 0) pfun = pserial;
|
if (address == 0) pfun = pserial;
|
||||||
#if !defined(_VARIANT_BBC_MICROBIT_)
|
#if defined(ARDUINO_SAM_DUE)
|
||||||
|
else if (address == 1) pfun = serial1write;
|
||||||
|
else if (address == 2) pfun = serial2write;
|
||||||
|
else if (address == 3) pfun = serial3write;
|
||||||
|
#elif !defined(_VARIANT_BBC_MICROBIT_)
|
||||||
else if (address == 1) pfun = serial1write;
|
else if (address == 1) pfun = serial1write;
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
@ -1242,12 +1285,18 @@ void checkanalogread (int pin) {
|
||||||
if (!(pin>=14 && pin<=19)) error(ANALOGREAD, PSTR("invalid pin"), number(pin));
|
if (!(pin>=14 && pin<=19)) error(ANALOGREAD, PSTR("invalid pin"), number(pin));
|
||||||
#elif defined(ARDUINO_SAMD_MKRZERO)
|
#elif defined(ARDUINO_SAMD_MKRZERO)
|
||||||
if (!(pin>=15 && pin<=21)) error(ANALOGREAD, PSTR("invalid pin"), number(pin));
|
if (!(pin>=15 && pin<=21)) error(ANALOGREAD, PSTR("invalid pin"), number(pin));
|
||||||
|
#elif defined(ADAFRUIT_ITSYBITSY_M0)
|
||||||
|
if (!(pin>=14 && pin<=25)) error(ANALOGREAD, PSTR("invalid pin"), number(pin));
|
||||||
|
#elif defined(ADAFRUIT_GEMMA_M0)
|
||||||
|
if (!(pin>=8 && pin<=10)) error(ANALOGREAD, PSTR("invalid pin"), number(pin));
|
||||||
#elif defined(ARDUINO_METRO_M4)
|
#elif defined(ARDUINO_METRO_M4)
|
||||||
if (!(pin>=14 && pin<=21)) error(ANALOGREAD, PSTR("invalid pin"), number(pin));
|
if (!(pin>=14 && pin<=21)) error(ANALOGREAD, PSTR("invalid pin"), number(pin));
|
||||||
#elif defined(ARDUINO_ITSYBITSY_M4)
|
#elif defined(ADAFRUIT_ITSYBITSY_M4)
|
||||||
if (!(pin>=14 && pin<=19)) error(ANALOGREAD, PSTR("invalid pin"), number(pin));
|
if (!(pin>=14 && pin<=19)) error(ANALOGREAD, PSTR("invalid pin"), number(pin));
|
||||||
#elif defined(ARDUINO_FEATHER_M4)
|
#elif defined(ADAFRUIT_FEATHER_M4)
|
||||||
if (!(pin>=14 && pin<=19)) error(ANALOGREAD, PSTR("invalid pin"), number(pin));
|
if (!(pin>=14 && pin<=19)) error(ANALOGREAD, PSTR("invalid pin"), number(pin));
|
||||||
|
#elif defined(ADAFRUIT_GRAND_CENTRAL_M4)
|
||||||
|
if (!((pin>=67 && pin<=74) || (pin>=54 && pin<=61))) error(ANALOGREAD, PSTR("invalid pin"), number(pin));
|
||||||
#elif defined(_VARIANT_BBC_MICROBIT_)
|
#elif defined(_VARIANT_BBC_MICROBIT_)
|
||||||
if (!((pin>=0 && pin<=4) || pin==10)) error(ANALOGREAD, PSTR("invalid pin"), number(pin));
|
if (!((pin>=0 && pin<=4) || pin==10)) error(ANALOGREAD, PSTR("invalid pin"), number(pin));
|
||||||
#elif defined(MAX32620)
|
#elif defined(MAX32620)
|
||||||
|
@ -1262,12 +1311,18 @@ void checkanalogwrite (int pin) {
|
||||||
if (!((pin>=3 && pin<=6) || (pin>=8 && pin<=13) || pin==14)) error(ANALOGWRITE, PSTR("invalid pin"), number(pin));
|
if (!((pin>=3 && pin<=6) || (pin>=8 && pin<=13) || pin==14)) error(ANALOGWRITE, PSTR("invalid pin"), number(pin));
|
||||||
#elif defined(ARDUINO_SAMD_MKRZERO)
|
#elif defined(ARDUINO_SAMD_MKRZERO)
|
||||||
if (!((pin>=0 && pin<=8) || pin==10 || pin==18 || pin==19)) error(ANALOGWRITE, PSTR("invalid pin"), number(pin));
|
if (!((pin>=0 && pin<=8) || pin==10 || pin==18 || pin==19)) error(ANALOGWRITE, PSTR("invalid pin"), number(pin));
|
||||||
|
#elif defined(ADAFRUIT_ITSYBITSY_M0)
|
||||||
|
if (!((pin>=3 && pin<=6) || (pin>=8 && pin<=13) || (pin>=15 && pin<=16) || (pin>=22 && pin<=25))) error(ANALOGWRITE, PSTR("invalid pin"), number(pin));
|
||||||
|
#elif defined(ADAFRUIT_GEMMA_M0)
|
||||||
|
if (!(pin==0 || pin==2 || pin==9 || pin==10)) error(ANALOGWRITE, PSTR("invalid pin"), number(pin));
|
||||||
#elif defined(ARDUINO_METRO_M4)
|
#elif defined(ARDUINO_METRO_M4)
|
||||||
if (!(pin>=0 && pin<=15)) error(ANALOGWRITE, PSTR("invalid pin"), number(pin));
|
if (!(pin>=0 && pin<=15)) error(ANALOGWRITE, PSTR("invalid pin"), number(pin));
|
||||||
#elif defined(ARDUINO_ITSYBITSY_M4)
|
#elif defined(ADAFRUIT_ITSYBITSY_M4)
|
||||||
if (!(pin==0 || pin==1 || pin==4 || pin==5 || pin==7 || (pin>=9 && pin<=15) || pin==21 || pin==22)) error(ANALOGWRITE, PSTR("invalid pin"), number(pin));
|
if (!(pin==0 || pin==1 || pin==4 || pin==5 || pin==7 || (pin>=9 && pin<=15) || pin==21 || pin==22)) error(ANALOGWRITE, PSTR("invalid pin"), number(pin));
|
||||||
#elif defined(ARDUINO_FEATHER_M4)
|
#elif defined(ADAFRUIT_FEATHER_M4)
|
||||||
if (!(pin==0 || pin==1 || (pin>=4 && pin<=6) || (pin>=9 && pin<=13) || pin==14 || pin==15 || pin==17 || pin==21 || pin==22)) error(ANALOGWRITE, PSTR("invalid pin"), number(pin));
|
if (!(pin==0 || pin==1 || (pin>=4 && pin<=6) || (pin>=9 && pin<=13) || pin==14 || pin==15 || pin==17 || pin==21 || pin==22)) error(ANALOGWRITE, PSTR("invalid pin"), number(pin));
|
||||||
|
#elif defined(ADAFRUIT_GRAND_CENTRAL_M4)
|
||||||
|
if (!((pin>=2 && pin<=9) || pin==11 || (pin>=13 && pin<=45) || pin==48 || (pin>=50 && pin<=53) || pin==58 || pin==61 || pin==68 || pin==69)) error(ANALOGWRITE, PSTR("invalid pin"), number(pin));
|
||||||
#elif defined(_VARIANT_BBC_MICROBIT_)
|
#elif defined(_VARIANT_BBC_MICROBIT_)
|
||||||
if (!(pin>=0 && pin<=2)) error(ANALOGWRITE, PSTR("invalid pin"), number(pin));
|
if (!(pin>=0 && pin<=2)) error(ANALOGWRITE, PSTR("invalid pin"), number(pin));
|
||||||
#elif defined(MAX32620)
|
#elif defined(MAX32620)
|
||||||
|
|
Loading…
Reference in New Issue