Merge remote-tracking branch 'upstream/master' into stm32-uart
This commit is contained in:
commit
3034cfc82f
9
.github/workflows/build.yml
vendored
9
.github/workflows/build.yml
vendored
@ -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
|
165
locale/de_DE.po
165
locale/de_DE.po
@ -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
2
main.c
@ -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();
|
||||
}
|
||||
|
||||
|
@ -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) },
|
||||
|
@ -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) {
|
||||
}
|
@ -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
|
@ -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
|
42
ports/atmel-samd/boards/sparkfun_qwiic_micro_no_flash/pins.c
Normal file
42
ports/atmel-samd/boards/sparkfun_qwiic_micro_no_flash/pins.c
Normal 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);
|
@ -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) {
|
||||
}
|
@ -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
|
@ -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
|
@ -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);
|
@ -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);
|
||||
|
@ -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 \
|
||||
|
@ -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)
|
||||
|
@ -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) {
|
||||
|
@ -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);
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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
|
||||
|
@ -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) {
|
||||
|
@ -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);
|
||||
|
@ -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
|
@ -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.
|
||||
|
27
ports/nrf/boards/arduino_nano_33_ble/README.md
Normal file
27
ports/nrf/boards/arduino_nano_33_ble/README.md
Normal 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`.
|
63
ports/nrf/boards/arduino_nano_33_ble/board.c
Normal file
63
ports/nrf/boards/arduino_nano_33_ble/board.c
Normal 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) {
|
||||
|
||||
}
|
16
ports/nrf/boards/arduino_nano_33_ble/mpconfigboard.h
Normal file
16
ports/nrf/boards/arduino_nano_33_ble/mpconfigboard.h
Normal 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)
|
24
ports/nrf/boards/arduino_nano_33_ble/mpconfigboard.mk
Normal file
24
ports/nrf/boards/arduino_nano_33_ble/mpconfigboard.mk
Normal 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
|
63
ports/nrf/boards/arduino_nano_33_ble/pins.c
Normal file
63
ports/nrf/boards/arduino_nano_33_ble/pins.c
Normal 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);
|
@ -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)
|
||||
|
@ -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
|
||||
|
||||
|
@ -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
|
||||
|
||||
|
@ -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)
|
||||
|
46
ports/nrf/boards/itsybitsy_nrf52840_express/mpconfigboard.h
Normal file
46
ports/nrf/boards/itsybitsy_nrf52840_express/mpconfigboard.h
Normal 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)
|
29
ports/nrf/boards/itsybitsy_nrf52840_express/mpconfigboard.mk
Normal file
29
ports/nrf/boards/itsybitsy_nrf52840_express/mpconfigboard.mk
Normal 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"
|
46
ports/nrf/boards/itsybitsy_nrf52840_express/pins.c
Normal file
46
ports/nrf/boards/itsybitsy_nrf52840_express/pins.c
Normal 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);
|
@ -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)
|
||||
|
@ -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
|
||||
|
||||
|
@ -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)
|
||||
|
@ -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)
|
||||
|
||||
|
@ -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)
|
||||
|
||||
|
@ -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)
|
||||
|
||||
|
@ -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
|
||||
|
||||
|
@ -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)
|
||||
|
||||
|
@ -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
|
||||
|
||||
|
@ -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) {
|
||||
|
@ -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)
|
||||
|
@ -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) {
|
||||
|
38
ports/stm32f4/boards/feather_stm32f405_express/board.c
Normal file
38
ports/stm32f4/boards/feather_stm32f405_express/board.c
Normal 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) {
|
||||
|
||||
}
|
@ -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)
|
@ -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"
|
||||
|
@ -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) {
|
||||
|
@ -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);
|
||||
|
@ -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);
|
||||
|
@ -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) {
|
||||
|
@ -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() {
|
||||
|
@ -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) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user