Merge remote-tracking branch 'upstream/master' into stm32-uart

This commit is contained in:
Hierophect 2019-10-28 12:16:01 -04:00
commit 3034cfc82f
61 changed files with 900 additions and 161 deletions

View File

@ -52,9 +52,6 @@ jobs:
done
working-directory: tests
if: failure()
- name: Test threads
run: MICROPY_CPYTHON3=python3.5 MICROPY_MICROPYTHON=../ports/unix/micropython_coverage ./run-tests -j1 -d thread
working-directory: tests
- name: Native Tests
run: MICROPY_CPYTHON3=python3.5 MICROPY_MICROPYTHON=../ports/unix/micropython_coverage ./run-tests -j1 --emit native
working-directory: tests
@ -78,6 +75,7 @@ jobs:
board:
- "arduino_mkr1300"
- "arduino_mkrzero"
- "arduino_nano_33_ble"
- "arduino_zero"
- "bast_pro_mini_m0"
- "capablerobot_usbhub"
@ -95,7 +93,6 @@ jobs:
- "electronut_labs_blip"
- "electronut_labs_papyr"
- "escornabot_makech"
- "feather_f405"
- "feather_m0_adalogger"
- "feather_m0_basic"
- "feather_m0_express"
@ -106,12 +103,14 @@ jobs:
- "feather_m4_express"
- "feather_nrf52840_express"
- "feather_radiofruit_zigbee"
- "feather_stm32f405_express"
- "gemma_m0"
- "grandcentral_m4_express"
- "hallowing_m0_express"
- "hallowing_m4_express"
- "itsybitsy_m0_express"
- "itsybitsy_m4_express"
- "itsybitsy_nrf52840_express"
- "kicksat-sprite"
- "makerdiary_nrf52840_mdk"
- "makerdiary_nrf52840_mdk_usb_dongle"
@ -145,6 +144,8 @@ jobs:
- "snekboard"
- "sparkfun_lumidrive"
- "sparkfun_nrf52840_mini"
- "sparkfun_qwiic_micro_no_flash"
- "sparkfun_qwiic_micro_with_flash"
- "sparkfun_redboard_turbo"
- "sparkfun_samd21_dev"
- "sparkfun_samd21_mini"

@ -1 +0,0 @@
Subproject commit d2bcfda543d3b99361e44112aca929225bdcc07f

View File

@ -11,7 +11,7 @@ msgstr ""
"PO-Revision-Date: 2018-07-27 11:55-0700\n"
"Last-Translator: Pascal Deneaux\n"
"Language-Team: Sebastian Plamauer, Pascal Deneaux\n"
"Language: en_US\n"
"Language: de_DE\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
@ -336,7 +336,7 @@ msgstr "Der Puffergröße ist inkorrekt. Sie sollte %d bytes haben."
#: shared-bindings/displayio/Display.c
msgid "Buffer is not a bytearray."
msgstr ""
msgstr "Der Puffer ist kein Byte-Array"
#: shared-bindings/displayio/Display.c
msgid "Buffer is too small"
@ -345,7 +345,7 @@ msgstr "Der Puffer ist zu klein"
#: ports/nrf/common-hal/audiopwmio/PWMAudioOut.c
#, c-format
msgid "Buffer length %d too big. It must be less than %d"
msgstr ""
msgstr "Die Pufferlänge %d ist zu groß. Sie muss kleiner als %d sein."
#: shared-bindings/bitbangio/I2C.c shared-bindings/busio/I2C.c
msgid "Buffer must be at least length 1"
@ -367,7 +367,7 @@ msgstr "Ein Bytes kann nur Werte zwischen 0 und 255 annehmen."
#: py/objtype.c
msgid "Call super().__init__() before accessing native object."
msgstr ""
msgstr "Rufe super().__init__() vor dem Zugriff auf ein natives Objekt auf."
#: shared-bindings/_pixelbuf/PixelBuf.c
#, c-format
@ -449,11 +449,11 @@ msgstr "Clock unit wird benutzt"
#: shared-bindings/_pew/PewPew.c
msgid "Column entry must be digitalio.DigitalInOut"
msgstr ""
msgstr "Spalteneintrag muss digitalio.DigitalInOut sein"
#: shared-bindings/displayio/I2CDisplay.c
msgid "Command must be 0-255"
msgstr ""
msgstr "Der Befehl muss zwischen 0 und 255 liegen"
#: shared-bindings/displayio/FourWire.c shared-bindings/displayio/ParallelBus.c
msgid "Command must be an int between 0 and 255"
@ -461,11 +461,11 @@ msgstr "Der Befehl muss ein int zwischen 0 und 255 sein"
#: py/persistentcode.c
msgid "Corrupt .mpy file"
msgstr ""
msgstr "Beschädigte .mpy Datei"
#: py/emitglue.c
msgid "Corrupt raw code"
msgstr ""
msgstr "Beschädigter raw code"
#: ports/nrf/common-hal/_bleio/UUID.c
#, c-format
@ -499,7 +499,7 @@ msgstr "Data 0 pin muss am Byte ausgerichtet sein"
#: shared-module/audiocore/WaveFile.c
msgid "Data chunk must follow fmt chunk"
msgstr ""
msgstr "Dem fmt Block muss ein Datenblock folgen"
#: ports/nrf/common-hal/_bleio/Peripheral.c
msgid "Data too large for advertisement packet"
@ -511,11 +511,11 @@ msgstr "Die Zielkapazität ist kleiner als destination_length."
#: ports/nrf/common-hal/audiobusio/I2SOut.c
msgid "Device in use"
msgstr ""
msgstr "Gerät in Benutzung"
#: shared-bindings/displayio/Display.c
msgid "Display must have a 16 bit colorspace."
msgstr ""
msgstr "Display muss einen 16 Bit Farbraum haben."
#: shared-bindings/displayio/Display.c
#: shared-bindings/displayio/EPaperDisplay.c
@ -549,11 +549,11 @@ msgstr "Characteristic wird erwartet"
#: shared-bindings/_bleio/Service.c
msgid "Expected a Peripheral"
msgstr ""
msgstr "Ein Peripheriegerät wird erwartet"
#: shared-bindings/_bleio/Characteristic.c
msgid "Expected a Service"
msgstr ""
msgstr "Ein Service wird erwartet"
#: shared-bindings/_bleio/Characteristic.c shared-bindings/_bleio/Descriptor.c
#: shared-bindings/_bleio/Service.c
@ -586,7 +586,7 @@ msgstr "Hinzufügen des Characteristic ist gescheitert. Status: 0x%04x"
#: ports/nrf/common-hal/_bleio/Characteristic.c
#, c-format
msgid "Failed to add descriptor, err 0x%04x"
msgstr ""
msgstr "Deskriptor konnte nicht hinzugefügt werden. Status: 0x%04x"
#: ports/nrf/common-hal/_bleio/Peripheral.c
#, c-format
@ -640,7 +640,7 @@ msgstr ""
#: ports/nrf/common-hal/_bleio/Peripheral.c
msgid "Failed to pair"
msgstr ""
msgstr "Koppeln fehlgeschlagen"
#: ports/nrf/common-hal/_bleio/Characteristic.c
#, c-format
@ -651,7 +651,7 @@ msgstr "Kann CCCD value nicht lesen. Status: 0x%04x"
#: ports/nrf/common-hal/_bleio/Descriptor.c
#, c-format
msgid "Failed to read attribute value, err 0x%04x"
msgstr ""
msgstr "Kann Attributwert nicht lesen, Status: 0x%04x"
#: ports/nrf/common-hal/_bleio/__init__.c
#, c-format
@ -671,7 +671,7 @@ msgstr "Mutex konnte nicht freigegeben werden. Status: 0x%04x"
#: ports/nrf/common-hal/_bleio/Peripheral.c
#, c-format
msgid "Failed to set device name, err 0x%04x"
msgstr ""
msgstr "Gerätename konnte nicht gesetzt werden, Status: 0x%04x"
#: ports/nrf/common-hal/_bleio/Peripheral.c
#, c-format
@ -681,12 +681,12 @@ msgstr "Kann advertisement nicht starten. Status: 0x%04x"
#: ports/nrf/common-hal/_bleio/Central.c
#, c-format
msgid "Failed to start connecting, error 0x%04x"
msgstr "Verbindung konnte nicht hergestellt werden. Fehler: 0x%04x"
msgstr "Verbindung konnte nicht hergestellt werden. Status: 0x%04x"
#: ports/nrf/common-hal/_bleio/Peripheral.c
#, c-format
msgid "Failed to start pairing, error 0x%04x"
msgstr ""
msgstr "Starten des Koppelns fehlgeschlagen, Status: 0x%04x"
#: ports/nrf/common-hal/_bleio/Scanner.c
#, c-format
@ -701,7 +701,7 @@ msgstr "Kann advertisement nicht stoppen. Status: 0x%04x"
#: ports/nrf/common-hal/_bleio/Characteristic.c
#, c-format
msgid "Failed to write CCCD, err 0x%04x"
msgstr ""
msgstr "Konnte CCCD nicht schreiben, Status: 0x%04x"
#: ports/nrf/common-hal/_bleio/__init__.c
#, c-format
@ -747,7 +747,7 @@ msgstr "Die Funktion erwartet, dass der 'lock'-Befehl zuvor ausgeführt wurde"
#: shared-bindings/displayio/Display.c
#: shared-bindings/displayio/EPaperDisplay.c
msgid "Group already used"
msgstr ""
msgstr "Gruppe schon benutzt"
#: shared-module/displayio/Group.c
msgid "Group full"
@ -771,7 +771,7 @@ msgstr ""
#: shared-bindings/_pew/PewPew.c
msgid "Incorrect buffer size"
msgstr ""
msgstr "Inkorrekte Puffergröße"
#: py/moduerrno.c
msgid "Input/output error"
@ -797,7 +797,7 @@ msgstr "Ungültiges Argument"
#: shared-module/displayio/Bitmap.c
msgid "Invalid bits per value"
msgstr ""
msgstr "Ungültige Bits pro Wert"
#: ports/nrf/common-hal/busio/UART.c
msgid "Invalid buffer size"
@ -805,7 +805,7 @@ msgstr "Ungültige Puffergröße"
#: ports/atmel-samd/common-hal/frequencyio/FrequencyIn.c
msgid "Invalid capture period. Valid range: 1 - 500"
msgstr ""
msgstr "Ungültiger Aufnahmezeitraum. Gültiger Bereich: 1 - 500"
#: shared-bindings/audiomixer/Mixer.c
msgid "Invalid channel count"
@ -859,7 +859,7 @@ msgstr "Ungültige Polarität"
#: shared-bindings/_bleio/Characteristic.c
msgid "Invalid properties"
msgstr ""
msgstr "Ungültige Eigenschaften"
#: shared-bindings/microcontroller/__init__.c
msgid "Invalid run mode."
@ -867,11 +867,11 @@ msgstr "Ungültiger Ausführungsmodus"
#: shared-module/_bleio/Attribute.c
msgid "Invalid security_mode"
msgstr ""
msgstr "Ungültiger security_mode"
#: shared-bindings/audiomixer/Mixer.c
msgid "Invalid voice"
msgstr ""
msgstr "Ungültige Stimme"
#: shared-bindings/audiomixer/Mixer.c
msgid "Invalid voice count"
@ -887,7 +887,7 @@ msgstr "LHS des Schlüsselwortarguments muss eine id sein"
#: shared-module/displayio/Group.c
msgid "Layer already in a group."
msgstr ""
msgstr "Layer ist bereits in einer Gruppe."
#: shared-module/displayio/Group.c
msgid "Layer must be a Group or TileGrid subclass."
@ -942,11 +942,11 @@ msgstr ""
#: shared-bindings/displayio/Group.c
msgid "Must be a %q subclass."
msgstr ""
msgstr "Muss eine %q Unterklasse sein."
#: ports/nrf/common-hal/_bleio/Characteristic.c
msgid "No CCCD for this Characteristic"
msgstr ""
msgstr "Kein CCCD für diese Charakteristik"
#: ports/atmel-samd/common-hal/analogio/AnalogOut.c
msgid "No DAC on chip"
@ -967,7 +967,7 @@ msgstr "Kein TX Pin"
#: ports/atmel-samd/common-hal/frequencyio/FrequencyIn.c
msgid "No available clocks"
msgstr ""
msgstr "Keine Taktgeber verfügbar"
#: shared-bindings/board/__init__.c
msgid "No default %q bus"
@ -983,7 +983,7 @@ msgstr "Kein hardware random verfügbar"
#: ports/atmel-samd/common-hal/ps2io/Ps2.c
msgid "No hardware support on clk pin"
msgstr ""
msgstr "Keine Hardwareunterstützung am clk Pin"
#: ports/atmel-samd/common-hal/frequencyio/FrequencyIn.c
#: ports/atmel-samd/common-hal/pulseio/PulseIn.c
@ -992,11 +992,11 @@ msgstr "Keine Hardwareunterstützung an diesem Pin"
#: shared-module/touchio/TouchIn.c
msgid "No pulldown on pin; 1Mohm recommended"
msgstr ""
msgstr "Kein Pulldown Widerstand am Pin; 1Mohm wird vorgeschlagen"
#: py/moduerrno.c
msgid "No space left on device"
msgstr "Kein Speicherplatz auf Gerät"
msgstr "Kein Speicherplatz mehr verfügbar auf dem Gerät"
#: py/moduerrno.c
msgid "No such file/directory"
@ -1011,7 +1011,7 @@ msgstr "Nicht verbunden"
#: shared-bindings/audiobusio/I2SOut.c shared-bindings/audioio/AudioOut.c
#: shared-bindings/audiopwmio/PWMAudioOut.c
msgid "Not playing"
msgstr "Spielt nicht"
msgstr "Spielt nicht ab"
#: shared-bindings/util.c
msgid ""
@ -1033,6 +1033,7 @@ msgstr "Nur 8 oder 16 bit mono mit "
msgid ""
"Only Windows format, uncompressed BMP supported: given header size is %d"
msgstr ""
"Nur Windows-Format, unkomprimiertes BMP unterstützt: die gegebene Header-Größe ist %d"
#: shared-module/displayio/OnDiskBitmap.c
#, c-format
@ -1040,6 +1041,8 @@ msgid ""
"Only monochrome, indexed 4bpp or 8bpp, and 16bpp or greater BMPs supported: "
"%d bpp given"
msgstr ""
"Nur monochrome, indizierte 4bpp oder 8bpp, und 16bpp oder größere BMPs unterstützt: "
"%d bpp wurden gegeben"
#: shared-bindings/_pixelbuf/PixelBuf.c
msgid "Only slices with step=1 (aka None) are supported"
@ -1100,7 +1103,7 @@ msgstr "Eine RTC wird auf diesem Board nicht unterstützt"
#: shared-bindings/_pixelbuf/PixelBuf.c
msgid "Range out of bounds"
msgstr ""
msgstr "Bereich außerhalb der Grenzen"
#: shared-bindings/pulseio/PulseIn.c
msgid "Read-only"
@ -1116,7 +1119,7 @@ msgstr "Schreibgeschützte Objekt"
#: shared-bindings/displayio/EPaperDisplay.c
msgid "Refresh too soon"
msgstr ""
msgstr "Zu früh neu geladen"
#: ports/atmel-samd/common-hal/audioio/AudioOut.c
msgid "Right channel unsupported"
@ -1124,7 +1127,7 @@ msgstr "Rechter Kanal wird nicht unterstützt"
#: shared-bindings/_pew/PewPew.c
msgid "Row entry must be digitalio.DigitalInOut"
msgstr ""
msgstr "Zeileneintrag muss ein digitalio.DigitalInOut sein"
#: main.c
msgid "Running in safe mode! Auto-reload is off.\n"
@ -1199,6 +1202,8 @@ msgid ""
"The `microcontroller` module was used to boot into safe mode. Press reset to "
"exit safe mode.\n"
msgstr ""
"Das `Mikrocontroller` Modul wurde benutzt, um in den Sicherheitsmodus zu starten. "
"Drücke Reset um den Sicherheitsmodus zu verlassen.\n"
#: supervisor/shared/safe_mode.c
msgid ""
@ -1288,7 +1293,7 @@ msgstr "USB Fehler"
#: shared-bindings/_bleio/UUID.c
msgid "UUID integer value must be 0-0xffff"
msgstr ""
msgstr "UUID Integer-Wert muss ein Wert von 0 bis 0xffff sein"
#: shared-bindings/_bleio/UUID.c
msgid "UUID string not 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx'"
@ -1306,7 +1311,7 @@ msgstr "Konnte keine Buffer für Vorzeichenumwandlung allozieren"
#: shared-module/displayio/I2CDisplay.c
#, c-format
msgid "Unable to find I2C Display at %x"
msgstr ""
msgstr "Konnte kein I2C Display finden an %x"
#: ports/atmel-samd/common-hal/audiobusio/I2SOut.c
#: ports/atmel-samd/common-hal/audiobusio/PDMIn.c
@ -1319,7 +1324,7 @@ msgstr "Parser konnte nicht gestartet werden"
#: shared-module/displayio/OnDiskBitmap.c
msgid "Unable to read color palette data"
msgstr ""
msgstr "Konnte Farbpalettendaten nicht lesen"
#: shared-bindings/nvm/ByteArray.c
msgid "Unable to write to nvm."
@ -1364,7 +1369,7 @@ msgstr ""
#: ports/nrf/common-hal/_bleio/Characteristic.c
#: ports/nrf/common-hal/_bleio/Descriptor.c
msgid "Value length > max_length"
msgstr ""
msgstr "Länge des Wertes > max_length"
#: py/emitnative.c
msgid "Viper functions don't currently support more than 4 arguments"
@ -1471,11 +1476,11 @@ msgstr ""
#: py/objstr.c
msgid "bad format string"
msgstr ""
msgstr "Falscher Formatstring"
#: py/binary.c
msgid "bad typecode"
msgstr ""
msgstr "Falscher Typcode"
#: py/emitnative.c
msgid "binary op %q not implemented"
@ -1534,7 +1539,7 @@ msgstr ""
#: shared-bindings/_pixelbuf/PixelBuf.c
#, c-format
msgid "byteorder is not an instance of ByteOrder (got a %s)"
msgstr ""
msgstr "byteorder ist keine Instanz von ByteOrder (%s erhalten)"
#: ports/atmel-samd/common-hal/busio/UART.c
msgid "bytes > 8 bits not supported"
@ -1558,7 +1563,7 @@ msgstr "Kalibrierwert nicht im Bereich von +/-127"
#: py/emitinlinethumb.c
msgid "can only have up to 4 parameters to Thumb assembly"
msgstr ""
msgstr "kann nur bis zu 4 Parameter für die Thumb assembly haben"
#: py/emitinlinextensa.c
msgid "can only have up to 4 parameters to Xtensa assembly"
@ -1657,7 +1662,7 @@ msgstr "Laden von '%q' nicht möglich"
#: py/emitnative.c
msgid "can't load with '%q' index"
msgstr ""
msgstr "Laden mit '%q' index nicht möglich"
#: py/objgenerator.c
msgid "can't pend throw to just-started generator"
@ -1669,7 +1674,7 @@ msgstr ""
#: py/objnamedtuple.c
msgid "can't set attribute"
msgstr ""
msgstr "kann Attribut nicht setzen"
#: py/emitnative.c
msgid "can't store '%q'"
@ -1695,11 +1700,11 @@ msgstr ""
#: py/objtype.c
msgid "cannot create '%q' instances"
msgstr ""
msgstr "Kann '%q' Instanzen nicht erstellen"
#: py/objtype.c
msgid "cannot create instance"
msgstr ""
msgstr "Kann Instanz nicht erstellen"
#: py/runtime.c
msgid "cannot import name %q"
@ -1727,31 +1732,31 @@ msgstr "chr() arg ist nicht in range(256)"
#: shared-bindings/displayio/Palette.c
msgid "color buffer must be 3 bytes (RGB) or 4 bytes (RGB + pad byte)"
msgstr ""
msgstr "Farbpuffer muss 3 Bytes (RGB) oder 4 Bytes (RGB + pad byte) sein"
#: shared-bindings/displayio/Palette.c
msgid "color buffer must be a buffer or int"
msgstr ""
msgstr "Farbpuffer muss ein Puffer oder ein int sein"
#: shared-bindings/displayio/Palette.c
msgid "color buffer must be a bytearray or array of type 'b' or 'B'"
msgstr ""
msgstr "Farbpuffer muss ein Byte-Array oder ein Array vom Typ 'b' oder 'B' sein"
#: shared-bindings/displayio/Palette.c
msgid "color must be between 0x000000 and 0xffffff"
msgstr ""
msgstr "Farbe muss zwischen 0x000000 und 0xffffff liegen"
#: shared-bindings/displayio/ColorConverter.c
msgid "color should be an int"
msgstr ""
msgstr "Farbe sollte ein int sein"
#: py/objcomplex.c
msgid "complex division by zero"
msgstr ""
msgstr "Komplexe Division durch null"
#: py/objfloat.c py/parsenum.c
msgid "complex values not supported"
msgstr ""
msgstr "Komplexe Zahlen nicht unterstützt"
#: extmod/moduzlib.c
msgid "compression header"
@ -1759,15 +1764,15 @@ msgstr "kompression header"
#: py/parse.c
msgid "constant must be an integer"
msgstr ""
msgstr "constant muss ein integer sein"
#: py/emitnative.c
msgid "conversion to object"
msgstr ""
msgstr "Umwandlung zu Objekt"
#: py/parsenum.c
msgid "decimal numbers not supported"
msgstr ""
msgstr "Dezimalzahlen nicht unterstützt"
#: py/compile.c
msgid "default 'except' must be last"
@ -1784,7 +1789,7 @@ msgstr ""
#: shared-bindings/audiobusio/PDMIn.c
msgid "destination_length must be an int >= 0"
msgstr ""
msgstr "destination_length muss ein int >= 0 sein"
#: py/objdict.c
msgid "dict update sequence has wrong length"
@ -1817,7 +1822,7 @@ msgstr ""
#: shared-bindings/displayio/Shape.c
msgid "end_x should be an int"
msgstr ""
msgstr "end_x sollte ein int sein"
#: ports/nrf/common-hal/busio/UART.c
#, c-format
@ -1994,7 +1999,7 @@ msgstr "integer erforderlich"
#: shared-bindings/_bleio/Peripheral.c shared-bindings/_bleio/Scanner.c
#, c-format
msgid "interval must be in range %s-%s"
msgstr ""
msgstr "Das Intervall muss im Bereich %s-%s sein"
#: extmod/machine_i2c.c
msgid "invalid I2C peripheral"
@ -2127,7 +2132,7 @@ msgstr ""
#: ports/nrf/common-hal/_bleio/Descriptor.c
#, c-format
msgid "max_length must be 0-%d when fixed_length is %s"
msgstr ""
msgstr "max_length muss 0-%d sein, wenn fixed_length %s ist"
#: py/runtime.c
msgid "maximum recursion depth exceeded"
@ -2156,7 +2161,7 @@ msgstr ""
#: py/objtype.c
msgid "multiple inheritance not supported"
msgstr ""
msgstr "Mehrfache Vererbung nicht unterstützt"
#: py/emitnative.c
msgid "must raise an object"
@ -2209,7 +2214,7 @@ msgstr ""
#: shared-bindings/socket/__init__.c shared-module/network/__init__.c
msgid "no available NIC"
msgstr ""
msgstr "kein verfügbares Netzwerkadapter (NIC)"
#: py/compile.c
msgid "no binding for nonlocal found"
@ -2222,11 +2227,11 @@ msgstr "Kein Modul mit dem Namen '%q'"
#: shared-bindings/displayio/FourWire.c shared-bindings/displayio/I2CDisplay.c
#: shared-bindings/displayio/ParallelBus.c
msgid "no reset pin available"
msgstr ""
msgstr "kein Reset Pin verfügbar"
#: py/runtime.c shared-bindings/_pixelbuf/__init__.c
msgid "no such attribute"
msgstr ""
msgstr "kein solches Attribut"
#: ports/nrf/common-hal/_bleio/__init__.c
msgid "non-UUID found in service_uuids_whitelist"
@ -2316,11 +2321,11 @@ msgstr "offset außerhalb der Grenzen"
#: ports/nrf/common-hal/audiobusio/PDMIn.c
msgid "only bit_depth=16 is supported"
msgstr ""
msgstr "nur eine bit_depth=16 wird unterstützt"
#: ports/nrf/common-hal/audiobusio/PDMIn.c
msgid "only sample_rate=16000 is supported"
msgstr ""
msgstr "nur eine sample_rate=16000 wird unterstützt"
#: py/objarray.c py/objstr.c py/objstrunicode.c py/objtuple.c
#: shared-bindings/nvm/ByteArray.c
@ -2340,7 +2345,7 @@ msgstr ""
#: py/objint_mpz.c
msgid "overflow converting long int to machine word"
msgstr ""
msgstr "Überlauf beim konvertieren von long int zu machine word"
#: shared-bindings/_stage/Layer.c shared-bindings/_stage/Text.c
msgid "palette must be 32 bytes long"
@ -2348,7 +2353,7 @@ msgstr ""
#: shared-bindings/displayio/Palette.c
msgid "palette_index should be an int"
msgstr ""
msgstr "palette_index sollte ein int sein"
#: py/compile.c
msgid "parameter annotation must be an identifier"
@ -2450,7 +2455,7 @@ msgstr "Der schedule stack ist voll"
#: lib/utils/pyexec.c py/builtinimport.c
msgid "script compilation not supported"
msgstr "kompilieren von Skripten ist nicht unterstützt"
msgstr "kompilieren von Skripten nicht unterstützt"
#: py/objstr.c
msgid "sign not allowed in string format specifier"
@ -2482,11 +2487,11 @@ msgstr "weicher reboot\n"
#: py/objstr.c
msgid "start/end indices"
msgstr ""
msgstr "start/end Indizes"
#: shared-bindings/displayio/Shape.c
msgid "start_x should be an int"
msgstr ""
msgstr "start_x sollte ein int sein"
#: shared-bindings/random/__init__.c
msgid "step must be non-zero"
@ -2506,7 +2511,7 @@ msgstr "stream operation ist nicht unterstützt"
#: py/objstrunicode.c
msgid "string index out of range"
msgstr ""
msgstr "String index außerhalb des Bereiches"
#: py/objstrunicode.c
#, c-format
@ -2597,11 +2602,11 @@ msgstr "tx und rx können nicht beide None sein"
#: py/objtype.c
msgid "type '%q' is not an acceptable base type"
msgstr ""
msgstr "Typ '%q' ist kein akzeptierter Basis-Typ"
#: py/objtype.c
msgid "type is not an acceptable base type"
msgstr ""
msgstr "Typ ist kein akzeptierter Basis-Typ"
#: py/runtime.c
msgid "type object '%q' has no attribute '%q'"
@ -2713,11 +2718,11 @@ msgstr "nicht unterstützte Typen für %q: '%s', '%s'"
#: py/objint.c
#, c-format
msgid "value must fit in %d byte(s)"
msgstr ""
msgstr "Wert muss in %d Byte(s) passen"
#: shared-bindings/displayio/Bitmap.c
msgid "value_count must be > 0"
msgstr ""
msgstr "value_count muss größer als 0 sein"
#: shared-bindings/_bleio/Scanner.c
msgid "window must be <= interval"

2
main.c
View File

@ -477,7 +477,7 @@ void gc_collect(void) {
// This naively collects all object references from an approximate stack
// range.
gc_collect_root((void**)sp, ((uint32_t)&_estack - sp) / sizeof(uint32_t));
gc_collect_root((void**)sp, ((uint32_t)port_stack_get_top() - sp) / sizeof(uint32_t));
gc_collect_end();
}

View File

@ -28,8 +28,7 @@ STATIC const mp_rom_map_elem_t board_global_dict_table[] = {
{ MP_ROM_QSTR(MP_QSTR_NEOPIXEL), MP_ROM_PTR(&pin_PB23) },
{ MP_ROM_QSTR(MP_QSTR_LED), MP_ROM_PTR(&pin_PB22) },
{ MP_ROM_QSTR(MP_QSTR_TX), MP_ROM_PTR(&pin_PB02) },
{ MP_ROM_QSTR(MP_QSTR_RX), MP_ROM_PTR(&pin_PB03) },
// GROVE on SERCOM0
{ MP_ROM_QSTR(MP_QSTR_GROVE_SCL), MP_ROM_PTR(&pin_PA09) },
@ -50,8 +49,8 @@ STATIC const mp_rom_map_elem_t board_global_dict_table[] = {
// UART on SERCOM1 (Raspberry Pi)
{ MP_ROM_QSTR(MP_QSTR_TX1), MP_ROM_PTR(&pin_PA16) },
{ MP_ROM_QSTR(MP_QSTR_RX1), MP_ROM_PTR(&pin_PA17) },
{ MP_ROM_QSTR(MP_QSTR_PI_RX), MP_ROM_PTR(&pin_PA16) },
{ MP_ROM_QSTR(MP_QSTR_PI_TX), MP_ROM_PTR(&pin_PA17) },
{ MP_ROM_QSTR(MP_QSTR_PI_TX), MP_ROM_PTR(&pin_PA16) },
{ MP_ROM_QSTR(MP_QSTR_PI_RX), MP_ROM_PTR(&pin_PA17) },
// I2C on SERCOM1 (External Connector)
{ MP_ROM_QSTR(MP_QSTR_SDA1), MP_ROM_PTR(&pin_PA00) },

View File

@ -0,0 +1,38 @@
/*
* This file is part of the MicroPython project, http://micropython.org/
*
* The MIT License (MIT)
*
* Copyright (c) 2017 Scott Shawcroft for Adafruit Industries
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
#include "boards/board.h"
void board_init(void)
{
}
bool board_requests_safe_mode(void) {
return false;
}
void reset_board(void) {
}

View File

@ -0,0 +1,38 @@
#define MICROPY_HW_BOARD_NAME "SparkFun Qwiic Micro"
#define MICROPY_HW_MCU_NAME "samd21e18"
#define MICROPY_PORT_A ( 0 )
#define MICROPY_PORT_B ( 0 )
#define MICROPY_PORT_C ( 0 )
#define CIRCUITPY_INTERNAL_NVM_SIZE 256
#define BOARD_FLASH_SIZE (0x00040000 - 0x2000 - 0x010000 - CIRCUITPY_INTERNAL_NVM_SIZE)
#define CALIBRATE_CRYSTALLESS 1
#define BOARD_HAS_CRYSTAL 0
//I2C and Qwiic Connector
#define DEFAULT_I2C_BUS_SCL (&pin_PA09)
#define DEFAULT_I2C_BUS_SDA (&pin_PA08)
//SPI
#define DEFAULT_SPI_BUS_SCK (&pin_PA07)
#define DEFAULT_SPI_BUS_MOSI (&pin_PA06)
#define DEFAULT_SPI_BUS_MISO (&pin_PA05)
//UART
#define DEFAULT_UART_BUS_RX (&pin_PA23)
#define DEFAULT_UART_BUS_TX (&pin_PA22)
// USB is always used internally so skip the pin objects for it.
#define IGNORE_PIN_PA24 1
#define IGNORE_PIN_PA25 1
// Unused
#define IGNORE_PIN_PA03 1
#define IGNORE_PIN_PA11 1
#define IGNORE_PIN_PA14 1
#define IGNORE_PIN_PA15 1
#define IGNORE_PIN_PA27 1
#define IGNORE_PIN_PA28 1

View File

@ -0,0 +1,14 @@
LD_FILE = boards/samd21x18-bootloader-external-flash-crystalless.ld
USB_VID = 0x1B4F
USB_PID = 0x8D24
USB_PRODUCT = "SparkFun Qwiic Micro"
USB_MANUFACTURER = "SparkFun Electronics"
CHIP_VARIANT = SAMD21E18A
CHIP_FAMILY = samd21
INTERNAL_FLASH_FILESYSTEM = 1
LONGINT_IMPL = NONE
CIRCUITPY_SMALL_BUILD = 1
SUPEROPT_GC = 0

View File

@ -0,0 +1,42 @@
#include "shared-bindings/board/__init__.h"
STATIC const mp_rom_map_elem_t board_global_dict_table[] = {
{ MP_ROM_QSTR(MP_QSTR_A0), MP_ROM_PTR(&pin_PA02) },
{ MP_ROM_QSTR(MP_QSTR_A1), MP_ROM_PTR(&pin_PA06) },
{ MP_ROM_QSTR(MP_QSTR_A2), MP_ROM_PTR(&pin_PA05) },
{ MP_ROM_QSTR(MP_QSTR_A3), MP_ROM_PTR(&pin_PA07) },
{ MP_ROM_QSTR(MP_QSTR_A4), MP_ROM_PTR(&pin_PA10) },
{ MP_ROM_QSTR(MP_QSTR_A5), MP_ROM_PTR(&pin_PA04) },
{ MP_ROM_QSTR(MP_QSTR_D0), MP_ROM_PTR(&pin_PA08) },
{ MP_ROM_QSTR(MP_QSTR_D1), MP_ROM_PTR(&pin_PA02) },
{ MP_ROM_QSTR(MP_QSTR_D2), MP_ROM_PTR(&pin_PA06) },
{ MP_ROM_QSTR(MP_QSTR_D3), MP_ROM_PTR(&pin_PA05) },
{ MP_ROM_QSTR(MP_QSTR_D4), MP_ROM_PTR(&pin_PA07) },
{ MP_ROM_QSTR(MP_QSTR_D5), MP_ROM_PTR(&pin_PA00) },
{ MP_ROM_QSTR(MP_QSTR_D6), MP_ROM_PTR(&pin_PA01) },
{ MP_ROM_QSTR(MP_QSTR_D7), MP_ROM_PTR(&pin_PA04) },
{ MP_ROM_QSTR(MP_QSTR_D8), MP_ROM_PTR(&pin_PA09) },
{ MP_ROM_QSTR(MP_QSTR_D13), MP_ROM_PTR(&pin_PA10) },
{ MP_ROM_QSTR(MP_QSTR_D16), MP_ROM_PTR(&pin_PA22) },
{ MP_ROM_QSTR(MP_QSTR_D17), MP_ROM_PTR(&pin_PA23) },
// External SPI
{ MP_ROM_QSTR(MP_QSTR_SCK), MP_ROM_PTR(&pin_PA07) },
{ MP_ROM_QSTR(MP_QSTR_MOSI), MP_ROM_PTR(&pin_PA06) },
{ MP_ROM_QSTR(MP_QSTR_MISO), MP_ROM_PTR(&pin_PA05) },
{ MP_ROM_QSTR(MP_QSTR_SPI), MP_ROM_PTR(&board_spi_obj) },
// UART
{ MP_ROM_QSTR(MP_QSTR_TX), MP_ROM_PTR(&pin_PA22) },
{ MP_ROM_QSTR(MP_QSTR_RX), MP_ROM_PTR(&pin_PA23) },
{ MP_ROM_QSTR(MP_QSTR_UART), MP_ROM_PTR(&board_uart_obj) },
// I2C and Qwiic Connector
{ MP_ROM_QSTR(MP_QSTR_SDA), MP_ROM_PTR(&pin_PA08) },
{ MP_ROM_QSTR(MP_QSTR_SCL), MP_ROM_PTR(&pin_PA09) },
{ MP_ROM_QSTR(MP_QSTR_I2C), MP_ROM_PTR(&board_i2c_obj) }
};
MP_DEFINE_CONST_DICT(board_module_globals, board_global_dict_table);

View File

@ -0,0 +1,38 @@
/*
* This file is part of the MicroPython project, http://micropython.org/
*
* The MIT License (MIT)
*
* Copyright (c) 2017 Scott Shawcroft for Adafruit Industries
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
#include "boards/board.h"
void board_init(void)
{
}
bool board_requests_safe_mode(void) {
return false;
}
void reset_board(void) {
}

View File

@ -0,0 +1,46 @@
#define MICROPY_HW_BOARD_NAME "SparkFun Qwiic Micro"
#define MICROPY_HW_MCU_NAME "samd21e18"
// Clock rates are off: Salae reads 12MHz which is the limit even though we set it to the safer 8MHz.
#define SPI_FLASH_BAUDRATE (8000000)
#define SPI_FLASH_MOSI_PIN &pin_PA16
#define SPI_FLASH_MISO_PIN &pin_PA18
#define SPI_FLASH_SCK_PIN &pin_PA17
#define SPI_FLASH_CS_PIN &pin_PA19
#define MICROPY_PORT_A ( 0 )
#define MICROPY_PORT_B ( 0 )
#define MICROPY_PORT_C ( 0 )
#define CIRCUITPY_INTERNAL_NVM_SIZE 256
#define BOARD_FLASH_SIZE (0x00040000 - 0x2000 - CIRCUITPY_INTERNAL_NVM_SIZE)
#define CALIBRATE_CRYSTALLESS 1
#define BOARD_HAS_CRYSTAL 0
//I2C and Qwiic Connector
#define DEFAULT_I2C_BUS_SCL (&pin_PA09)
#define DEFAULT_I2C_BUS_SDA (&pin_PA08)
//SPI
#define DEFAULT_SPI_BUS_SCK (&pin_PA07)
#define DEFAULT_SPI_BUS_MOSI (&pin_PA06)
#define DEFAULT_SPI_BUS_MISO (&pin_PA05)
//UART
#define DEFAULT_UART_BUS_RX (&pin_PA23)
#define DEFAULT_UART_BUS_TX (&pin_PA22)
// USB is always used internally so skip the pin objects for it.
#define IGNORE_PIN_PA24 1
#define IGNORE_PIN_PA25 1
// Unused
#define IGNORE_PIN_PA03 1
#define IGNORE_PIN_PA11 1
#define IGNORE_PIN_PA14 1
#define IGNORE_PIN_PA15 1
#define IGNORE_PIN_PA27 1
#define IGNORE_PIN_PA28 1

View File

@ -0,0 +1,16 @@
LD_FILE = boards/samd21x18-bootloader-external-flash-crystalless.ld
USB_VID = 0x1B4F
USB_PID = 0x8D24
USB_PRODUCT = "SparkFun Qwiic Micro"
USB_MANUFACTURER = "SparkFun Electronics"
CHIP_VARIANT = SAMD21E18A
CHIP_FAMILY = samd21
SPI_FLASH_FILESYSTEM = 1
EXTERNAL_FLASH_DEVICE_COUNT = 1
EXTERNAL_FLASH_DEVICES = "W25Q32FV"
LONGINT_IMPL = MPZ
CIRCUITPY_SMALL_BUILD = 1
SUPEROPT_GC = 0

View File

@ -0,0 +1,42 @@
#include "shared-bindings/board/__init__.h"
STATIC const mp_rom_map_elem_t board_global_dict_table[] = {
{ MP_ROM_QSTR(MP_QSTR_A0), MP_ROM_PTR(&pin_PA02) },
{ MP_ROM_QSTR(MP_QSTR_A1), MP_ROM_PTR(&pin_PA06) },
{ MP_ROM_QSTR(MP_QSTR_A2), MP_ROM_PTR(&pin_PA05) },
{ MP_ROM_QSTR(MP_QSTR_A3), MP_ROM_PTR(&pin_PA07) },
{ MP_ROM_QSTR(MP_QSTR_A4), MP_ROM_PTR(&pin_PA10) },
{ MP_ROM_QSTR(MP_QSTR_A5), MP_ROM_PTR(&pin_PA04) },
{ MP_ROM_QSTR(MP_QSTR_D0), MP_ROM_PTR(&pin_PA08) },
{ MP_ROM_QSTR(MP_QSTR_D1), MP_ROM_PTR(&pin_PA02) },
{ MP_ROM_QSTR(MP_QSTR_D2), MP_ROM_PTR(&pin_PA06) },
{ MP_ROM_QSTR(MP_QSTR_D3), MP_ROM_PTR(&pin_PA05) },
{ MP_ROM_QSTR(MP_QSTR_D4), MP_ROM_PTR(&pin_PA07) },
{ MP_ROM_QSTR(MP_QSTR_D5), MP_ROM_PTR(&pin_PA00) },
{ MP_ROM_QSTR(MP_QSTR_D6), MP_ROM_PTR(&pin_PA01) },
{ MP_ROM_QSTR(MP_QSTR_D7), MP_ROM_PTR(&pin_PA04) },
{ MP_ROM_QSTR(MP_QSTR_D8), MP_ROM_PTR(&pin_PA09) },
{ MP_ROM_QSTR(MP_QSTR_D13), MP_ROM_PTR(&pin_PA10) },
{ MP_ROM_QSTR(MP_QSTR_D16), MP_ROM_PTR(&pin_PA22) },
{ MP_ROM_QSTR(MP_QSTR_D17), MP_ROM_PTR(&pin_PA23) },
// External SPI
{ MP_ROM_QSTR(MP_QSTR_SCK), MP_ROM_PTR(&pin_PA07) },
{ MP_ROM_QSTR(MP_QSTR_MOSI), MP_ROM_PTR(&pin_PA06) },
{ MP_ROM_QSTR(MP_QSTR_MISO), MP_ROM_PTR(&pin_PA05) },
{ MP_ROM_QSTR(MP_QSTR_SPI), MP_ROM_PTR(&board_spi_obj) },
// UART
{ MP_ROM_QSTR(MP_QSTR_TX), MP_ROM_PTR(&pin_PA22) },
{ MP_ROM_QSTR(MP_QSTR_RX), MP_ROM_PTR(&pin_PA23) },
{ MP_ROM_QSTR(MP_QSTR_UART), MP_ROM_PTR(&board_uart_obj) },
// I2C and Qwiic Connector
{ MP_ROM_QSTR(MP_QSTR_SDA), MP_ROM_PTR(&pin_PA08) },
{ MP_ROM_QSTR(MP_QSTR_SCL), MP_ROM_PTR(&pin_PA09) },
{ MP_ROM_QSTR(MP_QSTR_I2C), MP_ROM_PTR(&board_i2c_obj) }
};
MP_DEFINE_CONST_DICT(board_module_globals, board_global_dict_table);

View File

@ -271,6 +271,14 @@ void reset_cpu(void) {
reset();
}
uint32_t *port_stack_get_limit(void) {
return &_ebss;
}
uint32_t *port_stack_get_top(void) {
return &_estack;
}
// Place the word to save 8k from the end of RAM so we and the bootloader don't clobber it.
#ifdef SAMD21
uint32_t* safe_word = (uint32_t*) (HMCRAMC0_ADDR + HMCRAMC0_SIZE - 0x2000);

View File

@ -90,6 +90,7 @@ INC += \
-I$(SPRESENSE_SDK)/nuttx/include \
-I$(SPRESENSE_SDK)/nuttx/arch \
-I$(SPRESENSE_SDK)/nuttx/arch/chip \
-I$(SPRESENSE_SDK)/nuttx/arch/os \
-I$(SPRESENSE_SDK)/sdk/bsp/include \
-I$(SPRESENSE_SDK)/sdk/bsp/include/sdk \
@ -124,7 +125,6 @@ LDFLAGS = \
--entry=__start \
-nostartfiles \
-nodefaultlibs \
--defsym __stack=_vectors+786432 \
-T$(SPRESENSE_SDK)/nuttx/build/ramconfig.ld \
--gc-sections \
-Map=$(BUILD)/output.map \

View File

@ -26,7 +26,6 @@
#define MICROPY_HW_BOARD_NAME "SPRESENSE"
#define MICROPY_HW_MCU_NAME "CXD5602"
#define MICROPY_PY_SYS_PLATFORM "SPRESENSE"
#define DEFAULT_I2C_BUS_SCL (&pin_I2C0_BCK)
#define DEFAULT_I2C_BUS_SDA (&pin_I2C0_BDT)

View File

@ -68,9 +68,11 @@ void common_hal_analogio_analogin_construct(analogio_analogin_obj_t *self, const
mp_raise_ValueError(translate("Pin does not have ADC capabilities"));
}
analogin_dev[self->number].fd = open(analogin_dev[pin->number].devpath, O_RDONLY);
if (analogin_dev[self->number].fd < 0) {
mp_raise_ValueError(translate("Pin does not have ADC capabilities"));
analogin_dev[self->number].fd = open(analogin_dev[self->number].devpath, O_RDONLY);
if (analogin_dev[self->number].fd < 0) {
mp_raise_ValueError(translate("Pin does not have ADC capabilities"));
}
}
// SCU FIFO overwrite
@ -99,7 +101,7 @@ void common_hal_analogio_analogin_deinit(analogio_analogin_obj_t *self) {
}
bool common_hal_analogio_analogin_deinited(analogio_analogin_obj_t *self) {
return self->pin == mp_const_none;
return analogin_dev[self->number].fd < 0;
}
uint16_t common_hal_analogio_analogin_get_value(analogio_analogin_obj_t *self) {

View File

@ -34,7 +34,7 @@
typedef struct {
mp_obj_base_t base;
const mcu_pin_obj_t *pin;
uint8_t number;
int8_t number;
} analogio_analogin_obj_t;
void analogin_reset(void);

View File

@ -32,7 +32,6 @@
#include <sys/time.h>
#include <sys/select.h>
#include <sys/ioctl.h>
#include <arch/chip/pin.h>
#include <nuttx/serial/tioctl.h>
#include <nuttx/fs/ioctl.h>
@ -42,22 +41,23 @@
#include "shared-bindings/busio/UART.h"
typedef struct {
const char* devpath;
const mcu_pin_obj_t *tx;
const mcu_pin_obj_t *rx;
int fd;
} busio_uart_dev_t;
STATIC busio_uart_dev_t busio_uart_dev[] = {
{"/dev/ttyS2", &pin_UART2_TXD, &pin_UART2_RXD, -1},
};
void common_hal_busio_uart_construct(busio_uart_obj_t *self,
const mcu_pin_obj_t *tx, const mcu_pin_obj_t *rx, uint32_t baudrate,
uint8_t bits, uart_parity_t parity, uint8_t stop, mp_float_t timeout,
uint16_t receiver_buffer_size) {
struct termios tio;
self->uart_fd = open("/dev/ttyS2", O_RDWR);
if (self->uart_fd < 0) {
mp_raise_ValueError(translate("Could not initialize UART"));
}
ioctl(self->uart_fd, TCGETS, (long unsigned int)&tio);
tio.c_speed = baudrate;
ioctl(self->uart_fd, TCSETS, (long unsigned int)&tio);
ioctl(self->uart_fd, TCFLSH, (long unsigned int)NULL);
if (bits != 8) {
mp_raise_ValueError(translate("Could not initialize UART"));
}
@ -70,10 +70,32 @@ void common_hal_busio_uart_construct(busio_uart_obj_t *self,
mp_raise_ValueError(translate("Could not initialize UART"));
}
if (tx->number != PIN_UART2_TXD || rx->number != PIN_UART2_RXD) {
self->number = -1;
for (int i = 0; i < MP_ARRAY_SIZE(busio_uart_dev); i++) {
if (tx->number == busio_uart_dev[i].tx->number &&
rx->number == busio_uart_dev[i].rx->number) {
self->number = i;
break;
}
}
if (self->number < 0) {
mp_raise_ValueError(translate("Invalid pins"));
}
if (busio_uart_dev[self->number].fd < 0) {
busio_uart_dev[self->number].fd = open(busio_uart_dev[self->number].devpath, O_RDWR);
if (busio_uart_dev[self->number].fd < 0) {
mp_raise_ValueError(translate("Could not initialize UART"));
}
}
ioctl(busio_uart_dev[self->number].fd, TCGETS, (long unsigned int)&tio);
tio.c_speed = baudrate;
ioctl(busio_uart_dev[self->number].fd, TCSETS, (long unsigned int)&tio);
ioctl(busio_uart_dev[self->number].fd, TCFLSH, (long unsigned int)NULL);
claim_pin(tx);
claim_pin(rx);
@ -88,15 +110,15 @@ void common_hal_busio_uart_deinit(busio_uart_obj_t *self) {
return;
}
close(self->uart_fd);
self->uart_fd = -1;
close(busio_uart_dev[self->number].fd);
busio_uart_dev[self->number].fd = -1;
reset_pin_number(self->tx_pin->number);
reset_pin_number(self->rx_pin->number);
}
bool common_hal_busio_uart_deinited(busio_uart_obj_t *self) {
return self->uart_fd < 0;
return busio_uart_dev[self->number].fd < 0;
}
size_t common_hal_busio_uart_read(busio_uart_obj_t *self, uint8_t *data, size_t len, int *errcode) {
@ -110,15 +132,15 @@ size_t common_hal_busio_uart_read(busio_uart_obj_t *self, uint8_t *data, size_t
}
FD_ZERO(&rfds);
FD_SET(self->uart_fd, &rfds);
FD_SET(busio_uart_dev[self->number].fd, &rfds);
tv.tv_sec = 0;
tv.tv_usec = self->timeout * 1000;
retval = select(self->uart_fd + 1, &rfds, NULL, NULL, &tv);
retval = select(busio_uart_dev[self->number].fd + 1, &rfds, NULL, NULL, &tv);
if (retval) {
bytes_read = read(self->uart_fd, data, len);
bytes_read = read(busio_uart_dev[self->number].fd, data, len);
} else {
*errcode = EAGAIN;
return MP_STREAM_ERROR;
@ -128,8 +150,7 @@ size_t common_hal_busio_uart_read(busio_uart_obj_t *self, uint8_t *data, size_t
}
size_t common_hal_busio_uart_write(busio_uart_obj_t *self, const uint8_t *data, size_t len, int *errcode) {
int bytes_written = write(self->uart_fd, data, len);
int bytes_written = write(busio_uart_dev[self->number].fd, data, len);
if (bytes_written < 0) {
*errcode = MP_EAGAIN;
return MP_STREAM_ERROR;
@ -145,16 +166,16 @@ uint32_t common_hal_busio_uart_get_baudrate(busio_uart_obj_t *self) {
void common_hal_busio_uart_set_baudrate(busio_uart_obj_t *self, uint32_t baudrate) {
struct termios tio;
ioctl(self->uart_fd, TCGETS, (long unsigned int)&tio);
ioctl(busio_uart_dev[self->number].fd, TCGETS, (long unsigned int)&tio);
tio.c_speed = baudrate;
ioctl(self->uart_fd, TCSETS, (long unsigned int)&tio);
ioctl(self->uart_fd, TCFLSH, (long unsigned int)NULL);
ioctl(busio_uart_dev[self->number].fd, TCSETS, (long unsigned int)&tio);
ioctl(busio_uart_dev[self->number].fd, TCFLSH, (long unsigned int)NULL);
}
uint32_t common_hal_busio_uart_rx_characters_available(busio_uart_obj_t *self) {
int count = 0;
ioctl(self->uart_fd, FIONREAD, (long unsigned int)&count);
ioctl(busio_uart_dev[self->number].fd, FIONREAD, (long unsigned int)&count);
return count;
}
@ -163,6 +184,15 @@ void common_hal_busio_uart_clear_rx_buffer(busio_uart_obj_t *self) {
}
bool common_hal_busio_uart_ready_to_tx(busio_uart_obj_t *self) {
ioctl(self->uart_fd, TCFLSH, (long unsigned int)NULL);
ioctl(busio_uart_dev[self->number].fd, TCFLSH, (long unsigned int)NULL);
return true;
}
void busio_uart_reset(void) {
for (int i = 0; i < MP_ARRAY_SIZE(busio_uart_dev); i++) {
if (busio_uart_dev[i].fd >= 0) {
close(busio_uart_dev[i].fd);
busio_uart_dev[i].fd = -1;
}
}
}

View File

@ -33,11 +33,13 @@
typedef struct {
mp_obj_base_t base;
int uart_fd;
int8_t number;
const mcu_pin_obj_t *tx_pin;
const mcu_pin_obj_t *rx_pin;
uint32_t baudrate;
uint32_t timeout;
} busio_uart_obj_t;
void busio_uart_reset(void);
#endif // MICROPY_INCLUDED_CXD56_COMMON_HAL_BUSIO_UART_H

View File

@ -62,9 +62,11 @@ pwmout_result_t common_hal_pulseio_pwmout_construct(pulseio_pwmout_obj_t *self,
return PWMOUT_INVALID_PIN;
}
pwmout_dev[self->number].fd = open(pwmout_dev[self->number].devpath, O_RDONLY);
if (pwmout_dev[self->number].fd < 0) {
return PWMOUT_INVALID_PIN;
pwmout_dev[self->number].fd = open(pwmout_dev[self->number].devpath, O_RDONLY);
if (pwmout_dev[self->number].fd < 0) {
return PWMOUT_INVALID_PIN;
}
}
self->info.frequency = frequency;
@ -97,7 +99,7 @@ void common_hal_pulseio_pwmout_deinit(pulseio_pwmout_obj_t *self) {
}
bool common_hal_pulseio_pwmout_deinited(pulseio_pwmout_obj_t *self) {
return self->pin == mp_const_none;
return pwmout_dev[self->number].fd < 0;
}
void common_hal_pulseio_pwmout_set_duty_cycle(pulseio_pwmout_obj_t *self, uint16_t duty) {

View File

@ -38,7 +38,7 @@ typedef struct {
const mcu_pin_obj_t *pin;
struct pwm_info_s info;
bool variable_frequency;
uint8_t number;
int8_t number;
} pulseio_pwmout_obj_t;
void pwmout_reset(void);

View File

@ -27,8 +27,10 @@
#ifndef __INCLUDED_MPCONFIGPORT_H
#define __INCLUDED_MPCONFIGPORT_H
// 24kiB stack
#define CIRCUITPY_DEFAULT_STACK_SIZE 0x6000
#define MICROPY_PY_SYS_PLATFORM "CXD56"
// 64kiB stack
#define CIRCUITPY_DEFAULT_STACK_SIZE 0x10000
#include "py/circuitpy_mpconfig.h"

@ -1 +1 @@
Subproject commit b473b28a14a03f3d416b6e2c071bcfd4fb92cb63
Subproject commit 7f6568c7f4898cdb24a2f06040784a836050686e

View File

@ -27,6 +27,8 @@
#include <stdint.h>
#include <sys/boardctl.h>
#include "sched/sched.h"
#include "boards/board.h"
#include "supervisor/port.h"
@ -35,6 +37,7 @@
#include "common-hal/analogio/AnalogIn.h"
#include "common-hal/pulseio/PulseOut.h"
#include "common-hal/pulseio/PWMOut.h"
#include "common-hal/busio/UART.h"
safe_mode_t port_init(void) {
boardctl(BOARDIOC_INIT, 0);
@ -60,6 +63,9 @@ void reset_port(void) {
pulseout_reset();
pwmout_reset();
#endif
#if CIRCUITPY_BUSIO
busio_uart_reset();
#endif
reset_all_pins();
}
@ -67,6 +73,18 @@ void reset_port(void) {
void reset_to_bootloader(void) {
}
uint32_t *port_stack_get_limit(void) {
struct tcb_s *rtcb = this_task();
return rtcb->adj_stack_ptr - (uint32_t)rtcb->adj_stack_size;
}
uint32_t *port_stack_get_top(void) {
struct tcb_s *rtcb = this_task();
return rtcb->adj_stack_ptr;
}
extern uint32_t _ebss;
// Place the word to save just after our BSS section that gets blanked.

View File

@ -0,0 +1,27 @@
# Arduino Nano 33 BLE and Nano 33 BLE Sense
The [Arduino Nano 33 BLE](https://store.arduino.cc/usa/nano-33-ble-with-headers) and
[Arduino Nano 33 BLE Sense](https://store.arduino.cc/usa/nano-33-ble-sense) and
are built around the NINA B306 module, based on Nordic nRF 52840 and containing
a powerful Cortex M4F. Both include an onboard 9 axis Inertial Measurement Unit (IMU), the LSM9DS1.
The Nano 33 BLE Sense adds an LPS22HB barometric pressure and temperature sensor,
an ADPS-9960 digital proximity, ambient light, RGB, and gensture sensor,
and an MP34DT05 digital microphone.
Note: the Arduino Nano 33 BLE and BLE Sense do not include a QSPI external
flash. Any Python code will need to be stored on the internal flash
filesystem.
I2C pins `board.SCL1` and `board.SDA1` are not exposed and are used for onboard peripherals.
Pin `board.R_PULLUP` must be set to high to enable the `SCL1` and `SDA1` pullups for proper operation.
Pin `board.VDD_ENV` applies power to the LSM9DS1, and must be high for it to be operational.
Pins `board.MIC_PWR`, `board.PDMDIN`, and `board.PDMCLK` are for the Nano 33 BLE Sense onboard microphone.
Pin `board.INT_ADPS` is the interrupt pin from the ADPS-9960.
Pins `board.RGB_LED_R`, `board.RGB_LED_G`, and `board.RGB_LED_B`
are the red, green and blue LEDS in the onboard RGB LED.
Pins `board.LED_G` and `board.LED_Y` are onboard green and red LEDs. `board.LED_Y` is also `board.SCK`.

View File

@ -0,0 +1,63 @@
/*
* This file is part of the MicroPython project, http://micropython.org/
*
* The MIT License (MIT)
*
* Copyright (c) 2017 Scott Shawcroft for Adafruit Industries
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
#include "boards/board.h"
#include "nrf.h"
#include "nrf_rtc.h"
void board_init(void) {
// Initializations below from Arduino variant.cpp.
// // turn power LED on
// pinMode(LED_PWR, OUTPUT);
// digitalWrite(LED_PWR, HIGH);
// Errata Nano33BLE - I2C pullup is on SWO line, need to disable TRACE
// was being enabled by nrfx_clock_anomaly_132
CoreDebug->DEMCR = 0;
NRF_CLOCK->TRACECONFIG = 0;
// FIXME: bootloader enables interrupt on COMPARE[0], which we don't handle
// Disable it here to avoid getting stuck when OVERFLOW irq is triggered
nrf_rtc_event_disable(NRF_RTC1, NRF_RTC_INT_COMPARE0_MASK);
nrf_rtc_int_disable(NRF_RTC1, NRF_RTC_INT_COMPARE0_MASK);
// // FIXME: always enable I2C pullup and power @startup
// // Change for maximum powersave
// pinMode(PIN_ENABLE_SENSORS_3V3, OUTPUT);
// pinMode(PIN_ENABLE_I2C_PULLUP, OUTPUT);
// digitalWrite(PIN_ENABLE_SENSORS_3V3, HIGH);
// digitalWrite(PIN_ENABLE_I2C_PULLUP, HIGH);
}
bool board_requests_safe_mode(void) {
return false;
}
void reset_board(void) {
}

View File

@ -0,0 +1,16 @@
#include "nrfx/hal/nrf_gpio.h"
#define MICROPY_HW_BOARD_NAME "Arduino Nano 33 BLE"
#define MICROPY_HW_MCU_NAME "nRF52840"
#define CIRCUITPY_AUTORELOAD_DELAY_MS 500
#define DEFAULT_I2C_BUS_SCL (&pin_P0_02)
#define DEFAULT_I2C_BUS_SDA (&pin_P0_31)
#define DEFAULT_SPI_BUS_SCK (&pin_P0_13)
#define DEFAULT_SPI_BUS_MOSI (&pin_P0_01)
#define DEFAULT_SPI_BUS_MISO (&pin_P1_08)
#define DEFAULT_UART_BUS_RX (&pin_P1_10)
#define DEFAULT_UART_BUS_TX (&pin_P1_03)

View File

@ -0,0 +1,24 @@
USB_VID = 0x2341
USB_PID = 0x805A
USB_PRODUCT = "Arduino_Nano_33_BLE"
USB_MANUFACTURER = "Arduino"
MCU_SERIES = m4
MCU_VARIANT = nrf52
MCU_SUB_VARIANT = nrf52840
MCU_CHIP = nrf52840
SD ?= s140
SOFTDEV_VERSION ?= 6.1.0
BOOT_SETTING_ADDR = 0xFF000
ifeq ($(SD),)
LD_FILE = boards/nrf52840_1M_256k.ld
else
LD_FILE = boards/adafruit_$(MCU_SUB_VARIANT)_$(SD_LOWER)_v$(firstword $(subst ., ,$(SOFTDEV_VERSION))).ld
CIRCUITPY_BLEIO = 1
endif
NRF_DEFINES += -DNRF52840_XXAA -DNRF52840
INTERNAL_FLASH_FILESYSTEM = 1

View File

@ -0,0 +1,63 @@
#include "shared-bindings/board/__init__.h"
STATIC const mp_rom_map_elem_t board_module_globals_table[] = {
{ MP_ROM_QSTR(MP_QSTR_D2), MP_ROM_PTR(&pin_P1_11) },
{ MP_ROM_QSTR(MP_QSTR_D3), MP_ROM_PTR(&pin_P1_12) },
{ MP_ROM_QSTR(MP_QSTR_D4), MP_ROM_PTR(&pin_P1_15) },
{ MP_ROM_QSTR(MP_QSTR_D5), MP_ROM_PTR(&pin_P1_13) },
{ MP_ROM_QSTR(MP_QSTR_D6), MP_ROM_PTR(&pin_P1_14) },
{ MP_ROM_QSTR(MP_QSTR_D7), MP_ROM_PTR(&pin_P0_23) },
{ MP_ROM_QSTR(MP_QSTR_D8), MP_ROM_PTR(&pin_P0_21) },
{ MP_ROM_QSTR(MP_QSTR_D9), MP_ROM_PTR(&pin_P0_27) },
{ MP_ROM_QSTR(MP_QSTR_D10), MP_ROM_PTR(&pin_P1_02) },
{ MP_ROM_QSTR(MP_QSTR_A0), MP_ROM_PTR(&pin_P0_04) },
{ MP_ROM_QSTR(MP_QSTR_A1), MP_ROM_PTR(&pin_P0_05) },
{ MP_ROM_QSTR(MP_QSTR_A2), MP_ROM_PTR(&pin_P0_30) },
{ MP_ROM_QSTR(MP_QSTR_A3), MP_ROM_PTR(&pin_P0_29) },
{ MP_ROM_QSTR(MP_QSTR_A4), MP_ROM_PTR(&pin_P0_31) },
{ MP_ROM_QSTR(MP_QSTR_SDA), MP_ROM_PTR(&pin_P0_31) },
{ MP_ROM_QSTR(MP_QSTR_A5), MP_ROM_PTR(&pin_P0_02) },
{ MP_ROM_QSTR(MP_QSTR_SCL), MP_ROM_PTR(&pin_P0_02) },
{ MP_ROM_QSTR(MP_QSTR_A6), MP_ROM_PTR(&pin_P0_28) },
{ MP_ROM_QSTR(MP_QSTR_A7), MP_ROM_PTR(&pin_P0_03) },
{ MP_ROM_QSTR(MP_QSTR_SDA1), MP_ROM_PTR(&pin_P0_14) },
{ MP_ROM_QSTR(MP_QSTR_SCL1), MP_ROM_PTR(&pin_P0_15) },
{ MP_ROM_QSTR(MP_QSTR_MOSI), MP_ROM_PTR(&pin_P1_01) },
{ MP_ROM_QSTR(MP_QSTR_MISO), MP_ROM_PTR(&pin_P1_08) },
{ MP_ROM_QSTR(MP_QSTR_SCK), MP_ROM_PTR(&pin_P0_13) },
{ MP_ROM_QSTR(MP_QSTR_LED_Y), MP_ROM_PTR(&pin_P0_13) },
{ MP_ROM_QSTR(MP_QSTR_LED_G), MP_ROM_PTR(&pin_P1_09) },
{ MP_ROM_QSTR(MP_QSTR_RGB_LED_R), MP_ROM_PTR(&pin_P0_24) },
{ MP_ROM_QSTR(MP_QSTR_RGB_LED_G), MP_ROM_PTR(&pin_P0_16) },
{ MP_ROM_QSTR(MP_QSTR_RGB_LED_B), MP_ROM_PTR(&pin_P0_06) },
// Power line to LSM9DS1.
{ MP_ROM_QSTR(MP_QSTR_VDD_ENV), MP_ROM_PTR(&pin_P0_22) },
// Pullup voltage for SDA1 and SCL1
{ MP_ROM_QSTR(MP_QSTR_R_PULLUP), MP_ROM_PTR(&pin_P1_00) },
{ MP_ROM_QSTR(MP_QSTR_MIC_PWR), MP_ROM_PTR(&pin_P0_17) },
{ MP_ROM_QSTR(MP_QSTR_PDMCLK), MP_ROM_PTR(&pin_P0_26) },
{ MP_ROM_QSTR(MP_QSTR_PDMDIN), MP_ROM_PTR(&pin_P0_25) },
{ MP_ROM_QSTR(MP_QSTR_INT_APDS), MP_ROM_PTR(&pin_P0_19) },
{ MP_ROM_QSTR(MP_QSTR_TX), MP_ROM_PTR(&pin_P1_03) },
{ MP_ROM_QSTR(MP_QSTR_RX), MP_ROM_PTR(&pin_P1_10) },
{ MP_ROM_QSTR(MP_QSTR_UART), MP_ROM_PTR(&board_uart_obj) },
{ MP_ROM_QSTR(MP_QSTR_SPI), MP_ROM_PTR(&board_spi_obj) },
{ MP_ROM_QSTR(MP_QSTR_I2C), MP_ROM_PTR(&board_i2c_obj) },
};
MP_DEFINE_CONST_DICT(board_module_globals, board_module_globals_table);

View File

@ -29,7 +29,6 @@
#define MICROPY_HW_BOARD_NAME "Adafruit Circuit Playground Bluefruit"
#define MICROPY_HW_MCU_NAME "nRF52840"
#define MICROPY_PY_SYS_PLATFORM "CircuitPlaygroundBluefruit"
#define FLASH_SIZE (0x100000)
#define FLASH_PAGE_SIZE (4096)

View File

@ -32,7 +32,6 @@
#define MICROPY_HW_BOARD_NAME "Electronut Labs Blip"
#define MICROPY_HW_MCU_NAME "nRF52840"
#define MICROPY_PY_SYS_PLATFORM "ElectronutLabsPapyr"
#define CIRCUITPY_AUTORELOAD_DELAY_MS 500

View File

@ -31,7 +31,6 @@
#define MICROPY_HW_BOARD_NAME "Electronut Labs Papyr"
#define MICROPY_HW_MCU_NAME "nRF52840"
#define MICROPY_PY_SYS_PLATFORM "ElectronutLabsPapyr"
#define CIRCUITPY_AUTORELOAD_DELAY_MS 500

View File

@ -29,7 +29,6 @@
#define MICROPY_HW_BOARD_NAME "Adafruit Feather nRF52840 Express"
#define MICROPY_HW_MCU_NAME "nRF52840"
#define MICROPY_PY_SYS_PLATFORM "Feather52840Express"
#define FLASH_SIZE (0x100000)
#define FLASH_PAGE_SIZE (4096)

View File

@ -0,0 +1,46 @@
#include "nrfx/hal/nrf_gpio.h"
#define MICROPY_HW_BOARD_NAME "Adafruit ItsyBitsy nRF52840 Express"
#define MICROPY_HW_MCU_NAME "nRF52840"
#define FLASH_SIZE (0x100000)
#define FLASH_PAGE_SIZE (4096)
#define MICROPY_HW_LED_STATUS (&pin_P0_06)
#define MICROPY_HW_APA102_MOSI (&pin_P0_08)
#define MICROPY_HW_APA102_SCK (&pin_P1_09)
#if QSPI_FLASH_FILESYSTEM
#define MICROPY_QSPI_DATA0 NRF_GPIO_PIN_MAP(0, 21)
#define MICROPY_QSPI_DATA1 NRF_GPIO_PIN_MAP(0, 22)
#define MICROPY_QSPI_DATA2 NRF_GPIO_PIN_MAP(1, 00)
#define MICROPY_QSPI_DATA3 NRF_GPIO_PIN_MAP(0, 17)
#define MICROPY_QSPI_SCK NRF_GPIO_PIN_MAP(0, 19)
#define MICROPY_QSPI_CS NRF_GPIO_PIN_MAP(0, 23)
#endif
#if SPI_FLASH_FILESYSTEM
#define SPI_FLASH_MOSI_PIN &pin_P0_21
#define SPI_FLASH_MISO_PIN &pin_P0_22
#define SPI_FLASH_SCK_PIN &pin_P0_19
#define SPI_FLASH_CS_PIN &pin_P0_23
#endif
#define CIRCUITPY_AUTORELOAD_DELAY_MS 500
#define CIRCUITPY_INTERNAL_NVM_SIZE (4096)
#define BOARD_FLASH_SIZE (FLASH_SIZE - 0x4000 - CIRCUITPY_INTERNAL_NVM_SIZE)
#define BOARD_HAS_CRYSTAL 1
#define DEFAULT_I2C_BUS_SCL (&pin_P0_14)
#define DEFAULT_I2C_BUS_SDA (&pin_P0_16)
#define DEFAULT_SPI_BUS_SCK (&pin_P0_13)
#define DEFAULT_SPI_BUS_MOSI (&pin_P0_15)
#define DEFAULT_SPI_BUS_MISO (&pin_P0_20)
#define DEFAULT_UART_BUS_RX (&pin_P0_25)
#define DEFAULT_UART_BUS_TX (&pin_P0_24)

View File

@ -0,0 +1,29 @@
USB_VID = 0x239A
USB_PID = 0x8052
USB_PRODUCT = "ItsyBitsy nRF52840 Express"
USB_MANUFACTURER = "Adafruit Industries LLC"
MCU_SERIES = m4
MCU_VARIANT = nrf52
MCU_SUB_VARIANT = nrf52840
MCU_CHIP = nrf52840
SD ?= s140
SOFTDEV_VERSION ?= 6.1.0
BOOT_SETTING_ADDR = 0xFF000
ifeq ($(SD),)
LD_FILE = boards/nrf52840_1M_256k.ld
else
LD_FILE = boards/adafruit_$(MCU_SUB_VARIANT)_$(SD_LOWER)_v$(firstword $(subst ., ,$(SOFTDEV_VERSION))).ld
CIRCUITPY_BLEIO = 1
endif
NRF_DEFINES += -DNRF52840_XXAA -DNRF52840
# Don't use up a hardware SPI peripheral for the status DotStar: we only have one or two.
CIRCUITPY_BITBANG_APA102 = 1
QSPI_FLASH_FILESYSTEM = 1
EXTERNAL_FLASH_DEVICE_COUNT = 1
EXTERNAL_FLASH_DEVICES = "GD25Q16C"

View File

@ -0,0 +1,46 @@
#include "shared-bindings/board/__init__.h"
STATIC const mp_rom_map_elem_t board_module_globals_table[] = {
{ MP_ROM_QSTR(MP_QSTR_A0), MP_ROM_PTR(&pin_P0_04) },
{ MP_ROM_QSTR(MP_QSTR_A1), MP_ROM_PTR(&pin_P0_30) },
{ MP_ROM_QSTR(MP_QSTR_A2), MP_ROM_PTR(&pin_P0_28) },
{ MP_ROM_QSTR(MP_QSTR_A3), MP_ROM_PTR(&pin_P0_31) },
{ MP_ROM_QSTR(MP_QSTR_A4), MP_ROM_PTR(&pin_P0_02) },
{ MP_ROM_QSTR(MP_QSTR_A5), MP_ROM_PTR(&pin_P0_03) },
{ MP_ROM_QSTR(MP_QSTR_SWITCH), MP_ROM_PTR(&pin_P0_29) },
{ MP_ROM_QSTR(MP_QSTR_D0), MP_ROM_PTR(&pin_P0_25) },
{ MP_ROM_QSTR(MP_QSTR_RX), MP_ROM_PTR(&pin_P0_25) },
{ MP_ROM_QSTR(MP_QSTR_D1), MP_ROM_PTR(&pin_P0_24) },
{ MP_ROM_QSTR(MP_QSTR_TX), MP_ROM_PTR(&pin_P0_24) },
{ MP_ROM_QSTR(MP_QSTR_D2), MP_ROM_PTR(&pin_P1_02) },
{ MP_ROM_QSTR(MP_QSTR_D5), MP_ROM_PTR(&pin_P0_27) },
{ MP_ROM_QSTR(MP_QSTR_D7), MP_ROM_PTR(&pin_P1_08) },
{ MP_ROM_QSTR(MP_QSTR_D9), MP_ROM_PTR(&pin_P0_07) },
{ MP_ROM_QSTR(MP_QSTR_D10), MP_ROM_PTR(&pin_P0_05) },
{ MP_ROM_QSTR(MP_QSTR_D11), MP_ROM_PTR(&pin_P0_26) },
{ MP_ROM_QSTR(MP_QSTR_D12), MP_ROM_PTR(&pin_P0_11) },
{ MP_ROM_QSTR(MP_QSTR_D13), MP_ROM_PTR(&pin_P0_12) },
{ MP_ROM_QSTR(MP_QSTR_SCL), MP_ROM_PTR(&pin_P0_14) },
{ MP_ROM_QSTR(MP_QSTR_SDA), MP_ROM_PTR(&pin_P0_16) },
{ MP_ROM_QSTR(MP_QSTR_APA102_MOSI), MP_ROM_PTR(&pin_P0_08) },
{ MP_ROM_QSTR(MP_QSTR_APA102_SCK), MP_ROM_PTR(&pin_P1_09) },
{ MP_ROM_QSTR(MP_QSTR_SCK), MP_ROM_PTR(&pin_P0_13) },
{ MP_ROM_QSTR(MP_QSTR_MOSI), MP_ROM_PTR(&pin_P0_15) },
{ MP_ROM_QSTR(MP_QSTR_MISO), MP_ROM_PTR(&pin_P0_20) },
{ MP_ROM_QSTR(MP_QSTR_L), MP_ROM_PTR(&pin_P0_06) },
{ MP_ROM_QSTR(MP_QSTR_BLUE_LED), MP_ROM_PTR(&pin_P0_06) },
{ MP_ROM_QSTR(MP_QSTR_UART), MP_ROM_PTR(&board_uart_obj) },
{ MP_ROM_QSTR(MP_QSTR_SPI), MP_ROM_PTR(&board_spi_obj) },
{ MP_ROM_QSTR(MP_QSTR_I2C), MP_ROM_PTR(&board_i2c_obj) },
};
MP_DEFINE_CONST_DICT(board_module_globals, board_module_globals_table);

View File

@ -31,7 +31,6 @@
#define MICROPY_HW_BOARD_NAME "MakerDiary nRF52840 MDK"
#define MICROPY_HW_MCU_NAME "nRF52840"
#define MICROPY_PY_SYS_PLATFORM "MakerDiary52840MDK"
#define MICROPY_QSPI_DATA0 NRF_GPIO_PIN_MAP(1, 5)
#define MICROPY_QSPI_DATA1 NRF_GPIO_PIN_MAP(1, 4)

View File

@ -31,7 +31,6 @@
#define MICROPY_HW_BOARD_NAME "MakerDiary nRF52840 MDK USB Dongle"
#define MICROPY_HW_MCU_NAME "nRF52840"
#define MICROPY_PY_SYS_PLATFORM "MakerDiary52840MDKDongle"
#define CIRCUITPY_AUTORELOAD_DELAY_MS 500

View File

@ -29,7 +29,6 @@
#define MICROPY_HW_BOARD_NAME "Adafruit Metro nRF52840 Express"
#define MICROPY_HW_MCU_NAME "nRF52840"
#define MICROPY_PY_SYS_PLATFORM "Metro52840Express"
#define FLASH_SIZE (0x100000)
#define FLASH_PAGE_SIZE (4096)

View File

@ -29,7 +29,6 @@
#define MICROPY_HW_BOARD_NAME "Particle Argon"
#define MICROPY_HW_MCU_NAME "nRF52840"
#define MICROPY_PY_SYS_PLATFORM "Particle Argon"
#define MICROPY_HW_LED_STATUS (&pin_P1_12)

View File

@ -29,7 +29,6 @@
#define MICROPY_HW_BOARD_NAME "Particle Boron"
#define MICROPY_HW_MCU_NAME "nRF52840"
#define MICROPY_PY_SYS_PLATFORM "Particle Boron"
#define MICROPY_HW_LED_STATUS (&pin_P1_12)

View File

@ -29,7 +29,6 @@
#define MICROPY_HW_BOARD_NAME "Particle Xenon"
#define MICROPY_HW_MCU_NAME "nRF52840"
#define MICROPY_PY_SYS_PLATFORM "Particle Xenon"
#define MICROPY_HW_LED_STATUS (&pin_P1_12)

View File

@ -28,7 +28,6 @@
#define MICROPY_HW_BOARD_NAME "PCA10056 nRF52840-DK"
#define MICROPY_HW_MCU_NAME "nRF52840"
#define MICROPY_PY_SYS_PLATFORM "nRF52840-DK"
#define CIRCUITPY_AUTORELOAD_DELAY_MS 500

View File

@ -26,7 +26,6 @@
#define MICROPY_HW_BOARD_NAME "PCA10059 nRF52840 Dongle"
#define MICROPY_HW_MCU_NAME "nRF52840"
#define MICROPY_PY_SYS_PLATFORM "nRF52840-DK"
#define MICROPY_HW_LED_STATUS (&pin_P0_06)

View File

@ -28,7 +28,6 @@
#define MICROPY_HW_BOARD_NAME "SparkFun Pro nRF52840 Mini"
#define MICROPY_HW_MCU_NAME "nRF52840"
#define MICROPY_PY_SYS_PLATFORM "SFE_NRF52840_Mini"
#define CIRCUITPY_AUTORELOAD_DELAY_MS 500

View File

@ -91,8 +91,8 @@ void reset_pin_number(uint8_t pin_number) {
}
#endif
#ifdef MICROPY_HW_APA102_MOSI
if (pin == MICROPY_HW_APA102_MOSI->number ||
pin == MICROPY_HW_APA102_SCK->number) {
if (pin_number == MICROPY_HW_APA102_MOSI->number ||
pin_number == MICROPY_HW_APA102_SCK->number) {
apa102_mosi_in_use = apa102_mosi_in_use && pin_number != MICROPY_HW_APA102_MOSI->number;
apa102_sck_in_use = apa102_sck_in_use && pin_number != MICROPY_HW_APA102_SCK->number;
if (!apa102_sck_in_use && !apa102_mosi_in_use) {

View File

@ -30,6 +30,10 @@
#include "ble_drv.h"
#ifdef NRF52840
#define MICROPY_PY_SYS_PLATFORM "nRF52840"
#endif
#define MICROPY_PY_COLLECTIONS_ORDEREDDICT (1)
#define MICROPY_PY_FUNCTION_ATTRS (1)
#define MICROPY_PY_IO (1)

View File

@ -146,6 +146,14 @@ void reset_cpu(void) {
NVIC_SystemReset();
}
uint32_t *port_stack_get_limit(void) {
return &_ebss;
}
uint32_t *port_stack_get_top(void) {
return &_estack;
}
extern uint32_t _ebss;
// Place the word to save just after our BSS section that gets blanked.
void port_set_saved_word(uint32_t value) {

View File

@ -0,0 +1,38 @@
/*
* This file is part of the MicroPython project, http://micropython.org/
*
* The MIT License (MIT)
*
* Copyright (c) 2017 Scott Shawcroft for Adafruit Industries
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
#include "boards/board.h"
void board_init(void) {
}
bool board_requests_safe_mode(void) {
return false;
}
void reset_board(void) {
}

View File

@ -27,7 +27,7 @@
//Micropython setup
#define MICROPY_HW_BOARD_NAME "Feather F405"
#define MICROPY_HW_BOARD_NAME "Feather STM32F405 Express"
#define MICROPY_HW_MCU_NAME "STM32F405RG"
#define FLASH_SIZE (0x100000)

View File

@ -1,6 +1,6 @@
USB_VID = 0x239A
USB_PID = 0x805A
USB_PRODUCT = "Feather F405"
USB_PRODUCT = "Feather STM32F405 Express"
USB_MANUFACTURER = "Adafruit Industries LLC"
USB_DEVICES = "CDC,MSC"

View File

@ -69,6 +69,14 @@ void reset_cpu(void) {
NVIC_SystemReset();
}
uint32_t *port_stack_get_limit(void) {
return &_ebss;
}
uint32_t *port_stack_get_top(void) {
return &_estack;
}
extern uint32_t _ebss;
// Place the word to save just after our BSS section that gets blanked.
void port_set_saved_word(uint32_t value) {

View File

@ -43,6 +43,8 @@ void shared_module_bitbangio_spi_construct(bitbangio_spi_obj_t *self,
if (result != DIGITALINOUT_OK) {
mp_raise_ValueError(translate("Clock pin init failed."));
}
common_hal_digitalio_digitalinout_switch_to_output(&self->clock, self->polarity == 1, DRIVE_MODE_PUSH_PULL);
if (mosi != mp_const_none) {
result = common_hal_digitalio_digitalinout_construct(&self->mosi, mosi);
if (result != DIGITALINOUT_OK) {
@ -50,8 +52,11 @@ void shared_module_bitbangio_spi_construct(bitbangio_spi_obj_t *self,
mp_raise_ValueError(translate("MOSI pin init failed."));
}
self->has_mosi = true;
common_hal_digitalio_digitalinout_switch_to_output(&self->mosi, false, DRIVE_MODE_PUSH_PULL);
}
if (miso != mp_const_none) {
// Starts out as input by default, no need to change.
result = common_hal_digitalio_digitalinout_construct(&self->miso, miso);
if (result != DIGITALINOUT_OK) {
common_hal_digitalio_digitalinout_deinit(&self->clock);

View File

@ -54,6 +54,12 @@ void reset_board(void);
// Reset to the bootloader
void reset_to_bootloader(void);
// Get stack limit address
uint32_t *port_stack_get_limit(void);
// Get stack top address
uint32_t *port_stack_get_top(void);
// Save and retrieve a word from memory that is preserved over reset. Used for safe mode.
void port_set_saved_word(uint32_t);
uint32_t port_get_saved_word(void);

View File

@ -25,6 +25,7 @@
*/
#include "supervisor/memory.h"
#include "supervisor/port.h"
#include <stddef.h>
@ -36,12 +37,10 @@ static supervisor_allocation allocations[CIRCUITPY_SUPERVISOR_ALLOC_COUNT];
// We use uint32_t* to ensure word (4 byte) alignment.
uint32_t* low_address;
uint32_t* high_address;
extern uint32_t _ebss;
extern uint32_t _estack;
void memory_init(void) {
low_address = &_ebss;
high_address = &_estack;
low_address = port_stack_get_limit();
high_address = port_stack_get_top();
}
void free_memory(supervisor_allocation* allocation) {

View File

@ -46,10 +46,18 @@ static uint8_t status_apa102_color[APA102_BUFFER_LENGTH] = {0, 0, 0, 0, 0xff, 0,
#if CIRCUITPY_BITBANG_APA102
#include "shared-bindings/bitbangio/SPI.h"
#include "shared-module/bitbangio/types.h"
static bitbangio_spi_obj_t status_apa102;
static bitbangio_spi_obj_t status_apa102 = {
.base = {
.type = &bitbangio_spi_type,
},
};
#else
#include "shared-bindings/busio/SPI.h"
busio_spi_obj_t status_apa102;
busio_spi_obj_t status_apa102 = {
.base = {
.type = &busio_spi_type,
},
};
#endif
#endif
@ -59,9 +67,21 @@ busio_spi_obj_t status_apa102;
#include "shared-bindings/pulseio/PWMOut.h"
#include "shared-bindings/microcontroller/Pin.h"
pulseio_pwmout_obj_t rgb_status_r;
pulseio_pwmout_obj_t rgb_status_g;
pulseio_pwmout_obj_t rgb_status_b;
pulseio_pwmout_obj_t rgb_status_r = {
.base = {
.type = &pulseio_pwmout_type,
},
};
pulseio_pwmout_obj_t rgb_status_g = {
.base = {
.type = &pulseio_pwmout_type,
},
};
pulseio_pwmout_obj_t rgb_status_b = {
.base = {
.type = &pulseio_pwmout_type,
},
};
uint8_t rgb_status_brightness = 0xFF;
@ -74,8 +94,14 @@ uint16_t status_rgb_color[3] = {
static uint32_t current_status_color = 0;
#endif
static bool rgb_led_status_init_in_progress = false;
void rgb_led_status_init() {
if (rgb_led_status_init_in_progress) {
// Avoid recursion.
return;
}
rgb_led_status_init_in_progress = true;
#ifdef MICROPY_HW_NEOPIXEL
common_hal_digitalio_digitalinout_construct(&status_neopixel, MICROPY_HW_NEOPIXEL);
// Pretend we aren't using the pins. digitalio.DigitalInOut
@ -91,15 +117,15 @@ void rgb_led_status_init() {
mp_const_none);
#else
if (!common_hal_busio_spi_deinited(&status_apa102)) {
// Don't use spi_deinit because that leads to infinite
// recursion because reset_pin_number may call
// rgb_led_status_init.
spi_m_sync_disable(&status_apa102.spi_desc);
// This may call us recursively if reset_pin_number() is called,
// The rgb_led_status_init_in_progress guard will prevent further recursion.
common_hal_busio_spi_deinit(&status_apa102);
}
common_hal_busio_spi_construct(&status_apa102,
MICROPY_HW_APA102_SCK,
MICROPY_HW_APA102_MOSI,
mp_const_none);
common_hal_busio_spi_never_reset(&status_apa102);
#endif
// Pretend we aren't using the pins. bitbangio.SPI will
// mark them as used.
@ -149,6 +175,8 @@ void rgb_led_status_init() {
current_status_color = 0x1000000; // Not a valid color
new_status_color(rgb);
#endif
rgb_led_status_init_in_progress = false;
}
void reset_status_led() {

View File

@ -29,6 +29,7 @@
#include "py/mpconfig.h"
#include "py/runtime.h"
#include "supervisor/cpu.h"
#include "supervisor/port.h"
#include "supervisor/shared/safe_mode.h"
extern uint32_t _estack;
@ -43,7 +44,7 @@ void allocate_stack(void) {
mp_uint_t regs[10];
mp_uint_t sp = cpu_get_regs_and_sp(regs);
mp_uint_t c_size = (uint32_t) &_estack - sp;
mp_uint_t c_size = (uint32_t) port_stack_get_top() - sp;
stack_alloc = allocate_memory(c_size + next_stack_size + EXCEPTION_STACK_SIZE, true);
if (stack_alloc == NULL) {