Merge remote-tracking branch 'origin/master' into circuitpython/nickzoic/703-wiznet-5500-native

This commit is contained in:
Nick Moore 2018-10-25 12:20:50 +11:00
commit f6482699a0
72 changed files with 1548 additions and 527 deletions

View File

@ -4,18 +4,26 @@ language: c
compiler:
- gcc
git:
depth: 1
depth: 6
# Put a representative board from each port or sub-port near the top
# to determine more quickly whether that port is going to build or not.
# Each item under 'env' is a separate Travis job to execute.
# They run in separate environments, so each one must take the time
# to clone the repository and submodules; to download and install SDKs,
# pip packages, and so forth. By gathering activities together in optimal
# ways, the "run time" and "total time" of the travis jobs can be minimized.
#
# Since at the time of writing Travis generally starts 5 or 6 jobs, the
# builds have been organized into 5 groups of *approximately* equal durations.
# Additionally, the jobs that need extra SDKs are also organized together.
#
# When adding new boards, take a look on the travis CI page
# https://travis-ci.org/adafruit/circuitpython to which build that installs
# that SDK is shortest and add it there. In the case of major re-organizations,
# just try to make the builds "about equal in run time"
env:
- TRAVIS_TESTS="unix docs translations"
- TRAVIS_BOARDS="feather_huzzah circuitplayground_express pca10056" TRAVIS_SDK=arm:nrf:esp8266
# Group nrf builds together..
- TRAVIS_BOARDS="pca10056 pca10059 feather_nrf52832 feather_nrf52840_express" TRAVIS_SDK=arm:nrf
# The rest of the M0/M4 boards, in arbitrary order.
- TRAVIS_TESTS="unix docs translations" TRAVIS_BOARDS="feather_huzzah circuitplayground_express pca10056 pca10059 feather_nrf52832 feather_nrf52840_express makerdiary_nrf52840_mdk" TRAVIS_SDK=arm:nrf:esp8266
- TRAVIS_BOARDS="metro_m0_express metro_m4_express pirkey_m0 trellis_m4_express trinket_m0" TRAVIS_SDK=arm
- TRAVIS_BOARDS="feather_radiofruit_zigbee gemma_m0 hallowing_m0_express itsybitsy_m0_express itsybitsy_m4_express" TRAVIS_SDK=arm
- TRAVIS_BOARDS="feather_radiofruit_zigbee gemma_m0 hallowing_m0_express itsybitsy_m0_express itsybitsy_m4_express meowmeow" TRAVIS_SDK=arm
- TRAVIS_BOARDS="feather_m0_express_crickit feather_m0_rfm69 feather_m0_rfm9x feather_m4_express arduino_zero" TRAVIS_SDK=arm
- TRAVIS_BOARDS="circuitplayground_express_crickit feather_m0_adalogger feather_m0_basic feather_m0_express" TRAVIS_SDK=arm
@ -45,8 +53,8 @@ before_script:
- (! var_search "${TRAVIS_SDK-}" nrf || sudo ports/nrf/drivers/bluetooth/download_ble_stack.sh)
# For huzzah builds
- (! var_search "${TRAVIS_SDK-}" esp8266 || (wget https://github.com/jepler/esp-open-sdk/releases/download/2018-06-10/xtensa-lx106-elf-standalone.tar.gz && tar xavf xtensa-lx106-elf-standalone.tar.gz))
- if var_search "${TRAVIS_SDK-}" esp8266 ; then PATH=$(readlink -f xtensa-lx106-elf/bin):$PATH; fi
- (! var_search "${TRAVIS_SDK-}" esp8266 || (wget https://github.com/jepler/esp-open-sdk/releases/download/2018-06-10/xtensa-lx106-elf-standalone.tar.gz && tar -C .. -xavf xtensa-lx106-elf-standalone.tar.gz))
- if var_search "${TRAVIS_SDK-}" esp8266 ; then PATH=$(readlink -f ../xtensa-lx106-elf/bin):$PATH; fi
# For coverage testing (upgrade is used to get latest urllib3 version)
- ([[ -z "$TRAVIS_TESTS" ]] || sudo apt-get install -y python3-pip)
@ -54,7 +62,7 @@ before_script:
- (! var_search "${TRAVIS_TESTS-}" docs || sudo pip install 'Sphinx<1.8.0' sphinx-rtd-theme recommonmark)
- (! var_search "${TRAVIS_TESTS-}" translations || sudo pip3 install polib)
# report some good version numbers to the buil
# report some good version numbers to the build
- gcc --version
- (! var_search "${TRAVIS_SDK-}" elf || arm-none-eabi-gcc --version)
- (! var_search "${TRAVIS_SDK-}" esp8266 || xtensa-lx106-elf-gcc --version)

View File

@ -30,13 +30,21 @@ Supported Boards
Designed for CircuitPython
~~~~~~~~~~~~~~~~~~~~~~~~~~
**M0 Boards**
- `Adafruit CircuitPlayground Express <https://www.adafruit.com/product/3333>`__ (`CircuitPython Guide <https://learn.adafruit.com/adafruit-circuit-playground-express/circuitpython-quickstart>`__)
- `Adafruit Feather M0 Express <https://www.adafruit.com/product/3403>`__ (`CircuitPython Guide <https://learn.adafruit.com/adafruit-feather-m0-express-designed-for-circuit-python-circuitpython/kattni-circuitpython>`__)
- `Adafruit Metro M0 Express <https://www.adafruit.com/product/3505>`_ (`CircuitPython Guide <https://learn.adafruit.com/adafruit-metro-m0-express-designed-for-circuitpython/circuitpython>`__)
- `Adafruit Gemma M0 <https://www.adafruit.com/product/3501>`__ (`CircuitPython Guide <https://learn.adafruit.com/adafruit-gemma-m0/circuitpython>`__)
- `Adafruit Hallowing M0 Express <https://www.adafruit.com/product/3900>`__ (`CircuitPython Guide <https://learn.adafruit.com/adafruit-hallowing/circuitpython>`__)
- `Adafruit ItsyBitsy M0 Express <https://www.adafruit.com/product/3727>`_ (`CircuitPython Guide <https://learn.adafruit.com/introducing-itsy-bitsy-m0/circuitpython>`__)
- `Adafruit Metro M0 Express <https://www.adafruit.com/product/3505>`_ (`CircuitPython Guide <https://learn.adafruit.com/adafruit-metro-m0-express-designed-for-circuitpython/circuitpython>`__)
- `Adafruit Trinket M0 <https://www.adafruit.com/product/3500>`__ (`CircuitPython Guide <https://learn.adafruit.com/adafruit-trinket-m0-circuitpython-arduino/circuitpython>`__)
- `Adafruit Metro M4 <https://www.adafruit.com/product/3382>`__ (`CircuitPython Guide <https://learn.adafruit.com/adafruit-metro-m4-express-featuring-atsamd51/overview>`__)
**M4 Boards**
- `Adafruit Feather M4 Express <https://www.adafruit.com/product/3857>`__ (`CircuitPython Guide <https://learn.adafruit.com/adafruit-feather-m4-express-atsamd51/circuitpython>`__)
- `Adafruit ItsyBitsy M4 Express <https://www.adafruit.com/product/3800>`__ (`CircuitPython Guide <https://learn.adafruit.com/introducing-adafruit-itsybitsy-m4/circuitpython>`__)
- `Adafruit Metro M4 Express <https://www.adafruit.com/product/3382>`__ (`CircuitPython Guide <https://learn.adafruit.com/adafruit-metro-m4-express-featuring-atsamd51/circuitpython>`__)
Other
~~~~~

@ -1 +1 @@
Subproject commit 07919641470edb602585c6a91f7b8eacf17e664b
Subproject commit 97d4129b8117d177df2675839ec4081b3570838d

@ -1 +1 @@
Subproject commit d0aa6dc56d66decfae92daced7384c1e3518a666
Subproject commit 36ec7b371f1751961de6d2c910533618d931f109

@ -1 +1 @@
Subproject commit 44f52c5dacd9fc605565e5794e95c9a785aaf693
Subproject commit bbf2d897ae116531bfa15af3bcb32b0123acc435

@ -1 +1 @@
Subproject commit af25424ee7dbebea3e5d77390c017018ffa52d36
Subproject commit 03c24157d46672c723021686f7a838cfeb2db2ba

@ -1 +1 @@
Subproject commit 5c2f6ef1ed80f24b6a3878067d40350d3725e198
Subproject commit 99c71a6c1ea00bc14f0a4507116ff216beafafbd

@ -1 +1 @@
Subproject commit c29e10b590efbdf06163897b49cd0c2bea82ad6e
Subproject commit ec11164ec6682094a48d0f9848d2c4c89c08f3bc

@ -1 +1 @@
Subproject commit c4152a0d87a04903ae0e612eb381af440c9e28b3
Subproject commit 377910d5a9bfbf833dfd3064f80c5b2ae0c78c9a

@ -1 +1 @@
Subproject commit e0b709f1710555da67705360870ba0d14ced7e06
Subproject commit 00326214fc2ece8b31c07a654b192797e6a08043

@ -1 +1 @@
Subproject commit e9f50cb6678a1684591ee021b95a3c4b51786fee
Subproject commit 4b9563d6a74c6089d0ef5466975d11ef52851bca

@ -1 +1 @@
Subproject commit 00f4ebca6c740b76c1c464f83d514ac20b0600e1
Subproject commit 1570b23f7a6d62e169d2fd15969e507a1da05374

@ -1 +1 @@
Subproject commit 340cd17fad0c29d3a70d6e298a30ecc753df054e
Subproject commit e3e3021d8578fde450511b47a085d9d56ab46741

View File

@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-10-11 22:08+1100\n"
"POT-Creation-Date: 2018-10-25 12:20+1100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@ -147,7 +147,7 @@ msgstr ""
msgid "invalid arguments"
msgstr ""
#: lib/utils/pyexec.c:97 py/builtinimport.c:253
#: lib/utils/pyexec.c:97 py/builtinimport.c:251
msgid "script compilation not supported"
msgstr ""
@ -291,12 +291,12 @@ msgid "Too many channels in sample."
msgstr ""
#: ports/atmel-samd/common-hal/audiobusio/I2SOut.c:305
#: ports/atmel-samd/common-hal/audioio/AudioOut.c:339
#: ports/atmel-samd/common-hal/audioio/AudioOut.c:417
msgid "No DMA channel found"
msgstr ""
#: ports/atmel-samd/common-hal/audiobusio/I2SOut.c:308
#: ports/atmel-samd/common-hal/audioio/AudioOut.c:341
#: ports/atmel-samd/common-hal/audioio/AudioOut.c:419
msgid "Unable to allocate buffers for signed conversion"
msgstr ""
@ -312,43 +312,44 @@ msgstr ""
msgid "sampling rate out of range"
msgstr ""
#: ports/atmel-samd/common-hal/audioio/AudioOut.c:69
#: ports/atmel-samd/common-hal/audioio/AudioOut.c:132
msgid "DAC already in use"
msgstr ""
#: ports/atmel-samd/common-hal/audioio/AudioOut.c:73
#: ports/atmel-samd/common-hal/audioio/AudioOut.c:136
msgid "Right channel unsupported"
msgstr ""
#: ports/atmel-samd/common-hal/audioio/AudioOut.c:76
#: ports/atmel-samd/common-hal/audioio/AudioOut.c:139
#: ports/atmel-samd/common-hal/pulseio/PWMOut.c:116
#: ports/atmel-samd/common-hal/touchio/TouchIn.c:65
msgid "Invalid pin"
msgstr ""
#: ports/atmel-samd/common-hal/audioio/AudioOut.c:84
#: ports/atmel-samd/common-hal/audioio/AudioOut.c:147
msgid "Invalid pin for left channel"
msgstr ""
#: ports/atmel-samd/common-hal/audioio/AudioOut.c:88
#: ports/atmel-samd/common-hal/audioio/AudioOut.c:151
msgid "Invalid pin for right channel"
msgstr ""
#: ports/atmel-samd/common-hal/audioio/AudioOut.c:91
#: ports/atmel-samd/common-hal/audioio/AudioOut.c:154
msgid "Cannot output both channels on the same pin"
msgstr ""
#: ports/atmel-samd/common-hal/audioio/AudioOut.c:176
#: ports/atmel-samd/common-hal/audioio/AudioOut.c:243
#: ports/atmel-samd/common-hal/pulseio/PWMOut.c:189
#: ports/atmel-samd/common-hal/pulseio/PulseOut.c:110
#: ports/nrf/common-hal/pulseio/PulseOut.c:107
msgid "All timers in use"
msgstr ""
#: ports/atmel-samd/common-hal/audioio/AudioOut.c:218
#: ports/atmel-samd/common-hal/audioio/AudioOut.c:285
msgid "All event channels in use"
msgstr ""
#: ports/atmel-samd/common-hal/audioio/AudioOut.c:297
#: ports/atmel-samd/common-hal/audioio/AudioOut.c:375
#, c-format
msgid "Sample rate too high. It must be less than %d"
msgstr ""
@ -361,7 +362,7 @@ msgstr ""
#: ports/atmel-samd/common-hal/busio/SPI.c:132
#: ports/atmel-samd/common-hal/busio/UART.c:119
#: ports/atmel-samd/common-hal/i2cslave/I2CSlave.c:45
#: ports/nrf/common-hal/busio/I2C.c:81
#: ports/nrf/common-hal/busio/I2C.c:82
msgid "Invalid pins"
msgstr ""
@ -413,7 +414,7 @@ msgstr ""
#: ports/atmel-samd/common-hal/pulseio/PWMOut.c:120
#: ports/atmel-samd/common-hal/pulseio/PWMOut.c:369
#: ports/nrf/common-hal/pulseio/PWMOut.c:120
#: ports/nrf/common-hal/pulseio/PWMOut.c:119
#: ports/nrf/common-hal/pulseio/PWMOut.c:233
msgid "Invalid PWM frequency"
msgstr ""
@ -695,7 +696,7 @@ msgstr ""
msgid "AnalogOut functionality not supported"
msgstr ""
#: ports/nrf/common-hal/busio/I2C.c:95
#: ports/nrf/common-hal/busio/I2C.c:96
msgid "All I2C peripherals are in use"
msgstr ""
@ -729,7 +730,7 @@ msgstr ""
msgid "Can not get temperature. status: 0x%02x"
msgstr ""
#: ports/nrf/common-hal/pulseio/PWMOut.c:162
#: ports/nrf/common-hal/pulseio/PWMOut.c:161
msgid "All PWM peripherals are in use"
msgstr ""
@ -935,19 +936,19 @@ msgstr ""
msgid "bad compile mode"
msgstr ""
#: py/builtinimport.c:338
#: py/builtinimport.c:336
msgid "cannot perform relative import"
msgstr ""
#: py/builtinimport.c:422 py/builtinimport.c:534
#: py/builtinimport.c:420 py/builtinimport.c:532
msgid "module not found"
msgstr ""
#: py/builtinimport.c:425 py/builtinimport.c:537
#: py/builtinimport.c:423 py/builtinimport.c:535
msgid "no module named '%q'"
msgstr ""
#: py/builtinimport.c:512
#: py/builtinimport.c:510
msgid "relative import"
msgstr ""
@ -1994,7 +1995,7 @@ msgid "AnalogOut is only 16 bits. Value must be less than 65536."
msgstr ""
#: shared-bindings/audiobusio/I2SOut.c:225
#: shared-bindings/audioio/AudioOut.c:223
#: shared-bindings/audioio/AudioOut.c:226
msgid "Not playing"
msgstr ""
@ -2201,7 +2202,7 @@ msgstr ""
#: shared-bindings/microcontroller/Pin.c:89
#: shared-bindings/neopixel_write/__init__.c:67
#: shared-bindings/pulseio/PulseOut.c:75
#: shared-bindings/pulseio/PulseOut.c:76
msgid "Expected a %q"
msgstr ""
@ -2263,7 +2264,7 @@ msgstr ""
msgid "Read-only"
msgstr ""
#: shared-bindings/pulseio/PulseOut.c:134
#: shared-bindings/pulseio/PulseOut.c:135
msgid "Array must contain halfwords (type 'H')"
msgstr ""
@ -2292,7 +2293,7 @@ msgstr ""
msgid "RTC calibration is not supported on this board"
msgstr ""
#: shared-bindings/socket/__init__.c:516 shared-module/network/__init__.c:64
#: shared-bindings/socket/__init__.c:516 shared-module/network/__init__.c:81
msgid "no available NIC"
msgstr ""
@ -2320,15 +2321,15 @@ msgstr ""
msgid "time.struct_time() takes a 9-sequence"
msgstr ""
#: shared-bindings/time/__init__.c:169 shared-bindings/time/__init__.c:250
#: shared-bindings/time/__init__.c:169 shared-bindings/time/__init__.c:264
msgid "Tuple or struct_time argument required"
msgstr ""
#: shared-bindings/time/__init__.c:174 shared-bindings/time/__init__.c:255
#: shared-bindings/time/__init__.c:174 shared-bindings/time/__init__.c:269
msgid "function takes exactly 9 arguments"
msgstr ""
#: shared-bindings/time/__init__.c:226 shared-bindings/time/__init__.c:259
#: shared-bindings/time/__init__.c:240 shared-bindings/time/__init__.c:273
msgid "timestamp out of range for platform time_t"
msgstr ""

View File

@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-10-11 22:08+1100\n"
"POT-Creation-Date: 2018-10-25 12:20+1100\n"
"PO-Revision-Date: 2018-07-27 11:55-0700\n"
"Last-Translator: Sebastian Plamauer\n"
"Language-Team: \n"
@ -93,7 +93,7 @@ msgstr "struct: index außerhalb gültigen Bereichs"
#: extmod/moduheapq.c:38
msgid "heap must be a list"
msgstr "heap muss eine list sein"
msgstr "heap muss eine Liste sein"
#: extmod/moduheapq.c:86 extmod/modutimeq.c:147 extmod/modutimeq.c:172
msgid "empty heap"
@ -147,7 +147,7 @@ msgstr "abort() wurde aufgerufen"
msgid "invalid arguments"
msgstr "ungültige argumente"
#: lib/utils/pyexec.c:97 py/builtinimport.c:253
#: lib/utils/pyexec.c:97 py/builtinimport.c:251
msgid "script compilation not supported"
msgstr "kompilieren von Skripten ist nicht unterstützt"
@ -185,12 +185,12 @@ msgstr "Du hast das Starten im Sicherheitsmodus ausgelöst durch "
#: main.c:252
msgid "To exit, please reset the board without "
msgstr "Zum beenden bitte resete das board ohne "
msgstr "Zum beenden bitte resette das board ohne "
#: main.c:259
msgid ""
"You are running in safe mode which means something really bad happened.\n"
msgstr "Sicherheitsmodus aktive, etwas wirklich schlechtes ist passiert.\n"
msgstr "Sicherheitsmodus aktiv, etwas wirklich schlechtes ist passiert.\n"
#: main.c:261
msgid "Looks like our core CircuitPython code crashed hard. Whoops!\n"
@ -214,8 +214,8 @@ msgid ""
"enough power for the whole circuit and press reset (after ejecting "
"CIRCUITPY).\n"
msgstr ""
"genug Strom für den ganzen Schaltkreis liefert und drücke reset (nach "
"demsicheren Auswerfen von CIRCUITPY.)\n"
"genug Strom für den ganzen Schaltkreis liefert und drücke reset (nach dem "
"sicheren Auswerfen von CIRCUITPY.)\n"
#: main.c:270
msgid "Press any key to enter the REPL. Use CTRL-D to reload."
@ -225,7 +225,7 @@ msgstr ""
#: main.c:426
msgid "soft reboot\n"
msgstr "weicher reboot\n"
msgstr "soft reboot\n"
#: ports/atmel-samd/audio_dma.c:209
#: ports/atmel-samd/common-hal/audiobusio/PDMIn.c:361
@ -268,7 +268,7 @@ msgstr "AnalogOut ist an diesem Pin nicht unterstützt"
#: ports/atmel-samd/common-hal/audiobusio/I2SOut.c:147
#: ports/atmel-samd/common-hal/audiobusio/I2SOut.c:150
msgid "Invalid bit clock pin"
msgstr "Ungülgites bit clock pin"
msgstr "Ungültiges bit clock pin"
#: ports/atmel-samd/common-hal/audiobusio/I2SOut.c:153
msgid "Bit clock and word select must share a clock unit"
@ -284,7 +284,7 @@ msgstr "Ungültiger data pin"
#: ports/atmel-samd/common-hal/audiobusio/PDMIn.c:145
#: ports/atmel-samd/common-hal/audiobusio/PDMIn.c:150
msgid "Serializer in use"
msgstr "Serilaizer wird benutzt"
msgstr "Serializer wird benutzt"
#: ports/atmel-samd/common-hal/audiobusio/I2SOut.c:230
msgid "Clock unit in use"
@ -300,12 +300,12 @@ msgid "Too many channels in sample."
msgstr "Zu viele Kanäle im sample"
#: ports/atmel-samd/common-hal/audiobusio/I2SOut.c:305
#: ports/atmel-samd/common-hal/audioio/AudioOut.c:339
#: ports/atmel-samd/common-hal/audioio/AudioOut.c:417
msgid "No DMA channel found"
msgstr "Kein DMA Kanal gefunden"
#: ports/atmel-samd/common-hal/audiobusio/I2SOut.c:308
#: ports/atmel-samd/common-hal/audioio/AudioOut.c:341
#: ports/atmel-samd/common-hal/audioio/AudioOut.c:419
msgid "Unable to allocate buffers for signed conversion"
msgstr "Konnte keine Buffer für Vorzeichenumwandlung allozieren"
@ -321,43 +321,44 @@ msgstr "Nur 8 oder 16 bit mono mit "
msgid "sampling rate out of range"
msgstr "Abtastrate außerhalb der Reichweite"
#: ports/atmel-samd/common-hal/audioio/AudioOut.c:69
#: ports/atmel-samd/common-hal/audioio/AudioOut.c:132
msgid "DAC already in use"
msgstr "DAC wird schon benutzt"
#: ports/atmel-samd/common-hal/audioio/AudioOut.c:73
#: ports/atmel-samd/common-hal/audioio/AudioOut.c:136
msgid "Right channel unsupported"
msgstr "Rechter Kanal wird nicht unterstützt"
#: ports/atmel-samd/common-hal/audioio/AudioOut.c:76
#: ports/atmel-samd/common-hal/audioio/AudioOut.c:139
#: ports/atmel-samd/common-hal/pulseio/PWMOut.c:116
#: ports/atmel-samd/common-hal/touchio/TouchIn.c:65
msgid "Invalid pin"
msgstr "Ungültiger Pin"
#: ports/atmel-samd/common-hal/audioio/AudioOut.c:84
#: ports/atmel-samd/common-hal/audioio/AudioOut.c:147
msgid "Invalid pin for left channel"
msgstr "Ungültiger Pin für linken Kanal"
#: ports/atmel-samd/common-hal/audioio/AudioOut.c:88
#: ports/atmel-samd/common-hal/audioio/AudioOut.c:151
msgid "Invalid pin for right channel"
msgstr "Ungültiger Pin für rechten Kanal"
#: ports/atmel-samd/common-hal/audioio/AudioOut.c:91
#: ports/atmel-samd/common-hal/audioio/AudioOut.c:154
msgid "Cannot output both channels on the same pin"
msgstr "Kann nicht beite Kanäle auf dem gleichen Pin ausgeben"
#: ports/atmel-samd/common-hal/audioio/AudioOut.c:176
#: ports/atmel-samd/common-hal/audioio/AudioOut.c:243
#: ports/atmel-samd/common-hal/pulseio/PWMOut.c:189
#: ports/atmel-samd/common-hal/pulseio/PulseOut.c:110
#: ports/nrf/common-hal/pulseio/PulseOut.c:107
msgid "All timers in use"
msgstr "Alle timer werden benutzt"
#: ports/atmel-samd/common-hal/audioio/AudioOut.c:218
#: ports/atmel-samd/common-hal/audioio/AudioOut.c:285
msgid "All event channels in use"
msgstr "Alle event Kanälre werden benutzt"
msgstr "Alle event Kanäle werden benutzt"
#: ports/atmel-samd/common-hal/audioio/AudioOut.c:297
#: ports/atmel-samd/common-hal/audioio/AudioOut.c:375
#, c-format
msgid "Sample rate too high. It must be less than %d"
msgstr ""
@ -370,7 +371,7 @@ msgstr "Nicht genug Pins vorhanden"
#: ports/atmel-samd/common-hal/busio/SPI.c:132
#: ports/atmel-samd/common-hal/busio/UART.c:119
#: ports/atmel-samd/common-hal/i2cslave/I2CSlave.c:45
#: ports/nrf/common-hal/busio/I2C.c:81
#: ports/nrf/common-hal/busio/I2C.c:82
msgid "Invalid pins"
msgstr "Ungültige Pins"
@ -380,7 +381,7 @@ msgstr "SDA oder SCL brauchen pull up"
#: ports/atmel-samd/common-hal/busio/I2C.c:121
msgid "Unsupported baudrate"
msgstr "Baudrate wird nicht unterstütz"
msgstr "Baudrate wird nicht unterstützt"
#: ports/atmel-samd/common-hal/busio/UART.c:66
msgid "bytes > 8 bits not supported"
@ -422,7 +423,7 @@ msgstr "Reset zum bootloader nicht möglich da bootloader nicht vorhanden"
#: ports/atmel-samd/common-hal/pulseio/PWMOut.c:120
#: ports/atmel-samd/common-hal/pulseio/PWMOut.c:369
#: ports/nrf/common-hal/pulseio/PWMOut.c:120
#: ports/nrf/common-hal/pulseio/PWMOut.c:119
#: ports/nrf/common-hal/pulseio/PWMOut.c:233
msgid "Invalid PWM frequency"
msgstr "Ungültige PWM Frequenz"
@ -546,23 +547,25 @@ msgstr "Minimale PWM Frequenz ist %dHz"
#, c-format
msgid "Multiple PWM frequencies not supported. PWM already set to %dhz."
msgstr ""
"Mehrere PWM Frequenzen nicht unterstützt. PWM bereits auf %dHz gesetzt."
#: ports/esp8266/common-hal/pulseio/PWMOut.c:77 ports/esp8266/machine_pwm.c:70
#, c-format
msgid "PWM not supported on pin %d"
msgstr ""
msgstr "PWM nicht unterstützt an Pin %d"
#: ports/esp8266/common-hal/pulseio/PulseIn.c:78
msgid "No PulseIn support for %q"
msgstr ""
msgstr "Keine PulseIn Unterstützung für %q"
#: ports/esp8266/common-hal/storage/__init__.c:34
msgid "Unable to remount filesystem"
msgstr ""
msgstr "Dateisystem kann nicht wieder gemounted werden."
#: ports/esp8266/common-hal/storage/__init__.c:38
msgid "Use esptool to erase flash and re-upload Python instead"
msgstr ""
"Benutze esptool um den flash zu löschen und stattdessen Python hochzuladen"
#: ports/esp8266/esp_mphal.c:154
msgid "C-level assert"
@ -571,102 +574,103 @@ msgstr ""
#: ports/esp8266/machine_adc.c:57
#, c-format
msgid "not a valid ADC Channel: %d"
msgstr ""
msgstr "Kein gültiger ADC Kanal: %d"
#: ports/esp8266/machine_hspi.c:131 ports/esp8266/machine_hspi.c:137
msgid "impossible baudrate"
msgstr ""
msgstr "Unmögliche Baudrate"
#: ports/esp8266/machine_pin.c:129
msgid "expecting a pin"
msgstr ""
msgstr "Ein Pin wird erwartet"
#: ports/esp8266/machine_pin.c:284
msgid "Pin(16) doesn't support pull"
msgstr ""
msgstr "Pin(16) unterstützt kein pull"
#: ports/esp8266/machine_pin.c:323
msgid "invalid pin"
msgstr ""
msgstr "Ungültiger Pin"
#: ports/esp8266/machine_pin.c:389
msgid "pin does not have IRQ capabilities"
msgstr ""
msgstr "Pin hat keine IRQ Fähigkeiten"
#: ports/esp8266/machine_rtc.c:185
msgid "buffer too long"
msgstr ""
msgstr "Buffer zu lang"
#: ports/esp8266/machine_rtc.c:209 ports/esp8266/machine_rtc.c:223
#: ports/esp8266/machine_rtc.c:246
msgid "invalid alarm"
msgstr ""
msgstr "Ungültiger Alarm"
#: ports/esp8266/machine_uart.c:169
#, c-format
msgid "UART(%d) does not exist"
msgstr ""
msgstr "UART(%d) existiert nicht"
#: ports/esp8266/machine_uart.c:219
msgid "UART(1) can't read"
msgstr ""
msgstr "UART(1) kann nicht lesen"
#: ports/esp8266/modesp.c:119
msgid "len must be multiple of 4"
msgstr ""
msgstr "len muss ein vielfaches von 4 sein"
#: ports/esp8266/modesp.c:274
#, c-format
msgid "memory allocation failed, allocating %u bytes for native code"
msgstr ""
"Speicherallozierung fehlgeschlagen, alloziere %u Bytes für nativen Code"
#: ports/esp8266/modesp.c:317
msgid "flash location must be below 1MByte"
msgstr ""
msgstr "flash location muss unter 1MByte sein"
#: ports/esp8266/modmachine.c:63
msgid "frequency can only be either 80Mhz or 160MHz"
msgstr ""
msgstr "Die Frequenz kann nur 80Mhz oder 160Mhz sein"
#: ports/esp8266/modnetwork.c:61
msgid "AP required"
msgstr ""
msgstr "AP erforderlich"
#: ports/esp8266/modnetwork.c:61
msgid "STA required"
msgstr ""
msgstr "STA erforderlich"
#: ports/esp8266/modnetwork.c:87
msgid "Cannot update i/f status"
msgstr ""
msgstr "Kann i/f Status nicht updaten"
#: ports/esp8266/modnetwork.c:142
msgid "Cannot set STA config"
msgstr ""
msgstr "Kann STA Konfiguration nicht setzen"
#: ports/esp8266/modnetwork.c:144
msgid "Cannot connect to AP"
msgstr ""
msgstr "Kann nicht zu AP verbinden"
#: ports/esp8266/modnetwork.c:152
msgid "Cannot disconnect from AP"
msgstr ""
msgstr "Kann nicht trennen von AP"
#: ports/esp8266/modnetwork.c:173
msgid "unknown status param"
msgstr ""
msgstr "Unbekannter Statusparameter"
#: ports/esp8266/modnetwork.c:222
msgid "STA must be active"
msgstr ""
msgstr "STA muss aktiv sein"
#: ports/esp8266/modnetwork.c:239
msgid "scan failed"
msgstr ""
msgstr "Scan fehlgeschlagen"
#: ports/esp8266/modnetwork.c:306
msgid "wifi_set_ip_info() failed"
msgstr ""
msgstr "wifi_set_ip_info() fehlgeschlagen"
#: ports/esp8266/modnetwork.c:319
msgid "either pos or kw args are allowed"
@ -704,7 +708,7 @@ msgstr ""
msgid "AnalogOut functionality not supported"
msgstr ""
#: ports/nrf/common-hal/busio/I2C.c:95
#: ports/nrf/common-hal/busio/I2C.c:96
#, fuzzy
msgid "All I2C peripherals are in use"
msgstr "Alle timer werden benutzt"
@ -742,7 +746,7 @@ msgstr ""
msgid "Can not get temperature. status: 0x%02x"
msgstr ""
#: ports/nrf/common-hal/pulseio/PWMOut.c:162
#: ports/nrf/common-hal/pulseio/PWMOut.c:161
#, fuzzy
msgid "All PWM peripherals are in use"
msgstr "Alle timer werden benutzt"
@ -949,19 +953,19 @@ msgstr ""
msgid "bad compile mode"
msgstr ""
#: py/builtinimport.c:338
#: py/builtinimport.c:336
msgid "cannot perform relative import"
msgstr ""
#: py/builtinimport.c:422 py/builtinimport.c:534
#: py/builtinimport.c:420 py/builtinimport.c:532
msgid "module not found"
msgstr ""
#: py/builtinimport.c:425 py/builtinimport.c:537
#: py/builtinimport.c:423 py/builtinimport.c:535
msgid "no module named '%q'"
msgstr ""
#: py/builtinimport.c:512
#: py/builtinimport.c:510
msgid "relative import"
msgstr ""
@ -2009,7 +2013,7 @@ msgid "AnalogOut is only 16 bits. Value must be less than 65536."
msgstr ""
#: shared-bindings/audiobusio/I2SOut.c:225
#: shared-bindings/audioio/AudioOut.c:223
#: shared-bindings/audioio/AudioOut.c:226
msgid "Not playing"
msgstr ""
@ -2220,7 +2224,7 @@ msgstr ""
#: shared-bindings/microcontroller/Pin.c:89
#: shared-bindings/neopixel_write/__init__.c:67
#: shared-bindings/pulseio/PulseOut.c:75
#: shared-bindings/pulseio/PulseOut.c:76
msgid "Expected a %q"
msgstr ""
@ -2282,7 +2286,7 @@ msgstr ""
msgid "Read-only"
msgstr ""
#: shared-bindings/pulseio/PulseOut.c:134
#: shared-bindings/pulseio/PulseOut.c:135
msgid "Array must contain halfwords (type 'H')"
msgstr ""
@ -2311,7 +2315,7 @@ msgstr ""
msgid "RTC calibration is not supported on this board"
msgstr ""
#: shared-bindings/socket/__init__.c:516 shared-module/network/__init__.c:64
#: shared-bindings/socket/__init__.c:516 shared-module/network/__init__.c:81
msgid "no available NIC"
msgstr ""
@ -2339,15 +2343,15 @@ msgstr ""
msgid "time.struct_time() takes a 9-sequence"
msgstr ""
#: shared-bindings/time/__init__.c:169 shared-bindings/time/__init__.c:250
#: shared-bindings/time/__init__.c:169 shared-bindings/time/__init__.c:264
msgid "Tuple or struct_time argument required"
msgstr ""
#: shared-bindings/time/__init__.c:174 shared-bindings/time/__init__.c:255
#: shared-bindings/time/__init__.c:174 shared-bindings/time/__init__.c:269
msgid "function takes exactly 9 arguments"
msgstr ""
#: shared-bindings/time/__init__.c:226 shared-bindings/time/__init__.c:259
#: shared-bindings/time/__init__.c:240 shared-bindings/time/__init__.c:273
msgid "timestamp out of range for platform time_t"
msgstr ""

View File

@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-10-11 22:08+1100\n"
"POT-Creation-Date: 2018-10-25 12:20+1100\n"
"PO-Revision-Date: 2018-07-27 11:55-0700\n"
"Last-Translator: \n"
"Language-Team: \n"
@ -147,7 +147,7 @@ msgstr ""
msgid "invalid arguments"
msgstr ""
#: lib/utils/pyexec.c:97 py/builtinimport.c:253
#: lib/utils/pyexec.c:97 py/builtinimport.c:251
msgid "script compilation not supported"
msgstr ""
@ -291,12 +291,12 @@ msgid "Too many channels in sample."
msgstr ""
#: ports/atmel-samd/common-hal/audiobusio/I2SOut.c:305
#: ports/atmel-samd/common-hal/audioio/AudioOut.c:339
#: ports/atmel-samd/common-hal/audioio/AudioOut.c:417
msgid "No DMA channel found"
msgstr ""
#: ports/atmel-samd/common-hal/audiobusio/I2SOut.c:308
#: ports/atmel-samd/common-hal/audioio/AudioOut.c:341
#: ports/atmel-samd/common-hal/audioio/AudioOut.c:419
msgid "Unable to allocate buffers for signed conversion"
msgstr ""
@ -312,43 +312,44 @@ msgstr ""
msgid "sampling rate out of range"
msgstr ""
#: ports/atmel-samd/common-hal/audioio/AudioOut.c:69
#: ports/atmel-samd/common-hal/audioio/AudioOut.c:132
msgid "DAC already in use"
msgstr ""
#: ports/atmel-samd/common-hal/audioio/AudioOut.c:73
#: ports/atmel-samd/common-hal/audioio/AudioOut.c:136
msgid "Right channel unsupported"
msgstr ""
#: ports/atmel-samd/common-hal/audioio/AudioOut.c:76
#: ports/atmel-samd/common-hal/audioio/AudioOut.c:139
#: ports/atmel-samd/common-hal/pulseio/PWMOut.c:116
#: ports/atmel-samd/common-hal/touchio/TouchIn.c:65
msgid "Invalid pin"
msgstr ""
#: ports/atmel-samd/common-hal/audioio/AudioOut.c:84
#: ports/atmel-samd/common-hal/audioio/AudioOut.c:147
msgid "Invalid pin for left channel"
msgstr ""
#: ports/atmel-samd/common-hal/audioio/AudioOut.c:88
#: ports/atmel-samd/common-hal/audioio/AudioOut.c:151
msgid "Invalid pin for right channel"
msgstr ""
#: ports/atmel-samd/common-hal/audioio/AudioOut.c:91
#: ports/atmel-samd/common-hal/audioio/AudioOut.c:154
msgid "Cannot output both channels on the same pin"
msgstr ""
#: ports/atmel-samd/common-hal/audioio/AudioOut.c:176
#: ports/atmel-samd/common-hal/audioio/AudioOut.c:243
#: ports/atmel-samd/common-hal/pulseio/PWMOut.c:189
#: ports/atmel-samd/common-hal/pulseio/PulseOut.c:110
#: ports/nrf/common-hal/pulseio/PulseOut.c:107
msgid "All timers in use"
msgstr ""
#: ports/atmel-samd/common-hal/audioio/AudioOut.c:218
#: ports/atmel-samd/common-hal/audioio/AudioOut.c:285
msgid "All event channels in use"
msgstr ""
#: ports/atmel-samd/common-hal/audioio/AudioOut.c:297
#: ports/atmel-samd/common-hal/audioio/AudioOut.c:375
#, c-format
msgid "Sample rate too high. It must be less than %d"
msgstr ""
@ -361,7 +362,7 @@ msgstr ""
#: ports/atmel-samd/common-hal/busio/SPI.c:132
#: ports/atmel-samd/common-hal/busio/UART.c:119
#: ports/atmel-samd/common-hal/i2cslave/I2CSlave.c:45
#: ports/nrf/common-hal/busio/I2C.c:81
#: ports/nrf/common-hal/busio/I2C.c:82
msgid "Invalid pins"
msgstr ""
@ -413,7 +414,7 @@ msgstr ""
#: ports/atmel-samd/common-hal/pulseio/PWMOut.c:120
#: ports/atmel-samd/common-hal/pulseio/PWMOut.c:369
#: ports/nrf/common-hal/pulseio/PWMOut.c:120
#: ports/nrf/common-hal/pulseio/PWMOut.c:119
#: ports/nrf/common-hal/pulseio/PWMOut.c:233
msgid "Invalid PWM frequency"
msgstr ""
@ -695,7 +696,7 @@ msgstr ""
msgid "AnalogOut functionality not supported"
msgstr ""
#: ports/nrf/common-hal/busio/I2C.c:95
#: ports/nrf/common-hal/busio/I2C.c:96
msgid "All I2C peripherals are in use"
msgstr ""
@ -729,7 +730,7 @@ msgstr ""
msgid "Can not get temperature. status: 0x%02x"
msgstr ""
#: ports/nrf/common-hal/pulseio/PWMOut.c:162
#: ports/nrf/common-hal/pulseio/PWMOut.c:161
msgid "All PWM peripherals are in use"
msgstr ""
@ -935,19 +936,19 @@ msgstr ""
msgid "bad compile mode"
msgstr ""
#: py/builtinimport.c:338
#: py/builtinimport.c:336
msgid "cannot perform relative import"
msgstr ""
#: py/builtinimport.c:422 py/builtinimport.c:534
#: py/builtinimport.c:420 py/builtinimport.c:532
msgid "module not found"
msgstr ""
#: py/builtinimport.c:425 py/builtinimport.c:537
#: py/builtinimport.c:423 py/builtinimport.c:535
msgid "no module named '%q'"
msgstr ""
#: py/builtinimport.c:512
#: py/builtinimport.c:510
msgid "relative import"
msgstr ""
@ -1994,7 +1995,7 @@ msgid "AnalogOut is only 16 bits. Value must be less than 65536."
msgstr ""
#: shared-bindings/audiobusio/I2SOut.c:225
#: shared-bindings/audioio/AudioOut.c:223
#: shared-bindings/audioio/AudioOut.c:226
msgid "Not playing"
msgstr ""
@ -2201,7 +2202,7 @@ msgstr ""
#: shared-bindings/microcontroller/Pin.c:89
#: shared-bindings/neopixel_write/__init__.c:67
#: shared-bindings/pulseio/PulseOut.c:75
#: shared-bindings/pulseio/PulseOut.c:76
msgid "Expected a %q"
msgstr ""
@ -2263,7 +2264,7 @@ msgstr ""
msgid "Read-only"
msgstr ""
#: shared-bindings/pulseio/PulseOut.c:134
#: shared-bindings/pulseio/PulseOut.c:135
msgid "Array must contain halfwords (type 'H')"
msgstr ""
@ -2292,7 +2293,7 @@ msgstr ""
msgid "RTC calibration is not supported on this board"
msgstr ""
#: shared-bindings/socket/__init__.c:516 shared-module/network/__init__.c:64
#: shared-bindings/socket/__init__.c:516 shared-module/network/__init__.c:81
msgid "no available NIC"
msgstr ""
@ -2320,15 +2321,15 @@ msgstr ""
msgid "time.struct_time() takes a 9-sequence"
msgstr ""
#: shared-bindings/time/__init__.c:169 shared-bindings/time/__init__.c:250
#: shared-bindings/time/__init__.c:169 shared-bindings/time/__init__.c:264
msgid "Tuple or struct_time argument required"
msgstr ""
#: shared-bindings/time/__init__.c:174 shared-bindings/time/__init__.c:255
#: shared-bindings/time/__init__.c:174 shared-bindings/time/__init__.c:269
msgid "function takes exactly 9 arguments"
msgstr ""
#: shared-bindings/time/__init__.c:226 shared-bindings/time/__init__.c:259
#: shared-bindings/time/__init__.c:240 shared-bindings/time/__init__.c:273
msgid "timestamp out of range for platform time_t"
msgstr ""

View File

@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-10-11 22:08+1100\n"
"POT-Creation-Date: 2018-10-25 12:20+1100\n"
"PO-Revision-Date: 2018-08-24 22:56-0500\n"
"Last-Translator: \n"
"Language-Team: \n"
@ -65,7 +65,7 @@ msgstr "string de longitud impar"
#: extmod/modubinascii.c:101
msgid "non-hex digit found"
msgstr "se encontró un digito no hexadecimal"
msgstr "se encontró un digito non-hex"
#: extmod/modubinascii.c:169
msgid "incorrect padding"
@ -81,7 +81,7 @@ msgstr "No se puede obtener inequívocamente sizeof escalar"
#: extmod/moductypes.c:397
msgid "struct: no fields"
msgstr "struct: no fields"
msgstr "struct: sin campos"
#: extmod/moductypes.c:530
msgid "struct: cannot index"
@ -121,7 +121,7 @@ msgstr "certificado inválido"
#: extmod/modutimeq.c:131
msgid "queue overflow"
msgstr "desborde de queue"
msgstr "desbordamiento de queue"
#: extmod/moduzlib.c:98
msgid "compression header"
@ -132,16 +132,14 @@ msgid "invalid dupterm index"
msgstr "index dupterm inválido"
#: extmod/vfs_fat.c:426 py/moduerrno.c:150
#, fuzzy
msgid "Read-only filesystem"
msgstr "sistema de archivos de Solo-Lectura"
msgstr "Sistema de archivos de solo-Lectura"
#: extmod/vfs_posix_file.c:48 ports/unix/file.c:50 py/objstringio.c:43
msgid "I/O operation on closed file"
msgstr "Operación I/O en archivo cerrado"
#: lib/embed/abort_.c:8
#, fuzzy
msgid "abort() called"
msgstr "se llamó abort()"
@ -149,7 +147,7 @@ msgstr "se llamó abort()"
msgid "invalid arguments"
msgstr "argumentos inválidos"
#: lib/utils/pyexec.c:97 py/builtinimport.c:253
#: lib/utils/pyexec.c:97 py/builtinimport.c:251
msgid "script compilation not supported"
msgstr "script de compilación no soportado"
@ -158,21 +156,20 @@ msgid " output:\n"
msgstr " salida:\n"
#: main.c:167 main.c:240
#, fuzzy
msgid ""
"Auto-reload is on. Simply save files over USB to run them or enter REPL to "
"disable.\n"
msgstr ""
"Auto-reload habilitado. Simplemente guarda los archivos via USB para "
"ejecutarlos o entra REPL para desabilitarlos.\n"
"ejecutarlos o entra al REPL para desabilitarlos.\n"
#: main.c:169
msgid "Running in safe mode! Auto-reload is off.\n"
msgstr "Ejecutando en modo seguro! Auto-recarga esta deshabilitado.\n"
msgstr "Ejecutando en modo seguro! La auto-recarga esta deshabilitada.\n"
#: main.c:171 main.c:242
msgid "Auto-reload is off.\n"
msgstr "Auto-reload deshabilitado.\n"
msgstr "Auto-recarga deshabilitada.\n"
#: main.c:185
msgid "Running in safe mode! Not running saved code.\n"
@ -184,7 +181,7 @@ msgstr "ADVERTENCIA: El nombre de archivo de tu código tiene dos extensiones\n"
#: main.c:249
msgid "You requested starting safe mode by "
msgstr "Solicitaste iniciar en modo seguro con "
msgstr "Solicitaste iniciar en modo seguro por "
#: main.c:252
msgid "To exit, please reset the board without "
@ -199,29 +196,29 @@ msgstr ""
#: main.c:261
msgid "Looks like our core CircuitPython code crashed hard. Whoops!\n"
msgstr ""
"Parece que nuestro código del núcleo CircuitPython dejó de funcionar. "
"Whoops!\n"
msgstr "Parece que nuestro código CircuitPython dejó de funcionar. Whoops!\n"
#: main.c:262
#, fuzzy
msgid "Please file an issue here with the contents of your CIRCUITPY drive:\n"
msgstr ""
"Por favor registra un problema aquí con los contenidos de tu unidad de "
"almacenamiento CIRCUITPY:\n"
"Por favor registra un issue en el siguiente URL con los contenidos de tu "
"unidad de almacenamiento CIRCUITPY:\n"
#: main.c:265
msgid ""
"The microcontroller's power dipped. Please make sure your power supply "
"provides\n"
msgstr ""
"La alimentación del microcontrolador cayó. Por favor asegurate de que tu "
"fuente de alimentación provee\n"
#: main.c:266
msgid ""
"enough power for the whole circuit and press reset (after ejecting "
"CIRCUITPY).\n"
msgstr ""
"suficiente poder para todo el circuito y pulsa reset (después de expulsar "
"suficiente poder para todo el circuito y presiona reset (después de expulsar "
"CIRCUITPY).\n"
#: main.c:270
@ -261,7 +258,7 @@ msgstr "Sin bus UART por default"
#: ports/atmel-samd/common-hal/analogio/AnalogIn.c:63
#: ports/nrf/common-hal/analogio/AnalogIn.c:39
msgid "Pin does not have ADC capabilities"
msgstr "pin no tiene capacidades ADC"
msgstr "Pin no tiene capacidad ADC"
#: ports/atmel-samd/common-hal/analogio/AnalogOut.c:49
msgid "No DAC on chip"
@ -278,7 +275,7 @@ msgstr "Pin bit clock inválido"
#: ports/atmel-samd/common-hal/audiobusio/I2SOut.c:153
msgid "Bit clock and word select must share a clock unit"
msgstr "Bit clock y Word select deben compartir la unidad de reloj"
msgstr "Bit clock y word select deben compartir una unidad de reloj"
#: ports/atmel-samd/common-hal/audiobusio/I2SOut.c:156
#: ports/atmel-samd/common-hal/audiobusio/PDMIn.c:130
@ -299,19 +296,19 @@ msgstr "Clock unit está siendo utilizado"
#: ports/atmel-samd/common-hal/audiobusio/I2SOut.c:240
#: ports/atmel-samd/common-hal/audiobusio/PDMIn.c:172
msgid "Unable to find free GCLK"
msgstr "No se pudo encontrar un GCLK disponible"
msgstr "No se pudo encontrar un GCLK libre"
#: ports/atmel-samd/common-hal/audiobusio/I2SOut.c:254
msgid "Too many channels in sample."
msgstr "Demasiados canales en sample"
msgstr "Demasiados canales en sample."
#: ports/atmel-samd/common-hal/audiobusio/I2SOut.c:305
#: ports/atmel-samd/common-hal/audioio/AudioOut.c:339
#: ports/atmel-samd/common-hal/audioio/AudioOut.c:417
msgid "No DMA channel found"
msgstr "No se encontró el canal DMA"
#: ports/atmel-samd/common-hal/audiobusio/I2SOut.c:308
#: ports/atmel-samd/common-hal/audioio/AudioOut.c:341
#: ports/atmel-samd/common-hal/audioio/AudioOut.c:419
msgid "Unable to allocate buffers for signed conversion"
msgstr "No se pudieron asignar buffers para la conversión con signo"
@ -321,52 +318,53 @@ msgstr "Pin clock inválido"
#: ports/atmel-samd/common-hal/audiobusio/PDMIn.c:134
msgid "Only 8 or 16 bit mono with "
msgstr "Solo mono de 8 o 16 bit con"
msgstr "Solo mono de 8 o 16 bit con "
#: ports/atmel-samd/common-hal/audiobusio/PDMIn.c:167
msgid "sampling rate out of range"
msgstr "velocidad de muestreo fuera de rango"
msgstr "frecuencia de muestreo fuera de rango"
#: ports/atmel-samd/common-hal/audioio/AudioOut.c:69
#: ports/atmel-samd/common-hal/audioio/AudioOut.c:132
msgid "DAC already in use"
msgstr "DAC ya está siendo utilizado"
#: ports/atmel-samd/common-hal/audioio/AudioOut.c:73
#: ports/atmel-samd/common-hal/audioio/AudioOut.c:136
msgid "Right channel unsupported"
msgstr "El canal derecho no tiene soporte"
msgstr "Canal derecho no soportado"
#: ports/atmel-samd/common-hal/audioio/AudioOut.c:76
#: ports/atmel-samd/common-hal/audioio/AudioOut.c:139
#: ports/atmel-samd/common-hal/pulseio/PWMOut.c:116
#: ports/atmel-samd/common-hal/touchio/TouchIn.c:65
msgid "Invalid pin"
msgstr "pin inválido"
msgstr "Pin inválido"
#: ports/atmel-samd/common-hal/audioio/AudioOut.c:84
#: ports/atmel-samd/common-hal/audioio/AudioOut.c:147
msgid "Invalid pin for left channel"
msgstr "Pin inválido para canal izquierdo"
#: ports/atmel-samd/common-hal/audioio/AudioOut.c:88
#: ports/atmel-samd/common-hal/audioio/AudioOut.c:151
msgid "Invalid pin for right channel"
msgstr "Pin inválido para canal derecho"
#: ports/atmel-samd/common-hal/audioio/AudioOut.c:91
#: ports/atmel-samd/common-hal/audioio/AudioOut.c:154
msgid "Cannot output both channels on the same pin"
msgstr "No es posible utilizar el mismo pin para ambos canales"
msgstr "No se puede tener ambos canales en el mismo pin"
#: ports/atmel-samd/common-hal/audioio/AudioOut.c:176
#: ports/atmel-samd/common-hal/audioio/AudioOut.c:243
#: ports/atmel-samd/common-hal/pulseio/PWMOut.c:189
#: ports/atmel-samd/common-hal/pulseio/PulseOut.c:110
#: ports/nrf/common-hal/pulseio/PulseOut.c:107
msgid "All timers in use"
msgstr "Todos los timers están siendo utilizados"
msgstr "Todos los timers en uso"
#: ports/atmel-samd/common-hal/audioio/AudioOut.c:218
#: ports/atmel-samd/common-hal/audioio/AudioOut.c:285
msgid "All event channels in use"
msgstr "Todos los canales de eventos están siendo utilizados"
msgstr "Todos los event channels en uso"
#: ports/atmel-samd/common-hal/audioio/AudioOut.c:297
#: ports/atmel-samd/common-hal/audioio/AudioOut.c:375
#, c-format
msgid "Sample rate too high. It must be less than %d"
msgstr "Frecuencia de muestreo demasiado alta. Debe ser menor que %d"
msgstr "Frecuencia de muestreo demasiado alta. Debe ser menor a %d"
#: ports/atmel-samd/common-hal/busio/I2C.c:71
msgid "Not enough pins available"
@ -376,7 +374,7 @@ msgstr "No hay suficientes pines disponibles"
#: ports/atmel-samd/common-hal/busio/SPI.c:132
#: ports/atmel-samd/common-hal/busio/UART.c:119
#: ports/atmel-samd/common-hal/i2cslave/I2CSlave.c:45
#: ports/nrf/common-hal/busio/I2C.c:81
#: ports/nrf/common-hal/busio/I2C.c:82
msgid "Invalid pins"
msgstr "pines inválidos"
@ -386,25 +384,25 @@ msgstr "SDA o SCL necesitan una pull up"
#: ports/atmel-samd/common-hal/busio/I2C.c:121
msgid "Unsupported baudrate"
msgstr "Baudrate sin soporte"
msgstr "Baudrate no soportado"
#: ports/atmel-samd/common-hal/busio/UART.c:66
msgid "bytes > 8 bits not supported"
msgstr "bytes > 8 bits no son soportados"
msgstr "bytes > 8 bits no soportados"
#: ports/atmel-samd/common-hal/busio/UART.c:72
#: ports/nrf/common-hal/busio/UART.c:82
msgid "tx and rx cannot both be None"
msgstr "tx y rx no pueden ser ambos None"
msgstr "Ambos tx y rx no pueden ser None"
#: ports/atmel-samd/common-hal/busio/UART.c:145
#: ports/nrf/common-hal/busio/UART.c:115
msgid "Failed to allocate RX buffer"
msgstr "Fallo la asignación del buffer RX"
msgstr "Ha fallado la asignación del buffer RX"
#: ports/atmel-samd/common-hal/busio/UART.c:153
msgid "Could not initialize UART"
msgstr "No se pudo inicializar la UART"
msgstr "No se puede inicializar la UART"
#: ports/atmel-samd/common-hal/busio/UART.c:240
#: ports/nrf/common-hal/busio/UART.c:149
@ -419,16 +417,16 @@ msgstr "Sin pin TX"
#: ports/atmel-samd/common-hal/digitalio/DigitalInOut.c:170
#: ports/nrf/common-hal/digitalio/DigitalInOut.c:142
msgid "Cannot get pull while in output mode"
msgstr "No se puede obtener pull mientras en modo de salida"
msgstr "No puede ser pull mientras este en modo de salida"
#: ports/atmel-samd/common-hal/microcontroller/__init__.c:74
#: ports/esp8266/common-hal/microcontroller/__init__.c:64
msgid "Cannot reset into bootloader because no bootloader is present."
msgstr "No se puede reiniciar en bootloader porque no hay bootloader presente."
msgstr "No se puede reiniciar a bootloader porque no hay bootloader presente."
#: ports/atmel-samd/common-hal/pulseio/PWMOut.c:120
#: ports/atmel-samd/common-hal/pulseio/PWMOut.c:369
#: ports/nrf/common-hal/pulseio/PWMOut.c:120
#: ports/nrf/common-hal/pulseio/PWMOut.c:119
#: ports/nrf/common-hal/pulseio/PWMOut.c:233
msgid "Invalid PWM frequency"
msgstr "Frecuencia PWM inválida"
@ -439,7 +437,7 @@ msgstr "Todos los timers para este pin están siendo utilizados"
#: ports/atmel-samd/common-hal/pulseio/PulseIn.c:110
msgid "No hardware support on pin"
msgstr "pin no tiene soporte en hardware"
msgstr "Sin soporte de hardware en pin"
#: ports/atmel-samd/common-hal/pulseio/PulseIn.c:113
msgid "EXTINT channel already in use"
@ -449,12 +447,12 @@ msgstr "El canal EXTINT ya está siendo utilizado"
#: ports/esp8266/common-hal/pulseio/PulseIn.c:86
#, c-format
msgid "Failed to allocate RX buffer of %d bytes"
msgstr "Fallo la asignación del buffer RX de %d bytes"
msgstr "Falló la asignación del buffer RX de %d bytes"
#: ports/atmel-samd/common-hal/pulseio/PulseIn.c:205
#: ports/esp8266/common-hal/pulseio/PulseIn.c:151
msgid "pop from an empty PulseIn"
msgstr "pop en un PulseIn vacío"
msgstr "pop de un PulseIn vacío"
#: ports/atmel-samd/common-hal/pulseio/PulseIn.c:237
#: ports/esp8266/common-hal/pulseio/PulseIn.c:182 py/obj.c:420
@ -475,7 +473,7 @@ msgstr "El canal EXTINT ya está siendo utilizado"
#: ports/atmel-samd/common-hal/rtc/RTC.c:101
msgid "calibration value out of range +/-127"
msgstr "Valor de calibración fuera de rango +/-127"
msgstr "Valor de calibración fuera del rango +/-127"
#: ports/atmel-samd/common-hal/storage/__init__.c:48
msgid "Cannot remount '/' when USB is active."
@ -503,11 +501,11 @@ msgstr "Error USB"
#: ports/esp8266/common-hal/analogio/AnalogIn.c:43
msgid "Pin %q does not have ADC capabilities"
msgstr "Pin %q no tiene capacidades ADC"
msgstr "Pin %q no tiene capacidades de ADC"
#: ports/esp8266/common-hal/analogio/AnalogOut.c:39
msgid "No hardware support for analog out."
msgstr "Sin soporte de hardware para salida análoga"
msgstr "Sin soporte de hardware para analog out"
#: ports/esp8266/common-hal/busio/SPI.c:72
msgid "Pins not valid for SPI"
@ -527,21 +525,21 @@ msgstr "stop bits inválidos"
#: ports/esp8266/common-hal/digitalio/DigitalInOut.c:200
msgid "ESP8266 does not support pull down."
msgstr "ESP8266 no tiene soporte para pull down"
msgstr "ESP8266 no soporta pull down."
#: ports/esp8266/common-hal/digitalio/DigitalInOut.c:210
msgid "GPIO16 does not support pull up."
msgstr "GPIO16 no tiene soporte para pull up."
msgstr "GPIO16 no soporta pull up."
#: ports/esp8266/common-hal/microcontroller/__init__.c:66
msgid "ESP8226 does not support safe mode."
msgstr "ESP8226 no tiene soporte para modo seguro"
msgstr "ESP8226 no soporta modo seguro."
#: ports/esp8266/common-hal/pulseio/PWMOut.c:54
#: ports/esp8266/common-hal/pulseio/PWMOut.c:113
#, c-format
msgid "Maximum PWM frequency is %dhz."
msgstr "La frecuencia máxima del PWM es %dhz"
msgstr "La frecuencia máxima del PWM es %dhz."
#: ports/esp8266/common-hal/pulseio/PWMOut.c:57
#: ports/esp8266/common-hal/pulseio/PWMOut.c:116
@ -552,7 +550,7 @@ msgstr "La frecuencia mínima del PWM es 1hz"
#, c-format
msgid "Multiple PWM frequencies not supported. PWM already set to %dhz."
msgstr ""
"PWM de múltiples frecuencias no tiene soporte. El PWM ya se estableció a %dhz"
"PWM de múltiples frecuencias no soportado. El PWM ya se estableció a %dhz"
#: ports/esp8266/common-hal/pulseio/PWMOut.c:77 ports/esp8266/machine_pwm.c:70
#, c-format
@ -561,11 +559,11 @@ msgstr "El pin %d no soporta PWM"
#: ports/esp8266/common-hal/pulseio/PulseIn.c:78
msgid "No PulseIn support for %q"
msgstr "%q no tiene soporte para PulseIn"
msgstr "Sin soporte PulseIn para %q"
#: ports/esp8266/common-hal/storage/__init__.c:34
msgid "Unable to remount filesystem"
msgstr "No se pudo montar de nuevo el sistema de archivos"
msgstr "Incapaz de montar de nuevo el sistema de archivos"
#: ports/esp8266/common-hal/storage/__init__.c:38
msgid "Use esptool to erase flash and re-upload Python instead"
@ -590,7 +588,7 @@ msgstr "esperando un pin"
#: ports/esp8266/machine_pin.c:284
msgid "Pin(16) doesn't support pull"
msgstr "Pin(16) no tiene soporte para pull"
msgstr "Pin(16) no soporta para pull"
#: ports/esp8266/machine_pin.c:323
msgid "invalid pin"
@ -598,7 +596,7 @@ msgstr "pin inválido"
#: ports/esp8266/machine_pin.c:389
msgid "pin does not have IRQ capabilities"
msgstr "pin no tiene capacidades IRQ"
msgstr "pin sin capacidades IRQ"
#: ports/esp8266/machine_rtc.c:185
msgid "buffer too long"
@ -625,8 +623,7 @@ msgstr "len debe de ser múltiple de 4"
#: ports/esp8266/modesp.c:274
#, c-format
msgid "memory allocation failed, allocating %u bytes for native code"
msgstr ""
"la asignación de memoria ha fallado, asignando %u bytes para código nativo"
msgstr "falló la asignación de memoria, asignando %u bytes para código nativo"
#: ports/esp8266/modesp.c:317
msgid "flash location must be below 1MByte"
@ -638,11 +635,11 @@ msgstr "la frecuencia solo puede ser 80MHz o 160MHz"
#: ports/esp8266/modnetwork.c:61
msgid "AP required"
msgstr "AP necesario"
msgstr "AP requerido"
#: ports/esp8266/modnetwork.c:61
msgid "STA required"
msgstr "STA necesario"
msgstr "STA requerido"
#: ports/esp8266/modnetwork.c:87
msgid "Cannot update i/f status"
@ -712,13 +709,13 @@ msgstr "parámetro config desconocido"
msgid "AnalogOut functionality not supported"
msgstr "Funcionalidad AnalogOut no soportada"
#: ports/nrf/common-hal/busio/I2C.c:95
#: ports/nrf/common-hal/busio/I2C.c:96
msgid "All I2C peripherals are in use"
msgstr "Todos los timers están siendo utilizados"
msgstr "Todos los timers están siendo usados"
#: ports/nrf/common-hal/busio/SPI.c:115
msgid "All SPI peripherals are in use"
msgstr "Todos los timers están siendo utilizados"
msgstr "Todos los timers están siendo usados"
#: ports/nrf/common-hal/busio/UART.c:48
#, c-format
@ -746,10 +743,9 @@ msgstr "busio.UART no disponible"
msgid "Can not get temperature. status: 0x%02x"
msgstr "No se puede obtener la temperatura. status: 0x%02x"
#: ports/nrf/common-hal/pulseio/PWMOut.c:162
#, fuzzy
#: ports/nrf/common-hal/pulseio/PWMOut.c:161
msgid "All PWM peripherals are in use"
msgstr "Todos los timers están siendo utilizados"
msgstr "Todos los periféricos PWM en uso"
#: ports/nrf/drivers/bluetooth/ble_drv.c:199
msgid "Cannot apply GAP parameters."
@ -765,16 +761,16 @@ msgstr "No se puede consultar la dirección del dispositivo."
#: ports/nrf/drivers/bluetooth/ble_drv.c:264
msgid "Can not add Vendor Specific 128-bit UUID."
msgstr "No se puede agregar el UUID de 128-bits Especifico del Vendedor."
msgstr "No se puede agregar el Vendor Specific 128-bit UUID."
#: ports/nrf/drivers/bluetooth/ble_drv.c:284
#: ports/nrf/drivers/bluetooth/ble_drv.c:298
msgid "Can not add Service."
msgstr "No se puede agregar el Servicio"
msgstr "No se puede agregar el Servicio."
#: ports/nrf/drivers/bluetooth/ble_drv.c:373
msgid "Can not add Characteristic."
msgstr "No se puede agregar la Característica"
msgstr "No se puede agregar la Característica."
#: ports/nrf/drivers/bluetooth/ble_drv.c:400
msgid "Can not apply device name in the stack."
@ -854,15 +850,15 @@ msgstr "Longitud de string UUID inválida"
#: ports/unix/modffi.c:138
msgid "Unknown type"
msgstr ""
msgstr "Tipo desconocido"
#: ports/unix/modffi.c:207 ports/unix/modffi.c:265
msgid "Error in ffi_prep_cif"
msgstr ""
msgstr "Error en ffi_prep_cif"
#: ports/unix/modffi.c:270
msgid "ffi_prep_closure_loc"
msgstr ""
msgstr "ffi_prep_closure_loc"
#: ports/unix/modffi.c:413
msgid "Don't know how to pass object to native function"
@ -871,30 +867,30 @@ msgstr ""
#: ports/unix/modusocket.c:474
#, c-format
msgid "[addrinfo error %d]"
msgstr ""
msgstr "[addrinfo error %d]"
#: py/argcheck.c:44
msgid "function does not take keyword arguments"
msgstr ""
msgstr "la función no tiene argumentos por palabra clave"
#: py/argcheck.c:54 py/bc.c:85 py/objnamedtuple.c:104
#, c-format
msgid "function takes %d positional arguments but %d were given"
msgstr ""
msgstr "la función toma %d argumentos posicionales pero le fueron dados %d"
#: py/argcheck.c:64
#, c-format
msgid "function missing %d required positional arguments"
msgstr ""
msgstr "a la función le hacen falta %d argumentos posicionales requeridos"
#: py/argcheck.c:72
#, c-format
msgid "function expected at most %d arguments, got %d"
msgstr ""
msgstr "la función esperaba a lo sumo %d argumentos, tiene %d"
#: py/argcheck.c:97
msgid "'%q' argument required"
msgstr ""
msgstr "argumento '%q' requerido"
#: py/argcheck.c:122
msgid "extra positional arguments given"
@ -918,11 +914,11 @@ msgstr ""
#: py/bc.c:197 py/bc.c:215
msgid "unexpected keyword argument"
msgstr ""
msgstr "argumento por palabra clave inesperado"
#: py/bc.c:199
msgid "keywords must be strings"
msgstr ""
msgstr "palabras clave deben ser strings"
#: py/bc.c:206 py/objnamedtuple.c:138
msgid "function got multiple values for argument '%q'"
@ -953,19 +949,19 @@ msgstr ""
msgid "bad compile mode"
msgstr ""
#: py/builtinimport.c:338
#: py/builtinimport.c:336
msgid "cannot perform relative import"
msgstr ""
#: py/builtinimport.c:422 py/builtinimport.c:534
#: py/builtinimport.c:420 py/builtinimport.c:532
msgid "module not found"
msgstr "módulo no encontrado"
#: py/builtinimport.c:425 py/builtinimport.c:537
#: py/builtinimport.c:423 py/builtinimport.c:535
msgid "no module named '%q'"
msgstr "ningún módulo se llama '%q'"
#: py/builtinimport.c:512
#: py/builtinimport.c:510
msgid "relative import"
msgstr "import relativo"
@ -1134,7 +1130,7 @@ msgid "'%s' expects a register"
msgstr ""
#: py/emitinlinethumb.c:211
#, fuzzy, c-format
#, c-format
msgid "'%s' expects a special register"
msgstr "ord espera un carácter"
@ -1178,7 +1174,6 @@ msgid "unsupported Thumb instruction '%s' with %d arguments"
msgstr ""
#: py/emitinlinethumb.c:810
#, fuzzy
msgid "branch not in range"
msgstr "El argumento de chr() no esta en el rango(256)"
@ -1345,14 +1340,12 @@ msgid "File exists"
msgstr ""
#: py/moduerrno.c:148
#, fuzzy
msgid "Unsupported operation"
msgstr "El pin %d no soporta PWM"
msgstr "Operacion no soportada"
#: py/moduerrno.c:149
#, fuzzy
msgid "Invalid argument"
msgstr "argumentos inválidos"
msgstr "Argumento inválido"
#: py/obj.c:90
msgid "Traceback (most recent call last):\n"
@ -1424,9 +1417,8 @@ msgid "%q indices must be integers, not %s"
msgstr ""
#: py/obj.c:423
#, fuzzy
msgid "%q index out of range"
msgstr "struct: index fuera de rango"
msgstr "%w index fuera de rango"
#: py/obj.c:455
msgid "object has no len"
@ -1438,9 +1430,8 @@ msgid "object of type '%s' has no len()"
msgstr ""
#: py/obj.c:496
#, fuzzy
msgid "object does not support item deletion"
msgstr "ESP8226 no soporta modo seguro"
msgstr "object no soporta supresión de item"
#: py/obj.c:499
#, c-format
@ -1499,9 +1490,8 @@ msgid "full"
msgstr ""
#: py/objdeque.c:127
#, fuzzy
msgid "empty"
msgstr "heap vacío"
msgstr "vacío"
#: py/objdict.c:314
msgid "popitem(): dictionary is empty"
@ -1512,9 +1502,8 @@ msgid "dict update sequence has wrong length"
msgstr ""
#: py/objfloat.c:308 py/parsenum.c:331
#, fuzzy
msgid "complex values not supported"
msgstr "script de compilación no soportado"
msgstr "valores complejos no soportados"
#: py/objgenerator.c:108
msgid "can't send non-None value to a just-started generator"
@ -1545,9 +1534,8 @@ msgid "float too big"
msgstr ""
#: py/objint.c:328
#, fuzzy
msgid "long int not supported in this build"
msgstr "AnalogOut no es soportado por el pin dado"
msgstr "long int no soportado en esta compilación"
#: py/objint.c:334 py/objint.c:340 py/objint.c:350 py/objint.c:358
msgid "small int overflow"
@ -1586,9 +1574,8 @@ msgid "can't set attribute"
msgstr ""
#: py/objobject.c:55
#, fuzzy
msgid "__new__ arg must be a user-type"
msgstr "heap debe ser una lista"
msgstr "__new__ arg debe ser un user-type"
#: py/objrange.c:110
msgid "zero step"
@ -1599,9 +1586,8 @@ msgid "pop from an empty set"
msgstr ""
#: py/objslice.c:66
#, fuzzy
msgid "Length must be an int"
msgstr "heap debe ser una lista"
msgstr "Length debe ser un int"
#: py/objslice.c:71
msgid "Length must be non-negative"
@ -1616,9 +1602,8 @@ msgid "Cannot subclass slice"
msgstr ""
#: py/objstr.c:261
#, fuzzy
msgid "bytes value out of range"
msgstr "Valor de calibración fuera de rango +/-127"
msgstr "valor de bytes fuera de rango"
#: py/objstr.c:270
msgid "wrong number of arguments"
@ -1629,18 +1614,16 @@ msgid "join expects a list of str/bytes objects consistent with self object"
msgstr ""
#: py/objstr.c:542 py/objstr.c:647 py/objstr.c:1744
#, fuzzy
msgid "empty separator"
msgstr "heap vacío"
msgstr "separator vacío"
#: py/objstr.c:641
msgid "rsplit(None,n)"
msgstr ""
#: py/objstr.c:713
#, fuzzy
msgid "substring not found"
msgstr "módulo no encontrado"
msgstr "substring no encontrado"
#: py/objstr.c:770
msgid "start/end indices"
@ -1681,14 +1664,12 @@ msgid ""
msgstr ""
#: py/objstr.c:1055 py/objstr.c:1083
#, fuzzy
msgid "tuple index out of range"
msgstr "struct: index fuera de rango"
msgstr "tuple index fuera de rango"
#: py/objstr.c:1071
#, fuzzy
msgid "attributes not supported yet"
msgstr "bytes > 8 bits no soportados"
msgstr "atributos aún no soportados"
#: py/objstr.c:1079
msgid ""
@ -1696,9 +1677,8 @@ msgid ""
msgstr ""
#: py/objstr.c:1171
#, fuzzy
msgid "invalid format specifier"
msgstr "formato inválido"
msgstr "especificador de formato inválido"
#: py/objstr.c:1192
msgid "sign not allowed in string format specifier"
@ -1736,9 +1716,8 @@ msgid "incomplete format key"
msgstr ""
#: py/objstr.c:1482
#, fuzzy
msgid "incomplete format"
msgstr "formato inválido"
msgstr "formato incompleto"
#: py/objstr.c:1490
msgid "not enough arguments for format string"
@ -1776,9 +1755,8 @@ msgid "string indices must be integers, not %s"
msgstr ""
#: py/objstrunicode.c:145 py/objstrunicode.c:164
#, fuzzy
msgid "string index out of range"
msgstr "struct: index fuera de rango"
msgstr "string index fuera de rango"
#: py/objtype.c:358
msgid "__init__() should return None"
@ -1827,9 +1805,8 @@ msgid "type '%q' is not an acceptable base type"
msgstr ""
#: py/objtype.c:1137
#, fuzzy
msgid "multiple inheritance not supported"
msgstr "operación I2C no soportada"
msgstr "herencia multiple no soportada"
#: py/objtype.c:1164
msgid "multiple bases have instance lay-out conflict"
@ -1848,14 +1825,12 @@ msgid "issubclass() arg 1 must be a class"
msgstr ""
#: py/parse.c:726
#, fuzzy
msgid "constant must be an integer"
msgstr "heap debe ser una lista"
msgstr "constant debe ser un entero"
#: py/parse.c:868
#, fuzzy
msgid "Unable to init parser"
msgstr "No se pudo encontrar un GCLK disponible"
msgstr "Incapaz de inicializar el parser"
#: py/parse.c:1170
msgid "unexpected indent"
@ -1871,7 +1846,7 @@ msgstr ""
#: py/parsenum.c:151
msgid "invalid syntax for integer"
msgstr "formato inválido"
msgstr "sintaxis inválido para entero"
#: py/parsenum.c:155
#, c-format
@ -1880,11 +1855,11 @@ msgstr ""
#: py/parsenum.c:339
msgid "invalid syntax for number"
msgstr "argumentos inválidos"
msgstr "sintaxis inválido para número"
#: py/parsenum.c:342
msgid "decimal numbers not supported"
msgstr "bytes > 8 bits no son soportados"
msgstr "números decimales no soportados"
#: py/persistentcode.c:223
msgid ""
@ -1898,7 +1873,7 @@ msgstr ""
#: py/runtime.c:206
msgid "name not defined"
msgstr "módulo no encontrado"
msgstr "name no definido"
#: py/runtime.c:209
msgid "name '%q' is not defined"
@ -1973,9 +1948,8 @@ msgid "exceptions must derive from BaseException"
msgstr ""
#: py/runtime.c:1430
#, fuzzy
msgid "cannot import name %q"
msgstr "ningún módulo se llama '%q'"
msgstr "no se puede importar name '%q'"
#: py/runtime.c:1535
msgid "memory allocation failed, heap is locked"
@ -1995,9 +1969,8 @@ msgid "object not in sequence"
msgstr ""
#: py/stream.c:96
#, fuzzy
msgid "stream operation not supported"
msgstr "operación I2C no soportada"
msgstr "operación stream no soportada"
#: py/vm.c:255
msgid "local variable referenced before assignment"
@ -2036,7 +2009,7 @@ msgid "AnalogOut is only 16 bits. Value must be less than 65536."
msgstr ""
#: shared-bindings/audiobusio/I2SOut.c:225
#: shared-bindings/audioio/AudioOut.c:223
#: shared-bindings/audioio/AudioOut.c:226
msgid "Not playing"
msgstr ""
@ -2074,34 +2047,32 @@ msgid ""
msgstr ""
#: shared-bindings/audioio/Mixer.c:94
#, fuzzy
msgid "Invalid voice count"
msgstr "Dirección inválida."
msgstr "Cuenta de voces inválida"
#: shared-bindings/audioio/Mixer.c:99
#, fuzzy
msgid "Invalid channel count"
msgstr "argumentos inválidos"
msgstr "Cuenta de canales inválida"
#: shared-bindings/audioio/Mixer.c:103
#, fuzzy
msgid "Sample rate must be positive"
msgstr "STA debe estar activo"
msgstr "Sample rate debe ser positivo"
#: shared-bindings/audioio/Mixer.c:107
#, fuzzy
msgid "bits_per_sample must be 8 or 16"
msgstr "bits debe ser 8"
msgstr "bits_per_sample debe ser 8 o 16"
#: shared-bindings/audioio/RawSample.c:98
msgid ""
"sample_source buffer must be a bytearray or array of type 'h', 'H', 'b' or "
"'B'"
msgstr ""
"sample_source buffer debe ser un bytearray o un array de tipo 'h', 'H', 'b' "
"o'B'"
#: shared-bindings/audioio/RawSample.c:104
msgid "buffer must be a bytes-like object"
msgstr ""
msgstr "buffer debe de ser un objeto bytes-like"
#: shared-bindings/audioio/WaveFile.c:78
#: shared-bindings/displayio/OnDiskBitmap.c:85
@ -2146,7 +2117,6 @@ msgid "stop must be 1 or 2"
msgstr ""
#: shared-bindings/digitalio/DigitalInOut.c:211
#, fuzzy
msgid "Invalid direction."
msgstr "Dirección inválida."
@ -2248,7 +2218,7 @@ msgstr ""
#: shared-bindings/microcontroller/Pin.c:89
#: shared-bindings/neopixel_write/__init__.c:67
#: shared-bindings/pulseio/PulseOut.c:75
#: shared-bindings/pulseio/PulseOut.c:76
msgid "Expected a %q"
msgstr ""
@ -2307,11 +2277,10 @@ msgid "index must be int"
msgstr ""
#: shared-bindings/pulseio/PulseIn.c:293
#, fuzzy
msgid "Read-only"
msgstr "Solo lectura"
msgstr "Solo-lectura"
#: shared-bindings/pulseio/PulseOut.c:134
#: shared-bindings/pulseio/PulseOut.c:135
msgid "Array must contain halfwords (type 'H')"
msgstr ""
@ -2340,7 +2309,7 @@ msgstr ""
msgid "RTC calibration is not supported on this board"
msgstr ""
#: shared-bindings/socket/__init__.c:516 shared-module/network/__init__.c:64
#: shared-bindings/socket/__init__.c:516 shared-module/network/__init__.c:81
msgid "no available NIC"
msgstr ""
@ -2368,15 +2337,15 @@ msgstr ""
msgid "time.struct_time() takes a 9-sequence"
msgstr ""
#: shared-bindings/time/__init__.c:169 shared-bindings/time/__init__.c:250
#: shared-bindings/time/__init__.c:169 shared-bindings/time/__init__.c:264
msgid "Tuple or struct_time argument required"
msgstr ""
#: shared-bindings/time/__init__.c:174 shared-bindings/time/__init__.c:255
#: shared-bindings/time/__init__.c:174 shared-bindings/time/__init__.c:269
msgid "function takes exactly 9 arguments"
msgstr ""
#: shared-bindings/time/__init__.c:226 shared-bindings/time/__init__.c:259
#: shared-bindings/time/__init__.c:240 shared-bindings/time/__init__.c:273
msgid "timestamp out of range for platform time_t"
msgstr ""
@ -2391,31 +2360,31 @@ msgstr ""
#: shared-module/audioio/Mixer.c:47 shared-module/audioio/WaveFile.c:117
msgid "Couldn't allocate first buffer"
msgstr ""
msgstr "No se pudo asignar el primer buffer"
#: shared-module/audioio/Mixer.c:53 shared-module/audioio/WaveFile.c:123
msgid "Couldn't allocate second buffer"
msgstr ""
msgstr "No se pudo asignar el segundo buffer"
#: shared-module/audioio/Mixer.c:82
msgid "Voice index too high"
msgstr ""
msgstr "Index de voz demasiado alto"
#: shared-module/audioio/Mixer.c:85
msgid "The sample's sample rate does not match the mixer's"
msgstr ""
msgstr "El sample rate del sample no iguala al del mixer"
#: shared-module/audioio/Mixer.c:88
msgid "The sample's channel count does not match the mixer's"
msgstr ""
msgstr "La cuenta de canales del sample no iguala a las del mixer"
#: shared-module/audioio/Mixer.c:91
msgid "The sample's bits_per_sample does not match the mixer's"
msgstr ""
msgstr "Los bits_per_sample del sample no igualan a los del mixer"
#: shared-module/audioio/Mixer.c:100
msgid "The sample's signedness does not match the mixer's"
msgstr ""
msgstr "El signo del sample no iguala al del mixer"
#: shared-module/audioio/WaveFile.c:61
msgid "Invalid wave file"
@ -2478,14 +2447,12 @@ msgid "Group full"
msgstr ""
#: shared-module/displayio/Group.c:48
#, fuzzy
msgid "Group empty"
msgstr "heap vacío"
msgstr "Group vacío"
#: shared-module/displayio/OnDiskBitmap.c:49
#, fuzzy
msgid "Invalid BMP file"
msgstr "pin inválido"
msgstr "Archivo BMP inválido"
#: shared-module/displayio/OnDiskBitmap.c:59
#, c-format

View File

@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-10-11 22:08+1100\n"
"POT-Creation-Date: 2018-10-25 12:20+1100\n"
"PO-Revision-Date: 2018-08-30 23:04-0700\n"
"Last-Translator: Timothy <me@timothygarcia.ca>\n"
"Language-Team: fil\n"
@ -147,7 +147,7 @@ msgstr "abort() tinawag"
msgid "invalid arguments"
msgstr "mali ang mga argumento"
#: lib/utils/pyexec.c:97 py/builtinimport.c:253
#: lib/utils/pyexec.c:97 py/builtinimport.c:251
msgid "script compilation not supported"
msgstr "script kompilasyon hindi supportado"
@ -303,12 +303,12 @@ msgid "Too many channels in sample."
msgstr "Sobra ang channels sa sample."
#: ports/atmel-samd/common-hal/audiobusio/I2SOut.c:305
#: ports/atmel-samd/common-hal/audioio/AudioOut.c:339
#: ports/atmel-samd/common-hal/audioio/AudioOut.c:417
msgid "No DMA channel found"
msgstr "Walang DMA channel na mahanap"
#: ports/atmel-samd/common-hal/audiobusio/I2SOut.c:308
#: ports/atmel-samd/common-hal/audioio/AudioOut.c:341
#: ports/atmel-samd/common-hal/audioio/AudioOut.c:419
msgid "Unable to allocate buffers for signed conversion"
msgstr "Hindi ma-allocate ang buffers para sa naka-sign na conversion"
@ -324,43 +324,44 @@ msgstr "Tanging 8 o 16 na bit mono na may "
msgid "sampling rate out of range"
msgstr "pagpili ng rate wala sa sakop"
#: ports/atmel-samd/common-hal/audioio/AudioOut.c:69
#: ports/atmel-samd/common-hal/audioio/AudioOut.c:132
msgid "DAC already in use"
msgstr "Ginagamit na ang DAC"
#: ports/atmel-samd/common-hal/audioio/AudioOut.c:73
#: ports/atmel-samd/common-hal/audioio/AudioOut.c:136
msgid "Right channel unsupported"
msgstr "Hindi supportado ang kanang channel"
#: ports/atmel-samd/common-hal/audioio/AudioOut.c:76
#: ports/atmel-samd/common-hal/audioio/AudioOut.c:139
#: ports/atmel-samd/common-hal/pulseio/PWMOut.c:116
#: ports/atmel-samd/common-hal/touchio/TouchIn.c:65
msgid "Invalid pin"
msgstr "Mali ang pin"
#: ports/atmel-samd/common-hal/audioio/AudioOut.c:84
#: ports/atmel-samd/common-hal/audioio/AudioOut.c:147
msgid "Invalid pin for left channel"
msgstr "Mali ang pin para sa kaliwang channel"
#: ports/atmel-samd/common-hal/audioio/AudioOut.c:88
#: ports/atmel-samd/common-hal/audioio/AudioOut.c:151
msgid "Invalid pin for right channel"
msgstr "Mali ang pin para sa kanang channel"
#: ports/atmel-samd/common-hal/audioio/AudioOut.c:91
#: ports/atmel-samd/common-hal/audioio/AudioOut.c:154
msgid "Cannot output both channels on the same pin"
msgstr "Hindi maaaring output ang mga parehong channel sa parehong pin"
#: ports/atmel-samd/common-hal/audioio/AudioOut.c:176
#: ports/atmel-samd/common-hal/audioio/AudioOut.c:243
#: ports/atmel-samd/common-hal/pulseio/PWMOut.c:189
#: ports/atmel-samd/common-hal/pulseio/PulseOut.c:110
#: ports/nrf/common-hal/pulseio/PulseOut.c:107
msgid "All timers in use"
msgstr "Lahat ng timer ginagamit"
#: ports/atmel-samd/common-hal/audioio/AudioOut.c:218
#: ports/atmel-samd/common-hal/audioio/AudioOut.c:285
msgid "All event channels in use"
msgstr "Lahat ng event channels ginagamit"
#: ports/atmel-samd/common-hal/audioio/AudioOut.c:297
#: ports/atmel-samd/common-hal/audioio/AudioOut.c:375
#, c-format
msgid "Sample rate too high. It must be less than %d"
msgstr ""
@ -373,7 +374,7 @@ msgstr "Hindi sapat ang magagamit na pins"
#: ports/atmel-samd/common-hal/busio/SPI.c:132
#: ports/atmel-samd/common-hal/busio/UART.c:119
#: ports/atmel-samd/common-hal/i2cslave/I2CSlave.c:45
#: ports/nrf/common-hal/busio/I2C.c:81
#: ports/nrf/common-hal/busio/I2C.c:82
msgid "Invalid pins"
msgstr "Mali ang pins"
@ -425,7 +426,7 @@ msgstr "Hindi ma-reset sa bootloader dahil walang bootloader."
#: ports/atmel-samd/common-hal/pulseio/PWMOut.c:120
#: ports/atmel-samd/common-hal/pulseio/PWMOut.c:369
#: ports/nrf/common-hal/pulseio/PWMOut.c:120
#: ports/nrf/common-hal/pulseio/PWMOut.c:119
#: ports/nrf/common-hal/pulseio/PWMOut.c:233
msgid "Invalid PWM frequency"
msgstr "Mali ang PWM frequency"
@ -710,7 +711,7 @@ msgstr "hindi alam na config param"
msgid "AnalogOut functionality not supported"
msgstr "Hindi supportado ang AnalogOut"
#: ports/nrf/common-hal/busio/I2C.c:95
#: ports/nrf/common-hal/busio/I2C.c:96
#, fuzzy
msgid "All I2C peripherals are in use"
msgstr "Lahat ng timer ginagamit"
@ -748,7 +749,7 @@ msgstr ""
msgid "Can not get temperature. status: 0x%02x"
msgstr "Hindi makuha ang temperatura. status 0x%02x"
#: ports/nrf/common-hal/pulseio/PWMOut.c:162
#: ports/nrf/common-hal/pulseio/PWMOut.c:161
#, fuzzy
msgid "All PWM peripherals are in use"
msgstr "Lahat ng timer ginagamit"
@ -959,19 +960,19 @@ msgstr "masamang typecode"
msgid "bad compile mode"
msgstr "masamang mode ng compile"
#: py/builtinimport.c:338
#: py/builtinimport.c:336
msgid "cannot perform relative import"
msgstr "hindi maaring isagawa ang relative import"
#: py/builtinimport.c:422 py/builtinimport.c:534
#: py/builtinimport.c:420 py/builtinimport.c:532
msgid "module not found"
msgstr "module hindi nakita"
#: py/builtinimport.c:425 py/builtinimport.c:537
#: py/builtinimport.c:423 py/builtinimport.c:535
msgid "no module named '%q'"
msgstr "walang module na '%q'"
#: py/builtinimport.c:512
#: py/builtinimport.c:510
msgid "relative import"
msgstr "relative import"
@ -2033,7 +2034,7 @@ msgid "AnalogOut is only 16 bits. Value must be less than 65536."
msgstr "AnalogOut ay 16 bits. Value ay dapat hindi hihigit pa sa 65536."
#: shared-bindings/audiobusio/I2SOut.c:225
#: shared-bindings/audioio/AudioOut.c:223
#: shared-bindings/audioio/AudioOut.c:226
msgid "Not playing"
msgstr "Hindi playing"
@ -2265,7 +2266,7 @@ msgstr "walang laman ang address"
#: shared-bindings/microcontroller/Pin.c:89
#: shared-bindings/neopixel_write/__init__.c:67
#: shared-bindings/pulseio/PulseOut.c:75
#: shared-bindings/pulseio/PulseOut.c:76
msgid "Expected a %q"
msgstr "Umasa ng %q"
@ -2329,7 +2330,7 @@ msgstr "index ay dapat int"
msgid "Read-only"
msgstr "Basahin-lamang"
#: shared-bindings/pulseio/PulseOut.c:134
#: shared-bindings/pulseio/PulseOut.c:135
msgid "Array must contain halfwords (type 'H')"
msgstr "May halfwords (type 'H') dapat ang array"
@ -2358,7 +2359,7 @@ msgstr "Hindi supportado ang RTC sa board na ito"
msgid "RTC calibration is not supported on this board"
msgstr "RTC calibration ay hindi supportado ng board na ito"
#: shared-bindings/socket/__init__.c:516 shared-module/network/__init__.c:64
#: shared-bindings/socket/__init__.c:516 shared-module/network/__init__.c:81
msgid "no available NIC"
msgstr ""
@ -2386,15 +2387,15 @@ msgstr "time.struct_time() kumukuha ng 1 argument"
msgid "time.struct_time() takes a 9-sequence"
msgstr "time.struct_time() kumukuha ng 9-sequence"
#: shared-bindings/time/__init__.c:169 shared-bindings/time/__init__.c:250
#: shared-bindings/time/__init__.c:169 shared-bindings/time/__init__.c:264
msgid "Tuple or struct_time argument required"
msgstr "Tuple o struct_time argument kailangan"
#: shared-bindings/time/__init__.c:174 shared-bindings/time/__init__.c:255
#: shared-bindings/time/__init__.c:174 shared-bindings/time/__init__.c:269
msgid "function takes exactly 9 arguments"
msgstr "function kumukuha ng 9 arguments"
#: shared-bindings/time/__init__.c:226 shared-bindings/time/__init__.c:259
#: shared-bindings/time/__init__.c:240 shared-bindings/time/__init__.c:273
msgid "timestamp out of range for platform time_t"
msgstr "wala sa sakop ng timestamp ang platform time_t"

View File

@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: 0.1\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-10-11 22:08+1100\n"
"POT-Creation-Date: 2018-10-25 12:20+1100\n"
"PO-Revision-Date: 2018-08-14 11:01+0200\n"
"Last-Translator: Pierrick Couturier <arofarn@arofarn.info>\n"
"Language-Team: fr\n"
@ -146,7 +146,7 @@ msgstr "abort() appelé"
msgid "invalid arguments"
msgstr "arguments invalides"
#: lib/utils/pyexec.c:97 py/builtinimport.c:253
#: lib/utils/pyexec.c:97 py/builtinimport.c:251
msgid "script compilation not supported"
msgstr "compilation du script non supporté"
@ -298,12 +298,12 @@ msgid "Too many channels in sample."
msgstr "Trop de canaux dans l'échantillon."
#: ports/atmel-samd/common-hal/audiobusio/I2SOut.c:305
#: ports/atmel-samd/common-hal/audioio/AudioOut.c:339
#: ports/atmel-samd/common-hal/audioio/AudioOut.c:417
msgid "No DMA channel found"
msgstr "Aucun canal DMA trouvé"
#: ports/atmel-samd/common-hal/audiobusio/I2SOut.c:308
#: ports/atmel-samd/common-hal/audioio/AudioOut.c:341
#: ports/atmel-samd/common-hal/audioio/AudioOut.c:419
msgid "Unable to allocate buffers for signed conversion"
msgstr "Impossible d'allouer des tampons pour une conversion signée"
@ -319,43 +319,44 @@ msgstr "Uniquement 8 ou 16 bit mono avec "
msgid "sampling rate out of range"
msgstr "taux d'échantillonage hors gamme"
#: ports/atmel-samd/common-hal/audioio/AudioOut.c:69
#: ports/atmel-samd/common-hal/audioio/AudioOut.c:132
msgid "DAC already in use"
msgstr "DAC déjà utilisé"
#: ports/atmel-samd/common-hal/audioio/AudioOut.c:73
#: ports/atmel-samd/common-hal/audioio/AudioOut.c:136
msgid "Right channel unsupported"
msgstr "Canal droit non supporté"
#: ports/atmel-samd/common-hal/audioio/AudioOut.c:76
#: ports/atmel-samd/common-hal/audioio/AudioOut.c:139
#: ports/atmel-samd/common-hal/pulseio/PWMOut.c:116
#: ports/atmel-samd/common-hal/touchio/TouchIn.c:65
msgid "Invalid pin"
msgstr "Broche invalide"
#: ports/atmel-samd/common-hal/audioio/AudioOut.c:84
#: ports/atmel-samd/common-hal/audioio/AudioOut.c:147
msgid "Invalid pin for left channel"
msgstr "Broche invalide pour le canal gauche"
#: ports/atmel-samd/common-hal/audioio/AudioOut.c:88
#: ports/atmel-samd/common-hal/audioio/AudioOut.c:151
msgid "Invalid pin for right channel"
msgstr "Broche invalide pour le canal droit"
#: ports/atmel-samd/common-hal/audioio/AudioOut.c:91
#: ports/atmel-samd/common-hal/audioio/AudioOut.c:154
msgid "Cannot output both channels on the same pin"
msgstr "On ne peut mettre les deux canaux sur la même broche"
#: ports/atmel-samd/common-hal/audioio/AudioOut.c:176
#: ports/atmel-samd/common-hal/audioio/AudioOut.c:243
#: ports/atmel-samd/common-hal/pulseio/PWMOut.c:189
#: ports/atmel-samd/common-hal/pulseio/PulseOut.c:110
#: ports/nrf/common-hal/pulseio/PulseOut.c:107
msgid "All timers in use"
msgstr "Tous les timers sont utilisés"
#: ports/atmel-samd/common-hal/audioio/AudioOut.c:218
#: ports/atmel-samd/common-hal/audioio/AudioOut.c:285
msgid "All event channels in use"
msgstr "Tous les canaux d'événements sont utilisés"
#: ports/atmel-samd/common-hal/audioio/AudioOut.c:297
#: ports/atmel-samd/common-hal/audioio/AudioOut.c:375
#, c-format
msgid "Sample rate too high. It must be less than %d"
msgstr ""
@ -368,7 +369,7 @@ msgstr "Pas assez de broches disponibles"
#: ports/atmel-samd/common-hal/busio/SPI.c:132
#: ports/atmel-samd/common-hal/busio/UART.c:119
#: ports/atmel-samd/common-hal/i2cslave/I2CSlave.c:45
#: ports/nrf/common-hal/busio/I2C.c:81
#: ports/nrf/common-hal/busio/I2C.c:82
msgid "Invalid pins"
msgstr "Broche invalide"
@ -421,7 +422,7 @@ msgstr ""
#: ports/atmel-samd/common-hal/pulseio/PWMOut.c:120
#: ports/atmel-samd/common-hal/pulseio/PWMOut.c:369
#: ports/nrf/common-hal/pulseio/PWMOut.c:120
#: ports/nrf/common-hal/pulseio/PWMOut.c:119
#: ports/nrf/common-hal/pulseio/PWMOut.c:233
msgid "Invalid PWM frequency"
msgstr "Fréquence de PWM invalide"
@ -706,7 +707,7 @@ msgstr "paramètre de config. inconnu"
msgid "AnalogOut functionality not supported"
msgstr "AnalogOut non supporté"
#: ports/nrf/common-hal/busio/I2C.c:95
#: ports/nrf/common-hal/busio/I2C.c:96
#, fuzzy
msgid "All I2C peripherals are in use"
msgstr "Tous les timers sont utilisés"
@ -745,7 +746,7 @@ msgstr "busio.UART n'est pas disponible"
msgid "Can not get temperature. status: 0x%02x"
msgstr "Impossible de lire la température. status: 0x%02x"
#: ports/nrf/common-hal/pulseio/PWMOut.c:162
#: ports/nrf/common-hal/pulseio/PWMOut.c:161
#, fuzzy
msgid "All PWM peripherals are in use"
msgstr "Tous les timers sont utilisés"
@ -953,19 +954,19 @@ msgstr "mauvais code type"
msgid "bad compile mode"
msgstr "mauvais mode de compilation"
#: py/builtinimport.c:338
#: py/builtinimport.c:336
msgid "cannot perform relative import"
msgstr "ne peut pas réaliser un import relatif"
#: py/builtinimport.c:422 py/builtinimport.c:534
#: py/builtinimport.c:420 py/builtinimport.c:532
msgid "module not found"
msgstr "module introuvable"
#: py/builtinimport.c:425 py/builtinimport.c:537
#: py/builtinimport.c:423 py/builtinimport.c:535
msgid "no module named '%q'"
msgstr "pas de module '%q'"
#: py/builtinimport.c:512
#: py/builtinimport.c:510
msgid "relative import"
msgstr "import relatif"
@ -2027,7 +2028,7 @@ msgstr ""
"65536."
#: shared-bindings/audiobusio/I2SOut.c:225
#: shared-bindings/audioio/AudioOut.c:223
#: shared-bindings/audioio/AudioOut.c:226
msgid "Not playing"
msgstr "En pause"
@ -2258,7 +2259,7 @@ msgstr ""
#: shared-bindings/microcontroller/Pin.c:89
#: shared-bindings/neopixel_write/__init__.c:67
#: shared-bindings/pulseio/PulseOut.c:75
#: shared-bindings/pulseio/PulseOut.c:76
msgid "Expected a %q"
msgstr "Attendu : %q"
@ -2325,7 +2326,7 @@ msgstr "l'index doit être un entier"
msgid "Read-only"
msgstr "Lecture seule"
#: shared-bindings/pulseio/PulseOut.c:134
#: shared-bindings/pulseio/PulseOut.c:135
msgid "Array must contain halfwords (type 'H')"
msgstr "Le tableau doit contenir des halfwords (type 'H')"
@ -2354,7 +2355,7 @@ msgstr "RTC non supportée sur cette carte"
msgid "RTC calibration is not supported on this board"
msgstr "calibration de la RTC non supportée sur cette carte"
#: shared-bindings/socket/__init__.c:516 shared-module/network/__init__.c:64
#: shared-bindings/socket/__init__.c:516 shared-module/network/__init__.c:81
#, fuzzy
msgid "no available NIC"
msgstr "busio.UART n'est pas disponible"
@ -2383,15 +2384,15 @@ msgstr "time.struct_time() prend exactement 1 argument"
msgid "time.struct_time() takes a 9-sequence"
msgstr "time.struct_time() prend une séquence de longueur 9"
#: shared-bindings/time/__init__.c:169 shared-bindings/time/__init__.c:250
#: shared-bindings/time/__init__.c:169 shared-bindings/time/__init__.c:264
msgid "Tuple or struct_time argument required"
msgstr "Argument de type tuple ou struct_time nécessaire"
#: shared-bindings/time/__init__.c:174 shared-bindings/time/__init__.c:255
#: shared-bindings/time/__init__.c:174 shared-bindings/time/__init__.c:269
msgid "function takes exactly 9 arguments"
msgstr "la fonction prend exactement 9 arguments"
#: shared-bindings/time/__init__.c:226 shared-bindings/time/__init__.c:259
#: shared-bindings/time/__init__.c:240 shared-bindings/time/__init__.c:273
msgid "timestamp out of range for platform time_t"
msgstr "timestamp hors gamme pour la plateforme time_t"
@ -2522,10 +2523,10 @@ msgstr "'S' et 'O' ne sont pas des types de format supportés"
msgid "too many arguments provided with the given format"
msgstr "trop d'arguments fournis avec ce format"
#, fuzzy
#~ msgid "value_size must be power of two"
#~ msgstr "'len' doit être un multiple de 4"
#, fuzzy
#~ msgid "palette must be displayio.Palette"
#~ msgstr "la palette doit être longue de 32 octets"
#, fuzzy
#~ msgid "value_size must be power of two"
#~ msgstr "'len' doit être un multiple de 4"

View File

@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-10-11 22:08+1100\n"
"POT-Creation-Date: 2018-10-25 12:20+1100\n"
"PO-Revision-Date: 2018-10-02 16:27+0200\n"
"Last-Translator: Enrico Paganin <enrico.paganin@mail.com>\n"
"Language-Team: \n"
@ -147,7 +147,7 @@ msgstr "abort() chiamato"
msgid "invalid arguments"
msgstr "argomenti non validi"
#: lib/utils/pyexec.c:97 py/builtinimport.c:253
#: lib/utils/pyexec.c:97 py/builtinimport.c:251
msgid "script compilation not supported"
msgstr "compilazione dello scrip non suportata"
@ -305,12 +305,12 @@ msgid "Too many channels in sample."
msgstr ""
#: ports/atmel-samd/common-hal/audiobusio/I2SOut.c:305
#: ports/atmel-samd/common-hal/audioio/AudioOut.c:339
#: ports/atmel-samd/common-hal/audioio/AudioOut.c:417
msgid "No DMA channel found"
msgstr "Nessun canale DMA trovato"
#: ports/atmel-samd/common-hal/audiobusio/I2SOut.c:308
#: ports/atmel-samd/common-hal/audioio/AudioOut.c:341
#: ports/atmel-samd/common-hal/audioio/AudioOut.c:419
msgid "Unable to allocate buffers for signed conversion"
msgstr "Ipossibilitato ad allocare buffer per la conversione con segno"
@ -326,43 +326,44 @@ msgstr ""
msgid "sampling rate out of range"
msgstr "frequenza di campionamento fuori intervallo"
#: ports/atmel-samd/common-hal/audioio/AudioOut.c:69
#: ports/atmel-samd/common-hal/audioio/AudioOut.c:132
msgid "DAC already in use"
msgstr "DAC già in uso"
#: ports/atmel-samd/common-hal/audioio/AudioOut.c:73
#: ports/atmel-samd/common-hal/audioio/AudioOut.c:136
msgid "Right channel unsupported"
msgstr "Canale destro non supportato"
#: ports/atmel-samd/common-hal/audioio/AudioOut.c:76
#: ports/atmel-samd/common-hal/audioio/AudioOut.c:139
#: ports/atmel-samd/common-hal/pulseio/PWMOut.c:116
#: ports/atmel-samd/common-hal/touchio/TouchIn.c:65
msgid "Invalid pin"
msgstr "Pin non valido"
#: ports/atmel-samd/common-hal/audioio/AudioOut.c:84
#: ports/atmel-samd/common-hal/audioio/AudioOut.c:147
msgid "Invalid pin for left channel"
msgstr "Pin non valido per il canale sinistro"
#: ports/atmel-samd/common-hal/audioio/AudioOut.c:88
#: ports/atmel-samd/common-hal/audioio/AudioOut.c:151
msgid "Invalid pin for right channel"
msgstr "Pin non valido per il canale destro"
#: ports/atmel-samd/common-hal/audioio/AudioOut.c:91
#: ports/atmel-samd/common-hal/audioio/AudioOut.c:154
msgid "Cannot output both channels on the same pin"
msgstr "Impossibile dare in output entrambi i canal sullo stesso pin"
#: ports/atmel-samd/common-hal/audioio/AudioOut.c:176
#: ports/atmel-samd/common-hal/audioio/AudioOut.c:243
#: ports/atmel-samd/common-hal/pulseio/PWMOut.c:189
#: ports/atmel-samd/common-hal/pulseio/PulseOut.c:110
#: ports/nrf/common-hal/pulseio/PulseOut.c:107
msgid "All timers in use"
msgstr "Tutti i timer utilizzati"
#: ports/atmel-samd/common-hal/audioio/AudioOut.c:218
#: ports/atmel-samd/common-hal/audioio/AudioOut.c:285
msgid "All event channels in use"
msgstr "Tutti i canali eventi utilizati"
#: ports/atmel-samd/common-hal/audioio/AudioOut.c:297
#: ports/atmel-samd/common-hal/audioio/AudioOut.c:375
#, c-format
msgid "Sample rate too high. It must be less than %d"
msgstr ""
@ -376,7 +377,7 @@ msgstr "Non sono presenti abbastanza pin"
#: ports/atmel-samd/common-hal/busio/SPI.c:132
#: ports/atmel-samd/common-hal/busio/UART.c:119
#: ports/atmel-samd/common-hal/i2cslave/I2CSlave.c:45
#: ports/nrf/common-hal/busio/I2C.c:81
#: ports/nrf/common-hal/busio/I2C.c:82
msgid "Invalid pins"
msgstr "Pin non validi"
@ -429,7 +430,7 @@ msgstr ""
#: ports/atmel-samd/common-hal/pulseio/PWMOut.c:120
#: ports/atmel-samd/common-hal/pulseio/PWMOut.c:369
#: ports/nrf/common-hal/pulseio/PWMOut.c:120
#: ports/nrf/common-hal/pulseio/PWMOut.c:119
#: ports/nrf/common-hal/pulseio/PWMOut.c:233
msgid "Invalid PWM frequency"
msgstr "Frequenza PWM non valida"
@ -712,7 +713,7 @@ msgstr "parametro di configurazione sconosciuto"
msgid "AnalogOut functionality not supported"
msgstr "funzionalità AnalogOut non supportata"
#: ports/nrf/common-hal/busio/I2C.c:95
#: ports/nrf/common-hal/busio/I2C.c:96
msgid "All I2C peripherals are in use"
msgstr "Tutte le periferiche I2C sono in uso"
@ -749,7 +750,7 @@ msgstr "busio.UART non ancora implementato"
msgid "Can not get temperature. status: 0x%02x"
msgstr "Impossibile leggere la temperatura. status: 0x%02x"
#: ports/nrf/common-hal/pulseio/PWMOut.c:162
#: ports/nrf/common-hal/pulseio/PWMOut.c:161
#, fuzzy
msgid "All PWM peripherals are in use"
msgstr "Tutte le periferiche SPI sono in uso"
@ -959,19 +960,19 @@ msgstr ""
msgid "bad compile mode"
msgstr ""
#: py/builtinimport.c:338
#: py/builtinimport.c:336
msgid "cannot perform relative import"
msgstr "impossibile effettuare l'importazione relativa"
#: py/builtinimport.c:422 py/builtinimport.c:534
#: py/builtinimport.c:420 py/builtinimport.c:532
msgid "module not found"
msgstr "modulo non trovato"
#: py/builtinimport.c:425 py/builtinimport.c:537
#: py/builtinimport.c:423 py/builtinimport.c:535
msgid "no module named '%q'"
msgstr "nessun modulo chiamato '%q'"
#: py/builtinimport.c:512
#: py/builtinimport.c:510
msgid "relative import"
msgstr "importazione relativa"
@ -2029,7 +2030,7 @@ msgid "AnalogOut is only 16 bits. Value must be less than 65536."
msgstr "AnalogOut ha solo 16 bit. Il valore deve essere meno di 65536."
#: shared-bindings/audiobusio/I2SOut.c:225
#: shared-bindings/audioio/AudioOut.c:223
#: shared-bindings/audioio/AudioOut.c:226
msgid "Not playing"
msgstr "In pausa"
@ -2248,7 +2249,7 @@ msgstr "gli indirizzi sono vuoti"
#: shared-bindings/microcontroller/Pin.c:89
#: shared-bindings/neopixel_write/__init__.c:67
#: shared-bindings/pulseio/PulseOut.c:75
#: shared-bindings/pulseio/PulseOut.c:76
msgid "Expected a %q"
msgstr "Atteso un %q"
@ -2315,7 +2316,7 @@ msgstr "l'indice deve essere int"
msgid "Read-only"
msgstr "Sola lettura"
#: shared-bindings/pulseio/PulseOut.c:134
#: shared-bindings/pulseio/PulseOut.c:135
msgid "Array must contain halfwords (type 'H')"
msgstr ""
@ -2344,7 +2345,7 @@ msgstr "RTC non supportato su questa scheda"
msgid "RTC calibration is not supported on this board"
msgstr "calibrazione RTC non supportata su questa scheda"
#: shared-bindings/socket/__init__.c:516 shared-module/network/__init__.c:64
#: shared-bindings/socket/__init__.c:516 shared-module/network/__init__.c:81
#, fuzzy
msgid "no available NIC"
msgstr "busio.UART non ancora implementato"
@ -2373,15 +2374,15 @@ msgstr "time.struct_time() prende esattamente un argomento"
msgid "time.struct_time() takes a 9-sequence"
msgstr ""
#: shared-bindings/time/__init__.c:169 shared-bindings/time/__init__.c:250
#: shared-bindings/time/__init__.c:169 shared-bindings/time/__init__.c:264
msgid "Tuple or struct_time argument required"
msgstr "Tupla o struct_time richiesto come argomento"
#: shared-bindings/time/__init__.c:174 shared-bindings/time/__init__.c:255
#: shared-bindings/time/__init__.c:174 shared-bindings/time/__init__.c:269
msgid "function takes exactly 9 arguments"
msgstr "la funzione prende esattamente 9 argomenti"
#: shared-bindings/time/__init__.c:226 shared-bindings/time/__init__.c:259
#: shared-bindings/time/__init__.c:240 shared-bindings/time/__init__.c:273
msgid "timestamp out of range for platform time_t"
msgstr "timestamp è fuori intervallo per il time_t della piattaforma"

View File

@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-10-11 22:08+1100\n"
"POT-Creation-Date: 2018-10-25 12:20+1100\n"
"PO-Revision-Date: 2018-10-02 21:14-0000\n"
"Last-Translator: \n"
"Language-Team: \n"
@ -147,7 +147,7 @@ msgstr "abort() chamado"
msgid "invalid arguments"
msgstr "argumentos inválidos"
#: lib/utils/pyexec.c:97 py/builtinimport.c:253
#: lib/utils/pyexec.c:97 py/builtinimport.c:251
msgid "script compilation not supported"
msgstr "compilação de script não suportada"
@ -291,12 +291,12 @@ msgid "Too many channels in sample."
msgstr "Muitos canais na amostra."
#: ports/atmel-samd/common-hal/audiobusio/I2SOut.c:305
#: ports/atmel-samd/common-hal/audioio/AudioOut.c:339
#: ports/atmel-samd/common-hal/audioio/AudioOut.c:417
msgid "No DMA channel found"
msgstr "Nenhum canal DMA encontrado"
#: ports/atmel-samd/common-hal/audiobusio/I2SOut.c:308
#: ports/atmel-samd/common-hal/audioio/AudioOut.c:341
#: ports/atmel-samd/common-hal/audioio/AudioOut.c:419
msgid "Unable to allocate buffers for signed conversion"
msgstr "Não é possível alocar buffers para conversão assinada"
@ -312,43 +312,44 @@ msgstr ""
msgid "sampling rate out of range"
msgstr "Taxa de amostragem fora do intervalo"
#: ports/atmel-samd/common-hal/audioio/AudioOut.c:69
#: ports/atmel-samd/common-hal/audioio/AudioOut.c:132
msgid "DAC already in use"
msgstr "DAC em uso"
#: ports/atmel-samd/common-hal/audioio/AudioOut.c:73
#: ports/atmel-samd/common-hal/audioio/AudioOut.c:136
msgid "Right channel unsupported"
msgstr "Canal direito não suportado"
#: ports/atmel-samd/common-hal/audioio/AudioOut.c:76
#: ports/atmel-samd/common-hal/audioio/AudioOut.c:139
#: ports/atmel-samd/common-hal/pulseio/PWMOut.c:116
#: ports/atmel-samd/common-hal/touchio/TouchIn.c:65
msgid "Invalid pin"
msgstr "Pino inválido"
#: ports/atmel-samd/common-hal/audioio/AudioOut.c:84
#: ports/atmel-samd/common-hal/audioio/AudioOut.c:147
msgid "Invalid pin for left channel"
msgstr "Pino inválido para canal esquerdo"
#: ports/atmel-samd/common-hal/audioio/AudioOut.c:88
#: ports/atmel-samd/common-hal/audioio/AudioOut.c:151
msgid "Invalid pin for right channel"
msgstr "Pino inválido para canal direito"
#: ports/atmel-samd/common-hal/audioio/AudioOut.c:91
#: ports/atmel-samd/common-hal/audioio/AudioOut.c:154
msgid "Cannot output both channels on the same pin"
msgstr ""
#: ports/atmel-samd/common-hal/audioio/AudioOut.c:176
#: ports/atmel-samd/common-hal/audioio/AudioOut.c:243
#: ports/atmel-samd/common-hal/pulseio/PWMOut.c:189
#: ports/atmel-samd/common-hal/pulseio/PulseOut.c:110
#: ports/nrf/common-hal/pulseio/PulseOut.c:107
msgid "All timers in use"
msgstr "Todos os temporizadores em uso"
#: ports/atmel-samd/common-hal/audioio/AudioOut.c:218
#: ports/atmel-samd/common-hal/audioio/AudioOut.c:285
msgid "All event channels in use"
msgstr "Todos os canais de eventos em uso"
#: ports/atmel-samd/common-hal/audioio/AudioOut.c:297
#: ports/atmel-samd/common-hal/audioio/AudioOut.c:375
#, c-format
msgid "Sample rate too high. It must be less than %d"
msgstr "Taxa de amostragem muito alta. Deve ser menor que %d"
@ -361,7 +362,7 @@ msgstr "Não há pinos suficientes disponíveis"
#: ports/atmel-samd/common-hal/busio/SPI.c:132
#: ports/atmel-samd/common-hal/busio/UART.c:119
#: ports/atmel-samd/common-hal/i2cslave/I2CSlave.c:45
#: ports/nrf/common-hal/busio/I2C.c:81
#: ports/nrf/common-hal/busio/I2C.c:82
msgid "Invalid pins"
msgstr "Pinos inválidos"
@ -413,7 +414,7 @@ msgstr ""
#: ports/atmel-samd/common-hal/pulseio/PWMOut.c:120
#: ports/atmel-samd/common-hal/pulseio/PWMOut.c:369
#: ports/nrf/common-hal/pulseio/PWMOut.c:120
#: ports/nrf/common-hal/pulseio/PWMOut.c:119
#: ports/nrf/common-hal/pulseio/PWMOut.c:233
msgid "Invalid PWM frequency"
msgstr "Frequência PWM inválida"
@ -695,7 +696,7 @@ msgstr "parâmetro configuração desconhecido"
msgid "AnalogOut functionality not supported"
msgstr "Funcionalidade AnalogOut não suportada"
#: ports/nrf/common-hal/busio/I2C.c:95
#: ports/nrf/common-hal/busio/I2C.c:96
msgid "All I2C peripherals are in use"
msgstr "Todos os periféricos I2C estão em uso"
@ -731,7 +732,7 @@ msgstr "busio.UART não disponível"
msgid "Can not get temperature. status: 0x%02x"
msgstr "Não pode obter a temperatura. status: 0x%02x"
#: ports/nrf/common-hal/pulseio/PWMOut.c:162
#: ports/nrf/common-hal/pulseio/PWMOut.c:161
#, fuzzy
msgid "All PWM peripherals are in use"
msgstr "Todos os temporizadores em uso"
@ -938,19 +939,19 @@ msgstr ""
msgid "bad compile mode"
msgstr ""
#: py/builtinimport.c:338
#: py/builtinimport.c:336
msgid "cannot perform relative import"
msgstr ""
#: py/builtinimport.c:422 py/builtinimport.c:534
#: py/builtinimport.c:420 py/builtinimport.c:532
msgid "module not found"
msgstr ""
#: py/builtinimport.c:425 py/builtinimport.c:537
#: py/builtinimport.c:423 py/builtinimport.c:535
msgid "no module named '%q'"
msgstr ""
#: py/builtinimport.c:512
#: py/builtinimport.c:510
msgid "relative import"
msgstr ""
@ -1998,7 +1999,7 @@ msgid "AnalogOut is only 16 bits. Value must be less than 65536."
msgstr ""
#: shared-bindings/audiobusio/I2SOut.c:225
#: shared-bindings/audioio/AudioOut.c:223
#: shared-bindings/audioio/AudioOut.c:226
msgid "Not playing"
msgstr ""
@ -2208,7 +2209,7 @@ msgstr ""
#: shared-bindings/microcontroller/Pin.c:89
#: shared-bindings/neopixel_write/__init__.c:67
#: shared-bindings/pulseio/PulseOut.c:75
#: shared-bindings/pulseio/PulseOut.c:76
msgid "Expected a %q"
msgstr "Esperado um"
@ -2270,7 +2271,7 @@ msgstr "index deve ser int"
msgid "Read-only"
msgstr "Somente leitura"
#: shared-bindings/pulseio/PulseOut.c:134
#: shared-bindings/pulseio/PulseOut.c:135
msgid "Array must contain halfwords (type 'H')"
msgstr "Array deve conter meias palavras (tipo 'H')"
@ -2299,7 +2300,7 @@ msgstr "O RTC não é suportado nesta placa"
msgid "RTC calibration is not supported on this board"
msgstr "A calibração RTC não é suportada nesta placa"
#: shared-bindings/socket/__init__.c:516 shared-module/network/__init__.c:64
#: shared-bindings/socket/__init__.c:516 shared-module/network/__init__.c:81
msgid "no available NIC"
msgstr ""
@ -2327,15 +2328,15 @@ msgstr ""
msgid "time.struct_time() takes a 9-sequence"
msgstr ""
#: shared-bindings/time/__init__.c:169 shared-bindings/time/__init__.c:250
#: shared-bindings/time/__init__.c:169 shared-bindings/time/__init__.c:264
msgid "Tuple or struct_time argument required"
msgstr "Tuple or struct_time argument required"
#: shared-bindings/time/__init__.c:174 shared-bindings/time/__init__.c:255
#: shared-bindings/time/__init__.c:174 shared-bindings/time/__init__.c:269
msgid "function takes exactly 9 arguments"
msgstr "função leva exatamente 9 argumentos"
#: shared-bindings/time/__init__.c:226 shared-bindings/time/__init__.c:259
#: shared-bindings/time/__init__.c:240 shared-bindings/time/__init__.c:273
msgid "timestamp out of range for platform time_t"
msgstr "timestamp fora do intervalo para a plataforma time_t"

View File

@ -28,6 +28,7 @@ STATIC const mp_rom_map_elem_t board_global_dict_table[] = {
{ MP_ROM_QSTR(MP_QSTR_GREEN_LED), MP_ROM_PTR(&pin_PA06) },
{ MP_ROM_QSTR(MP_QSTR_D9), MP_ROM_PTR(&pin_PA07) },
{ MP_ROM_QSTR(MP_QSTR_VOLTAGE_MONITOR), MP_ROM_PTR(&pin_PA07) },
{ MP_ROM_QSTR(MP_QSTR_BATTERY), MP_ROM_PTR(&pin_PA07) },
{ MP_ROM_QSTR(MP_QSTR_D10), MP_ROM_PTR(&pin_PA18) },
{ MP_ROM_QSTR(MP_QSTR_D11), MP_ROM_PTR(&pin_PA16) },
{ MP_ROM_QSTR(MP_QSTR_D12), MP_ROM_PTR(&pin_PA19) },

View File

@ -22,6 +22,7 @@ STATIC const mp_rom_map_elem_t board_global_dict_table[] = {
{ MP_ROM_QSTR(MP_QSTR_D6), MP_ROM_PTR(&pin_PA20) },
{ MP_ROM_QSTR(MP_QSTR_D9), MP_ROM_PTR(&pin_PA07) },
{ MP_ROM_QSTR(MP_QSTR_VOLTAGE_MONITOR), MP_ROM_PTR(&pin_PA07) },
{ MP_ROM_QSTR(MP_QSTR_BATTERY), MP_ROM_PTR(&pin_PA07) },
{ MP_ROM_QSTR(MP_QSTR_D10), MP_ROM_PTR(&pin_PA18) },
{ MP_ROM_QSTR(MP_QSTR_D11), MP_ROM_PTR(&pin_PA16) },
{ MP_ROM_QSTR(MP_QSTR_D12), MP_ROM_PTR(&pin_PA19) },

View File

@ -22,6 +22,7 @@ STATIC const mp_rom_map_elem_t board_global_dict_table[] = {
{ MP_ROM_QSTR(MP_QSTR_D6), MP_ROM_PTR(&pin_PA20) },
{ MP_ROM_QSTR(MP_QSTR_D9), MP_ROM_PTR(&pin_PA07) },
{ MP_ROM_QSTR(MP_QSTR_VOLTAGE_MONITOR), MP_ROM_PTR(&pin_PA07) },
{ MP_ROM_QSTR(MP_QSTR_BATTERY), MP_ROM_PTR(&pin_PA07) },
{ MP_ROM_QSTR(MP_QSTR_D10), MP_ROM_PTR(&pin_PA18) },
{ MP_ROM_QSTR(MP_QSTR_D11), MP_ROM_PTR(&pin_PA16) },
{ MP_ROM_QSTR(MP_QSTR_D12), MP_ROM_PTR(&pin_PA19) },

View File

@ -22,6 +22,7 @@ STATIC const mp_rom_map_elem_t board_global_dict_table[] = {
{ MP_ROM_QSTR(MP_QSTR_D6), MP_ROM_PTR(&pin_PA20) },
{ MP_ROM_QSTR(MP_QSTR_D9), MP_ROM_PTR(&pin_PA07) },
{ MP_ROM_QSTR(MP_QSTR_VOLTAGE_MONITOR), MP_ROM_PTR(&pin_PA07) },
{ MP_ROM_QSTR(MP_QSTR_BATTERY), MP_ROM_PTR(&pin_PA07) },
{ MP_ROM_QSTR(MP_QSTR_D10), MP_ROM_PTR(&pin_PA18) },
{ MP_ROM_QSTR(MP_QSTR_D11), MP_ROM_PTR(&pin_PA16) },
{ MP_ROM_QSTR(MP_QSTR_D12), MP_ROM_PTR(&pin_PA19) },

View File

@ -22,6 +22,7 @@ STATIC const mp_rom_map_elem_t board_global_dict_table[] = {
{ MP_ROM_QSTR(MP_QSTR_D6), MP_ROM_PTR(&pin_PA20) },
{ MP_ROM_QSTR(MP_QSTR_D9), MP_ROM_PTR(&pin_PA07) },
{ MP_ROM_QSTR(MP_QSTR_VOLTAGE_MONITOR), MP_ROM_PTR(&pin_PA07) },
{ MP_ROM_QSTR(MP_QSTR_BATTERY), MP_ROM_PTR(&pin_PA07) },
{ MP_ROM_QSTR(MP_QSTR_D10), MP_ROM_PTR(&pin_PA18) },
{ MP_ROM_QSTR(MP_QSTR_D11), MP_ROM_PTR(&pin_PA16) },
{ MP_ROM_QSTR(MP_QSTR_D12), MP_ROM_PTR(&pin_PA19) },

View File

@ -22,6 +22,7 @@ STATIC const mp_rom_map_elem_t board_global_dict_table[] = {
{ MP_ROM_QSTR(MP_QSTR_D6), MP_ROM_PTR(&pin_PA20) },
{ MP_ROM_QSTR(MP_QSTR_D9), MP_ROM_PTR(&pin_PA07) },
{ MP_ROM_QSTR(MP_QSTR_VOLTAGE_MONITOR), MP_ROM_PTR(&pin_PA07) },
{ MP_ROM_QSTR(MP_QSTR_BATTERY), MP_ROM_PTR(&pin_PA07) },
{ MP_ROM_QSTR(MP_QSTR_D10), MP_ROM_PTR(&pin_PA18) },
{ MP_ROM_QSTR(MP_QSTR_D11), MP_ROM_PTR(&pin_PA16) },
{ MP_ROM_QSTR(MP_QSTR_D12), MP_ROM_PTR(&pin_PA19) },

View File

@ -22,6 +22,7 @@ STATIC const mp_rom_map_elem_t board_global_dict_table[] = {
{ MP_ROM_QSTR(MP_QSTR_D6), MP_ROM_PTR(&pin_PA20) },
{ MP_ROM_QSTR(MP_QSTR_D9), MP_ROM_PTR(&pin_PA07) },
{ MP_ROM_QSTR(MP_QSTR_VOLTAGE_MONITOR), MP_ROM_PTR(&pin_PA07) },
{ MP_ROM_QSTR(MP_QSTR_BATTERY), MP_ROM_PTR(&pin_PA07) },
{ MP_ROM_QSTR(MP_QSTR_D10), MP_ROM_PTR(&pin_PA18) },
{ MP_ROM_QSTR(MP_QSTR_D11), MP_ROM_PTR(&pin_PA16) },
{ MP_ROM_QSTR(MP_QSTR_D12), MP_ROM_PTR(&pin_PA19) },

View File

@ -28,6 +28,7 @@ STATIC const mp_rom_map_elem_t board_global_dict_table[] = {
{ MP_ROM_QSTR(MP_QSTR_D13), MP_ROM_PTR(&pin_PA23) },
{ MP_ROM_QSTR(MP_QSTR_NEOPIXEL), MP_ROM_PTR(&pin_PB03) },
{ MP_ROM_QSTR(MP_QSTR_VOLTAGE_MONITOR), MP_ROM_PTR(&pin_PB01) },
{ MP_ROM_QSTR(MP_QSTR_BATTERY), MP_ROM_PTR(&pin_PB01) },
{ MP_ROM_QSTR(MP_QSTR_I2C), MP_ROM_PTR(&board_i2c_obj) },
{ MP_ROM_QSTR(MP_QSTR_SPI), MP_ROM_PTR(&board_spi_obj) },
{ MP_ROM_QSTR(MP_QSTR_UART), MP_ROM_PTR(&board_uart_obj) },

View File

@ -0,0 +1,38 @@
/*
* This file is part of the MicroPython project, http://micropython.org/
*
* The MIT License (MIT)
*
* Copyright (c) 2017 Andrés Sabas for Electronic Cats
*
* 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,36 @@
#define MICROPY_HW_BOARD_NAME "Meow Meow"
#define MICROPY_HW_MCU_NAME "samd21g18"
// These are pins not to reset.
// PA24 and PA25 are USB.
#define MICROPY_PORT_A (PORT_PA24 | PORT_PA25)
#define MICROPY_PORT_B (0)
#define MICROPY_PORT_C (0)
#include "internal_flash.h"
// If you change this, then make sure to update the linker scripts as well to
// make sure you don't overwrite code.
#define CIRCUITPY_INTERNAL_NVM_SIZE 0
#define BOARD_FLASH_SIZE (0x00040000 - 0x2000 - 0x010000)
#define CALIBRATE_CRYSTALLESS 1
// Explanation of how a user got into safe mode.
#define BOARD_USER_SAFE_MODE_ACTION "pressing both buttons at start up"
#define DEFAULT_I2C_BUS_SCL (&pin_PA01)
#define DEFAULT_I2C_BUS_SDA (&pin_PA00)
#define DEFAULT_SPI_BUS_SCK (&pin_PA15)
#define DEFAULT_SPI_BUS_MOSI (&pin_PA14)
#define DEFAULT_SPI_BUS_MISO (&pin_PA12)
#define DEFAULT_UART_BUS_RX (&pin_PA11)
#define DEFAULT_UART_BUS_TX (&pin_PA10)
// USB is always used internally so skip the pin objects for it.
#define IGNORE_PIN_PA24 1
#define IGNORE_PIN_PA25 1

View File

@ -0,0 +1,11 @@
LD_FILE = boards/samd21x18-bootloader.ld
USB_VID = 0xBAB1
USB_PID = 0x1209
USB_PRODUCT = "Meow Meow"
USB_MANUFACTURER = "Electronic Cats"
INTERNAL_FLASH_FILESYSTEM = 1
LONGINT_IMPL = NONE
CHIP_VARIANT = SAMD21G18A
CHIP_FAMILY = samd21

View File

@ -0,0 +1,43 @@
#include "shared-bindings/board/__init__.h"
#include "board_busses.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_PA03) },
{ MP_ROM_QSTR(MP_QSTR_A2), MP_ROM_PTR(&pin_PA04) },
{ MP_ROM_QSTR(MP_QSTR_A3), MP_ROM_PTR(&pin_PA05) },
{ MP_ROM_QSTR(MP_QSTR_A4), MP_ROM_PTR(&pin_PA06) },
{ MP_ROM_QSTR(MP_QSTR_A5), MP_ROM_PTR(&pin_PA07) },
{ MP_ROM_QSTR(MP_QSTR_A6), MP_ROM_PTR(&pin_PB02) },
{ MP_ROM_QSTR(MP_QSTR_A7), MP_ROM_PTR(&pin_PB03) },
{ MP_ROM_QSTR(MP_QSTR_A8), MP_ROM_PTR(&pin_PB08) },
{ MP_ROM_QSTR(MP_QSTR_A9), MP_ROM_PTR(&pin_PB09) },
{ MP_ROM_QSTR(MP_QSTR_A10), MP_ROM_PTR(&pin_PA11) },
{ MP_ROM_QSTR(MP_QSTR_A11), MP_ROM_PTR(&pin_PA09) },
{ MP_ROM_QSTR(MP_QSTR_D0), MP_ROM_PTR(&pin_PA11) },
{ MP_ROM_QSTR(MP_QSTR_RX), MP_ROM_PTR(&pin_PA11) },
{ MP_ROM_QSTR(MP_QSTR_D1), MP_ROM_PTR(&pin_PA10) },
{ MP_ROM_QSTR(MP_QSTR_TX), MP_ROM_PTR(&pin_PA10) },
{ MP_ROM_QSTR(MP_QSTR_D2), MP_ROM_PTR(&pin_PB02) },
{ MP_ROM_QSTR(MP_QSTR_D3), MP_ROM_PTR(&pin_PB03) },
{ MP_ROM_QSTR(MP_QSTR_D4), MP_ROM_PTR(&pin_PA14) },
{ MP_ROM_QSTR(MP_QSTR_D5), MP_ROM_PTR(&pin_PA05) },
{ MP_ROM_QSTR(MP_QSTR_D6), MP_ROM_PTR(&pin_PA15) },
{ MP_ROM_QSTR(MP_QSTR_D7), MP_ROM_PTR(&pin_PB22) },
{ MP_ROM_QSTR(MP_QSTR_D8), MP_ROM_PTR(&pin_PA06) },
{ MP_ROM_QSTR(MP_QSTR_D9), MP_ROM_PTR(&pin_PA07) },
{ MP_ROM_QSTR(MP_QSTR_D10), MP_ROM_PTR(&pin_PA30) },
{ MP_ROM_QSTR(MP_QSTR_D11), MP_ROM_PTR(&pin_PA31) },
{ MP_ROM_QSTR(MP_QSTR_D12), MP_ROM_PTR(&pin_PA02) },
{ MP_ROM_QSTR(MP_QSTR_D13), MP_ROM_PTR(&pin_PB23) },
{ MP_ROM_QSTR(MP_QSTR_SDA), MP_ROM_PTR(&pin_PA00) },
{ MP_ROM_QSTR(MP_QSTR_SCL), MP_ROM_PTR(&pin_PA01) },
{ MP_ROM_QSTR(MP_QSTR_SCK), MP_ROM_PTR(&pin_PA15) },
{ MP_ROM_QSTR(MP_QSTR_MOSI), MP_ROM_PTR(&pin_PA14) },
{ MP_ROM_QSTR(MP_QSTR_MISO), MP_ROM_PTR(&pin_PA12) },
{ MP_ROM_QSTR(MP_QSTR_I2C), MP_ROM_PTR(&board_i2c_obj) },
{ MP_ROM_QSTR(MP_QSTR_SPI), MP_ROM_PTR(&board_spi_obj) },
{ MP_ROM_QSTR(MP_QSTR_UART), MP_ROM_PTR(&board_uart_obj) },
};
MP_DEFINE_CONST_DICT(board_module_globals, board_global_dict_table);

View File

@ -3,7 +3,7 @@
#define CIRCUITPY_MCU_FAMILY samd51
// This is for a purple prototype which is Rev C
// This is for Rev D
#define MICROPY_HW_APA102_MOSI (&pin_PA01)
#define MICROPY_HW_APA102_SCK (&pin_PA00)
@ -28,7 +28,7 @@
#include "external_flash/devices.h"
#define EXTERNAL_FLASH_DEVICE_COUNT 1
#define EXTERNAL_FLASH_DEVICES W25Q128JV_SQ
#define EXTERNAL_FLASH_DEVICES GD25Q64C
#include "external_flash/external_flash.h"

View File

@ -15,6 +15,9 @@ STATIC const mp_rom_map_elem_t board_global_dict_table[] = {
{ MP_OBJ_NEW_QSTR(MP_QSTR_SDA), MP_ROM_PTR(&pin_PB08) },
{ MP_OBJ_NEW_QSTR(MP_QSTR_SCL), MP_ROM_PTR(&pin_PB09) },
{ MP_OBJ_NEW_QSTR(MP_QSTR_ACCELEROMETER_SDA), MP_ROM_PTR(&pin_PA12) },
{ MP_OBJ_NEW_QSTR(MP_QSTR_ACCELEROMETER_SCL), MP_ROM_PTR(&pin_PA13) },
// Key Grid columns
{ MP_OBJ_NEW_QSTR(MP_QSTR_COL0), MP_ROM_PTR(&pin_PA14) },
{ MP_OBJ_NEW_QSTR(MP_QSTR_COL1), MP_ROM_PTR(&pin_PA15) },

View File

@ -138,16 +138,5 @@ void common_hal_analogio_analogout_set_value(analogio_analogout_obj_t *self,
}
void analogout_reset(void) {
#if defined(SAMD21) && !defined(PIN_PA02)
return;
#endif
#ifdef SAMD21
while (DAC->STATUS.reg & DAC_STATUS_SYNCBUSY) {}
#endif
#ifdef SAMD51
while (DAC->SYNCBUSY.reg & DAC_SYNCBUSY_SWRST) {}
#endif
DAC->CTRLA.reg |= DAC_CTRLA_SWRST;
// TODO(tannewt): Turn off the DAC clocks to save power.
// AudioOut resets the DAC in case its been used for audio which requires special handling.
}

View File

@ -33,6 +33,7 @@
#include "py/runtime.h"
#include "common-hal/audioio/AudioOut.h"
#include "shared-bindings/audioio/AudioOut.h"
#include "shared-bindings/microcontroller/__init__.h"
#include "shared-bindings/microcontroller/Pin.h"
#include "supervisor/shared/translate.h"
@ -52,11 +53,73 @@
#include "samd/pins.h"
#include "samd/timers.h"
#ifdef SAMD21
static void ramp_value(uint16_t start, uint16_t end) {
start = DAC->DATA.reg;
int32_t diff = (int32_t) end - start;
int32_t step = 49;
int32_t steps = diff / step;
if (diff < 0) {
steps = -steps;
step = -step;
}
for (int32_t i = 0; i < steps; i++) {
uint32_t value = start + step * i;
DAC->DATA.reg = value;
DAC->DATABUF.reg = value;
common_hal_mcu_delay_us(50);
#ifdef MICROPY_VM_HOOK_LOOP
MICROPY_VM_HOOK_LOOP
#endif
}
}
#endif
#ifdef SAMD51
static void ramp_value(uint16_t start, uint16_t end) {
int32_t diff = (int32_t) end - start;
int32_t step = 49;
int32_t steps = diff / step;
if (diff < 0) {
steps = -steps;
step = -step;
}
for (int32_t i = 0; i < steps; i++) {
uint16_t value = start + step * i;
DAC->DATA[0].reg = value;
DAC->DATABUF[0].reg = value;
DAC->DATA[1].reg = value;
DAC->DATABUF[1].reg = value;
common_hal_mcu_delay_us(50);
#ifdef MICROPY_VM_HOOK_LOOP
MICROPY_VM_HOOK_LOOP
#endif
}
}
#endif
void audioout_reset(void) {
#if defined(SAMD21) && !defined(PIN_PA02)
return;
#endif
#ifdef SAMD21
while (DAC->STATUS.reg & DAC_STATUS_SYNCBUSY) {}
#endif
#ifdef SAMD51
while (DAC->SYNCBUSY.reg & DAC_SYNCBUSY_SWRST) {}
#endif
if (DAC->CTRLA.bit.ENABLE) {
ramp_value(0x8000, 0);
}
DAC->CTRLA.reg |= DAC_CTRLA_SWRST;
// TODO(tannewt): Turn off the DAC clocks to save power.
}
void common_hal_audioio_audioout_construct(audioio_audioout_obj_t* self,
const mcu_pin_obj_t* left_channel, const mcu_pin_obj_t* right_channel) {
const mcu_pin_obj_t* left_channel, const mcu_pin_obj_t* right_channel, uint16_t quiescent_value) {
#ifdef SAMD51
bool dac_clock_enabled = hri_mclk_get_APBDMASK_DAC_bit(MCLK);
#endif
@ -94,12 +157,10 @@ void common_hal_audioio_audioout_construct(audioio_audioout_obj_t* self,
if (right_channel != NULL) {
claim_pin(right_channel);
self->right_channel = right_channel;
gpio_set_pin_function(self->right_channel->number, GPIO_PIN_FUNCTION_B);
audio_dma_init(&self->right_dma);
}
#endif
self->left_channel = left_channel;
gpio_set_pin_function(self->left_channel->number, GPIO_PIN_FUNCTION_B);
audio_dma_init(&self->left_dma);
#ifdef SAMD51
@ -118,6 +179,10 @@ void common_hal_audioio_audioout_construct(audioio_audioout_obj_t* self,
DAC->CTRLA.bit.SWRST = 1;
while (DAC->CTRLA.bit.SWRST == 1) {}
// Make sure there are no outstanding access errors. (Reading DATA can cause this.)
#ifdef SAMD51
PAC->INTFLAGD.reg = PAC_INTFLAGD_DAC;
#endif
bool channel0_enabled = true;
#ifdef SAMD51
@ -159,6 +224,8 @@ void common_hal_audioio_audioout_construct(audioio_audioout_obj_t* self,
#endif
#ifdef SAMD51
while (DAC->SYNCBUSY.bit.ENABLE == 1) {}
while (channel0_enabled && DAC->STATUS.bit.READY0 == 0) {}
while (channel1_enabled && DAC->STATUS.bit.READY1 == 0) {}
#endif
// Use a timer to coordinate when DAC conversions occur.
@ -220,13 +287,21 @@ void common_hal_audioio_audioout_construct(audioio_audioout_obj_t* self,
#ifdef SAMD51
connect_event_user_to_channel(EVSYS_ID_USER_DAC_START_1, channel);
if (right_channel != NULL) {
gpio_set_pin_function(self->right_channel->number, GPIO_PIN_FUNCTION_B);
}
#define EVSYS_ID_USER_DAC_START EVSYS_ID_USER_DAC_START_0
#endif
connect_event_user_to_channel(EVSYS_ID_USER_DAC_START, channel);
gpio_set_pin_function(self->left_channel->number, GPIO_PIN_FUNCTION_B);
init_async_event_channel(channel, tc_gen_id);
self->tc_to_dac_event_channel = channel;
// Ramp the DAC up.
self->quiescent_value = quiescent_value;
ramp_value(0, quiescent_value);
// Leave the DMA setup to playback.
}
@ -239,6 +314,9 @@ void common_hal_audioio_audioout_deinit(audioio_audioout_obj_t* self) {
return;
}
// Ramp the DAC down.
ramp_value(self->quiescent_value, 0);
DAC->CTRLA.bit.ENABLE = 0;
#ifdef SAMD21
while (DAC->STATUS.bit.SYNCBUSY == 1) {}
@ -381,6 +459,9 @@ void common_hal_audioio_audioout_stop(audioio_audioout_obj_t* self) {
#ifdef SAMD51
audio_dma_stop(&self->right_dma);
#endif
// Ramp the DAC to default. The start is ignored when the current value can be readback.
// Otherwise, we just set it immediately.
ramp_value(self->quiescent_value, self->quiescent_value);
}
bool common_hal_audioio_audioout_get_playing(audioio_audioout_obj_t* self) {

View File

@ -44,6 +44,7 @@ typedef struct {
uint8_t tc_to_dac_event_channel;
bool playing;
uint16_t quiescent_value;
} audioio_audioout_obj_t;
void audioout_reset(void);

View File

@ -20,8 +20,6 @@
#define MICROPY_COMP_CONST (1)
#define MICROPY_COMP_DOUBLE_TUPLE_ASSIGN (1)
#define MICROPY_COMP_TRIPLE_TUPLE_ASSIGN (1)
// Turn off for consistency
#define MICROPY_CPYTHON_COMPAT (0)
#define MICROPY_MEM_STATS (0)
#define MICROPY_DEBUG_PRINTERS (0)
#define MICROPY_ENABLE_GC (1)
@ -57,7 +55,6 @@
#define MICROPY_PY_DESCRIPTORS (1)
#define MICROPY_PY_MATH (0)
#define MICROPY_PY_CMATH (0)
#define MICROPY_PY_IO (0)
#define MICROPY_PY_URANDOM (0)
#define MICROPY_PY_URANDOM_EXTRA_FUNCS (0)
#define MICROPY_PY_STRUCT (0)
@ -96,7 +93,6 @@
#define MICROPY_VFS (1)
#define MICROPY_VFS_FAT (1)
#define MICROPY_PY_MACHINE (1)
#define MICROPY_MODULE_WEAK_LINKS (0)
#define MICROPY_REPL_AUTO_INDENT (1)
#define MICROPY_HW_ENABLE_DAC (1)
#define MICROPY_ENABLE_FINALISER (1)
@ -155,15 +151,33 @@ typedef long mp_off_t;
#include "include/sam.h"
#ifdef SAMD21
#define CIRCUITPY_MCU_FAMILY samd21
#define CIRCUITPY_MCU_FAMILY samd21
#define MICROPY_PY_SYS_PLATFORM "Atmel SAMD21"
#define PORT_HEAP_SIZE (16384 + 4096)
#define PORT_HEAP_SIZE (16384 + 4096)
#define CIRCUITPY_DEFAULT_STACK_SIZE 4096
#define MICROPY_CPYTHON_COMPAT (0)
#define MICROPY_MODULE_WEAK_LINKS (0)
#define MICROPY_PY_BUILTINS_NOTIMPLEMENTED (0)
#define MICROPY_PY_COLLECTIONS_ORDEREDDICT (0)
#define MICROPY_PY_FUNCTION_ATTRS (0)
#define MICROPY_PY_IO (0)
#define MICROPY_PY_REVERSE_SPECIAL_METHODS (0)
#define MICROPY_PY_SYS_EXC_INFO (0)
#endif
#ifdef SAMD51
#define CIRCUITPY_MCU_FAMILY samd51
#define CIRCUITPY_MCU_FAMILY samd51
#define MICROPY_PY_SYS_PLATFORM "MicroChip SAMD51"
#define PORT_HEAP_SIZE (0x20000) // 128KiB
#define PORT_HEAP_SIZE (0x20000) // 128KiB
#define CIRCUITPY_DEFAULT_STACK_SIZE 8192
#define MICROPY_CPYTHON_COMPAT (1)
#define MICROPY_MODULE_WEAK_LINKS (1)
#define MICROPY_PY_BUILTINS_NOTIMPLEMENTED (1)
#define MICROPY_PY_COLLECTIONS_ORDEREDDICT (1)
#define MICROPY_PY_FUNCTION_ATTRS (1)
#define MICROPY_PY_IO (1)
#define MICROPY_PY_REVERSE_SPECIAL_METHODS (1)
#define MICROPY_PY_SYS_EXC_INFO (1)
#endif
#ifdef LONGINT_IMPL_NONE
@ -326,6 +340,34 @@ extern const struct _mp_obj_module_t wiznet_module;
{ MP_OBJ_NEW_QSTR(MP_QSTR_supervisor), (mp_obj_t)&supervisor_module }, \
{ MP_OBJ_NEW_QSTR(MP_QSTR_time), (mp_obj_t)&time_module }, \
{ MP_OBJ_NEW_QSTR(MP_QSTR_usb_hid),(mp_obj_t)&usb_hid_module },
#elif MICROPY_MODULE_WEAK_LINKS
#define MICROPY_PORT_BUILTIN_MODULES \
{ MP_OBJ_NEW_QSTR(MP_QSTR_analogio), (mp_obj_t)&analogio_module }, \
{ MP_OBJ_NEW_QSTR(MP_QSTR_board), (mp_obj_t)&board_module }, \
{ MP_OBJ_NEW_QSTR(MP_QSTR_busio), (mp_obj_t)&busio_module }, \
{ MP_OBJ_NEW_QSTR(MP_QSTR_digitalio), (mp_obj_t)&digitalio_module }, \
{ MP_OBJ_NEW_QSTR(MP_QSTR_microcontroller), (mp_obj_t)&microcontroller_module }, \
{ MP_OBJ_NEW_QSTR(MP_QSTR_neopixel_write),(mp_obj_t)&neopixel_write_module }, \
{ MP_OBJ_NEW_QSTR(MP_QSTR__os), (mp_obj_t)&os_module }, \
{ MP_OBJ_NEW_QSTR(MP_QSTR_pulseio), (mp_obj_t)&pulseio_module }, \
{ MP_OBJ_NEW_QSTR(MP_QSTR_random), (mp_obj_t)&random_module }, \
{ MP_OBJ_NEW_QSTR(MP_QSTR_rtc), (mp_obj_t)&rtc_module }, \
{ MP_OBJ_NEW_QSTR(MP_QSTR_samd),(mp_obj_t)&samd_module }, \
{ MP_OBJ_NEW_QSTR(MP_QSTR_storage), (mp_obj_t)&storage_module }, \
{ MP_OBJ_NEW_QSTR(MP_QSTR_struct), (mp_obj_t)&struct_module }, \
{ MP_OBJ_NEW_QSTR(MP_QSTR_supervisor), (mp_obj_t)&supervisor_module }, \
{ MP_OBJ_NEW_QSTR(MP_QSTR_math), (mp_obj_t)&math_module }, \
{ MP_OBJ_NEW_QSTR(MP_QSTR__time), (mp_obj_t)&time_module }, \
{ MP_OBJ_NEW_QSTR(MP_QSTR_usb_hid),(mp_obj_t)&usb_hid_module }, \
TOUCHIO_MODULE \
EXTRA_BUILTIN_MODULES
#define MICROPY_PORT_BUILTIN_MODULE_WEAK_LINKS \
{ MP_ROM_QSTR(MP_QSTR_errno), MP_ROM_PTR(&mp_module_uerrno) }, \
{ MP_ROM_QSTR(MP_QSTR_io), MP_ROM_PTR(&mp_module_io) }, \
{ MP_ROM_QSTR(MP_QSTR_os), MP_ROM_PTR(&os_module) }, \
{ MP_OBJ_NEW_QSTR(MP_QSTR_time), (mp_obj_t)&time_module }, \
#else
#define MICROPY_PORT_BUILTIN_MODULES \
{ MP_OBJ_NEW_QSTR(MP_QSTR_analogio), (mp_obj_t)&analogio_module }, \
@ -403,8 +445,4 @@ void run_background_tasks(void);
#define CIRCUITPY_AUTORELOAD_DELAY_MS 500
#define CIRCUITPY_BOOT_OUTPUT_FILE "/boot_out.txt"
// TODO(tannewt): Make this 6k+ for any non-express M4 boards because they cache sectors on the
// stack.
#define CIRCUITPY_DEFAULT_STACK_SIZE 4096
#endif // __INCLUDED_MPCONFIGPORT_H

View File

@ -249,11 +249,11 @@ void reset_port(void) {
}
#if defined(EXPRESS_BOARD) && !defined(__SAMR21G18A__)
audio_dma_reset();
audioout_reset();
#if !defined(__SAMD51G19A__) && !defined(__SAMD51G18A__)
i2sout_reset();
#endif
audio_dma_reset();
//pdmin_reset();
#endif
#ifdef SAMD21

View File

@ -90,6 +90,7 @@ LIBS += -L $(dir $(LIBGCC_FILE_NAME)) -lgcc
SRC_NRFX = $(addprefix nrfx/,\
drivers/src/nrfx_power.c \
drivers/src/nrfx_spim.c \
drivers/src/nrfx_timer.c \
drivers/src/nrfx_twim.c \
drivers/src/nrfx_uarte.c \
)
@ -123,6 +124,7 @@ SRC_C += \
peripherals/nrf/clocks.c \
peripherals/nrf/$(MCU_CHIP)/pins.c \
peripherals/nrf/$(MCU_CHIP)/power.c \
peripherals/nrf/timers.c \
supervisor/shared/memory.c
DRIVERS_SRC_C += $(addprefix modules/,\
@ -298,16 +300,16 @@ sd: $(BUILD)/$(OUTPUT_FILENAME).hex
else ifeq ($(FLASHER), pyocd)
flash: $(BUILD)/$(OUTPUT_FILENAME).hex
pyocd-flashtool -t $(MCU_SUB_VARIANT) $< --sector_erase
pyocd-tool -t $(MCU_SUB_VARIANT) erase $(BOOT_SETTING_ADDR)
pyocd-tool -t $(MCU_SUB_VARIANT) write32 $(BOOT_SETTING_ADDR) 0x00000001
pyocd-tool -t $(MCU_SUB_VARIANT) reset
pyocd-flashtool -t $(MCU_VARIANT) $< --sector_erase
#pyocd-tool -t $(MCU_VARIANT) erase $(BOOT_SETTING_ADDR)
pyocd-tool -t $(MCU_VARIANT) write32 $(BOOT_SETTING_ADDR) 0x00000001
pyocd-tool -t $(MCU_VARIANT) reset
sd: $(BUILD)/$(OUTPUT_FILENAME).hex
pyocd-flashtool -t $(MCU_SUB_VARIANT) --chip_erase
pyocd-flashtool -t $(MCU_SUB_VARIANT) $(SOFTDEV_HEX)
pyocd-flashtool -t $(MCU_SUB_VARIANT) $< --sector_erase
pyocd-tool -t $(MCU_SUB_VARIANT) reset $(BOOT_SETTING_ADDR)
pyocd-flashtool -t $(MCU_VARIANT) --chip_erase
pyocd-flashtool -t $(MCU_VARIANT) $(SOFTDEV_HEX)
pyocd-flashtool -t $(MCU_VARIANT) $< --sector_erase
pyocd-tool -t $(MCU_VARIANT) reset $(BOOT_SETTING_ADDR)
endif

View File

@ -39,6 +39,7 @@ the following links:
* Adafruit [Feather nRF52](boards/feather_nrf52832/README.md): 512KB Flash, 64KB SRAM
* Adafruit [Feather nRF52840](boards/feather_nrf52840_express/README.md): 1MB Flash, 256KB SRAM
* Nordic PCA10056 see [Feather nRF52840](boards/pca10056/README.md)
* MakerDiary NRF52840 MDK see [its README](boards/makerdiary_nrf52840_mdk/README.md)
For all other board targets, see the generic notes below.
@ -80,6 +81,7 @@ pca10040 | s132 | Peripheral and Scanner | [S
pca10056 | s140 | Peripheral and Scanner | [Segger](#segger-targets)
feather_nrf52832 | s132 | Peripheral and Scanner | [UART DFU](#dfu-targets)
feather_nrf52840_express | s140 | Peripheral and Scanner | UF2 bootloader
makerdiary_nrf52840_mdk | s140 | Peripheral and Scanner | pyocd or ARM mbed DAPLink
## Segger Targets

View File

@ -0,0 +1,102 @@
# MakerDiary NRF52840 MDK
Refer to https://github.com/makerdiary/nrf52840-mdk or
https://wiki.makerdiary.com/nrf52840-mdk/ for more details about the device.
Notably, CircuitPython does not currently support QSPI external flash on NRF
devices, so neither does this port - the 64Mb flash device is not used for
anything. Also, don't confuse this with the 64MiB drive that shows up on your
computer - it's actually part of the MSC driver provided by the DAPLink
debugger, and is inaccessible at all from Python land (this drive is where you
can copy `firmware.hex` if you'd prefer to flash that way as opposed to with
`pyocd`. You'll still have access to 256KB of the onboard flash, however, for
storing your Python files, cat pictures, or whatever.
It's also interesting to note that all three LEDs and the "user button" on this
device are wired through sinks, not sources, so flip your boolean expectations
when dealing with `digitalio.DigitalInOut` on this device - `my_led.value =
True` turns the LED off! Likewise, the user button will read `False` when
pressed.
## Installing CircuitPython submodules
Before you can build, you will need to run the following commands once, which
will install the submodules that are part of the CircuitPython ecosystem, and
build the `mpy-cross` tool:
```
$ cd circuitpython
$ git submodule update --init
$ make -C mpy-cross
```
You then need to download the SD and Nordic SDK files via:
> This script relies on `wget`, which must be available from the command line.
```
$ cd ports/nrf
$ ./drivers/bluetooth/download_ble_stack.sh
```
## Note about bootloaders
While most Adafruit devices come with (or can easily be flashed with) an
Adafruit-provided bootloader (supporting niceties like UF2 flashing), this
board comes with DAPLink which (apparently?) handles everything from debugging
to programming the device, as well as the boot sequence. What's particularly
awesome about this board is that there is no physical interaction with the board
required to flash new code (read: CircuitPython builds) - the device is _always_
listening for new firmware uploads (via `pyocd-flashtool`), even if userspace
code is running.
## Building and Flashing CircuitPython
You'll need to have [pyocd](https://github.com/mbedmicro/pyOCD) installed as
appropriate for your system.
```sh
make BOARD=makerdiary_nrf52840_mdk FLASHER=pyocd SD=s140 flash
```
This should give you the following (or very similar) output, and you will see
a DFU blinky pattern on one of the board LEDs:
```
$ make BOARD=makerdiary_nrf52840_mdk FLASHER=pyocd SD=s140 flash
Use make V=1, make V=2 or set BUILD_VERBOSE similarly in your environment to increase build verbosity.
pyocd-flashtool -t nrf52 build-makerdiary_nrf52840_mdk-s140/firmware.hex --sector_erase
INFO:root:DAP SWD MODE initialised
INFO:root:ROM table #0 @ 0xe00ff000 cidr=b105100d pidr=2002c4008
INFO:root:[0]<e000e000:SCS-M4 cidr=b105e00d, pidr=4000bb00c, class=14>
WARNING:root:Invalid coresight component, cidr=0x0
INFO:root:[1]<e0001000: cidr=0, pidr=0, component invalid>
INFO:root:[2]<e0002000:FPB cidr=b105e00d, pidr=4002bb003, class=14>
WARNING:root:Invalid coresight component, cidr=0x1010101
INFO:root:[3]<e0000000: cidr=1010101, pidr=101010101010101, component invalid>
WARNING:root:Invalid coresight component, cidr=0x0
INFO:root:[4]<e0040000: cidr=0, pidr=0, component invalid>
INFO:root:[5]<e0041000:ETM-M4 cidr=b105900d, pidr=4000bb925, class=9, devtype=13, devid=0>
INFO:root:CPU core is Cortex-M4
INFO:root:FPU present
INFO:root:6 hardware breakpoints, 4 literal comparators
INFO:root:4 hardware watchpoints
[====================] 100%
INFO:root:Programmed 237568 bytes (58 pages) at 14.28 kB/s
#pyocd-tool -t nrf52 erase 0xFF000
pyocd-tool -t nrf52 write32 0xFF000 0x00000001
WARNING:root:Invalid coresight component, cidr=0x0
WARNING:root:Invalid coresight component, cidr=0x1010101
WARNING:root:Invalid coresight component, cidr=0x0
pyocd-tool -t nrf52 reset
WARNING:root:Invalid coresight component, cidr=0x0
WARNING:root:Invalid coresight component, cidr=0x1010101
WARNING:root:Invalid coresight component, cidr=0x0
Resetting target
```
Alternatively (and untested by me), it's apparently possible to copy
`firmware.hex` to the MSC device provided by DAPLink and flash that way. Refer
to [the upstream
documentation](https://wiki.makerdiary.com/nrf52840-mdk/getting-started/#drag-n-drop-programming)
for details.

View File

@ -0,0 +1,40 @@
/*
* 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 "usb.h"
void board_init(void) {
usb_init();
}
bool board_requests_safe_mode(void) {
return false;
}
void reset_board(void) {
}

View File

@ -0,0 +1,64 @@
/*
* This file is part of the MicroPython project, http://micropython.org/
*
* The MIT License (MIT)
*
* Copyright (c) 2016 Glenn Ruben Bakke
* Copyright (c) 2018 Dan Halbert 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.
*/
#define MAKERDIARYNRF52840MDK
#define MICROPY_HW_BOARD_NAME "MakerDiary nRF52840 MDK"
#define MICROPY_HW_MCU_NAME "nRF52840"
#define MICROPY_PY_SYS_PLATFORM "MakerDiary52840MDK"
#define MICROPY_QSPI_DATA0 (&pin_P1_05)
#define MICROPY_QSPI_DATA1 (&pin_P1_04)
#define MICROPY_QSPI_DATA2 (&pin_P1_02)
#define MICROPY_QSPI_DATA3 (&pin_P1_01)
#define MICROPY_QSPI_SCK (&pin_P1_03)
#define MICROPY_QSPI_CS (&pin_P1_06)
#define CIRCUITPY_AUTORELOAD_DELAY_MS 500
// If you change this, then make sure to update the linker scripts as well to
// make sure you don't overwrite code
#define PORT_HEAP_SIZE (128 * 1024)
// TODO #define CIRCUITPY_INTERNAL_NVM_SIZE 8192
#define BOARD_FLASH_SIZE (FLASH_SIZE - 0x4000 - CIRCUITPY_INTERNAL_NVM_SIZE)
// TODO #include "external_flash/devices.h"
#define EXTERNAL_FLASH_DEVICE_COUNT 1
// Datasheet for when this is implemented:
// http://www.mxic.com.tw/Lists/Datasheet/Attachments/7428/MX25R6435F,%20Wide%20Range,%2064Mb,%20v1.4.pdf
#define EXTERNAL_FLASH_DEVICES MX25R6435F
#define EXTERNAL_FLASH_QSPI_DUAL
// TODO include "external_flash/external_flash.h"
#define BOARD_HAS_CRYSTAL 0
#define DEFAULT_UART_BUS_RX (&pin_P0_19)
#define DEFAULT_UART_BUS_TX (&pin_P0_20)

View File

@ -0,0 +1,16 @@
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
endif
NRF_DEFINES += -DNRF52840_XXAA -DNRF52840

View File

@ -0,0 +1,63 @@
#include "shared-bindings/board/__init__.h"
#include "board_busses.h"
STATIC const mp_rom_map_elem_t board_module_globals_table[] = {
{ MP_ROM_QSTR(MP_QSTR_AIN0), MP_ROM_PTR(&pin_P0_02) },
{ MP_ROM_QSTR(MP_QSTR_AIN1), MP_ROM_PTR(&pin_P0_03) },
{ MP_ROM_QSTR(MP_QSTR_AIN2), MP_ROM_PTR(&pin_P0_04) },
{ MP_ROM_QSTR(MP_QSTR_AIN3), MP_ROM_PTR(&pin_P0_05) },
{ MP_ROM_QSTR(MP_QSTR_AIN4), MP_ROM_PTR(&pin_P0_28) },
{ MP_ROM_QSTR(MP_QSTR_AIN5), MP_ROM_PTR(&pin_P0_29) },
{ MP_ROM_QSTR(MP_QSTR_AIN6), MP_ROM_PTR(&pin_P0_30) },
{ MP_ROM_QSTR(MP_QSTR_AIN7), MP_ROM_PTR(&pin_P0_31) },
{ MP_ROM_QSTR(MP_QSTR_AREF), MP_ROM_PTR(&pin_P0_04) },
{ MP_ROM_QSTR(MP_QSTR_VDIV), MP_ROM_PTR(&pin_P0_05) },
{ MP_ROM_QSTR(MP_QSTR_NFC1), MP_ROM_PTR(&pin_P0_09) },
{ MP_ROM_QSTR(MP_QSTR_NFC2), MP_ROM_PTR(&pin_P0_10) },
{ MP_ROM_QSTR(MP_QSTR_P2), MP_ROM_PTR(&pin_P0_02) },
{ MP_ROM_QSTR(MP_QSTR_P3), MP_ROM_PTR(&pin_P0_03) },
{ MP_ROM_QSTR(MP_QSTR_P4), MP_ROM_PTR(&pin_P0_04) },
{ MP_ROM_QSTR(MP_QSTR_P5), MP_ROM_PTR(&pin_P0_05) },
{ MP_ROM_QSTR(MP_QSTR_P6), MP_ROM_PTR(&pin_P0_06) },
{ MP_ROM_QSTR(MP_QSTR_P7), MP_ROM_PTR(&pin_P0_07) },
{ MP_ROM_QSTR(MP_QSTR_P8), MP_ROM_PTR(&pin_P0_08) },
{ MP_ROM_QSTR(MP_QSTR_P9), MP_ROM_PTR(&pin_P0_09) },
{ MP_ROM_QSTR(MP_QSTR_P10), MP_ROM_PTR(&pin_P0_10) },
{ MP_ROM_QSTR(MP_QSTR_P11), MP_ROM_PTR(&pin_P0_11) },
{ MP_ROM_QSTR(MP_QSTR_P12), MP_ROM_PTR(&pin_P0_12) },
{ MP_ROM_QSTR(MP_QSTR_P13), MP_ROM_PTR(&pin_P0_13) },
{ MP_ROM_QSTR(MP_QSTR_P14), MP_ROM_PTR(&pin_P0_14) },
{ MP_ROM_QSTR(MP_QSTR_P15), MP_ROM_PTR(&pin_P0_15) },
{ MP_ROM_QSTR(MP_QSTR_P16), MP_ROM_PTR(&pin_P0_16) },
{ MP_ROM_QSTR(MP_QSTR_P17), MP_ROM_PTR(&pin_P0_17) },
{ MP_ROM_QSTR(MP_QSTR_P21), MP_ROM_PTR(&pin_P0_21) },
{ MP_ROM_QSTR(MP_QSTR_P25), MP_ROM_PTR(&pin_P0_25) },
{ MP_ROM_QSTR(MP_QSTR_P26), MP_ROM_PTR(&pin_P0_26) },
{ MP_ROM_QSTR(MP_QSTR_P27), MP_ROM_PTR(&pin_P0_27) },
{ MP_ROM_QSTR(MP_QSTR_P28), MP_ROM_PTR(&pin_P0_28) },
{ MP_ROM_QSTR(MP_QSTR_P29), MP_ROM_PTR(&pin_P0_29) },
{ MP_ROM_QSTR(MP_QSTR_P30), MP_ROM_PTR(&pin_P0_30) },
{ MP_ROM_QSTR(MP_QSTR_P31), MP_ROM_PTR(&pin_P0_31) },
{ MP_ROM_QSTR(MP_QSTR_SCK), MP_ROM_PTR(&pin_P1_03) },
{ MP_ROM_QSTR(MP_QSTR_CSN), MP_ROM_PTR(&pin_P1_06) },
{ MP_ROM_QSTR(MP_QSTR_IO0), MP_ROM_PTR(&pin_P1_05) },
{ MP_ROM_QSTR(MP_QSTR_IO1), MP_ROM_PTR(&pin_P1_04) },
{ MP_ROM_QSTR(MP_QSTR_IO2), MP_ROM_PTR(&pin_P1_02) },
{ MP_ROM_QSTR(MP_QSTR_IO3), MP_ROM_PTR(&pin_P1_01) },
{ MP_ROM_QSTR(MP_QSTR_TXD), MP_ROM_PTR(&pin_P0_20) },
{ MP_ROM_QSTR(MP_QSTR_RXD), MP_ROM_PTR(&pin_P0_19) },
{ MP_ROM_QSTR(MP_QSTR_LED_RED), MP_ROM_PTR(&pin_P0_23) },
{ MP_ROM_QSTR(MP_QSTR_LED_GREEN), MP_ROM_PTR(&pin_P0_22) },
{ MP_ROM_QSTR(MP_QSTR_LED_BLUE), MP_ROM_PTR(&pin_P0_24) },
{ MP_ROM_QSTR(MP_QSTR_USR_BTN), MP_ROM_PTR(&pin_P1_00) },
};
MP_DEFINE_CONST_DICT(board_module_globals, board_module_globals_table);

View File

@ -3,7 +3,7 @@
*
* The MIT License (MIT)
*
* Copyright (c) 2013, 2014 Damien P. George
* Copyright (c) 2018 Dan Halbert 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

View File

@ -3,7 +3,7 @@
*
* The MIT License (MIT)
*
* Copyright (c) 2013, 2014 Damien P. George
* Copyright (c) 2018 Dan Halbert 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

View File

@ -56,6 +56,7 @@ STATIC twim_peripheral_t twim_peripherals[] = {
void i2c_reset(void) {
for (size_t i = 0 ; i < MP_ARRAY_SIZE(twim_peripherals); i++) {
nrf_twim_disable(twim_peripherals[i].twim.p_twim);
twim_peripherals[i].in_use = false;
}
}

View File

@ -3,7 +3,7 @@
*
* The MIT License (MIT)
*
* Copyright (c) 2016 Damien P. George
* Copyright (c) 2018 Ha Thach 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
@ -179,7 +179,7 @@ size_t common_hal_busio_uart_read(busio_uart_obj_t *self, uint8_t *data, size_t
self->rx_count = -1;
_VERIFY_ERR(nrfx_uarte_rx(&self->uarte, self->buffer, cnt));
}
// queue 1-byte transfer for rx_characters_available()
if ( self->rx_count == 0 ) {
self->rx_count = -1;

View File

@ -3,8 +3,7 @@
*
* The MIT License (MIT)
*
* Copyright (c) 2017 Scott Shawcroft for Adafruit Industries
* Copyright (c) 2016 Damien P. George
* Copyright (c) 2018 Dan Halbert 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
@ -168,6 +167,7 @@ void common_hal_pulseio_pwmout_construct(pulseio_pwmout_obj_t* self,
self->frequency = frequency;
self->variable_frequency = variable_frequency;
// Note this is standard, not strong drive.
nrf_gpio_cfg_output(self->pin_number);
// disable before mapping pin channel

View File

@ -3,7 +3,7 @@
*
* The MIT License (MIT)
*
* Copyright (c) 2016 Damien P. George
* Copyright (c) 2018 Dan Halbert 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
@ -29,31 +29,136 @@
#include <stdint.h>
#include "mpconfigport.h"
#include "nrf/pins.h"
#include "nrf/timers.h"
#include "py/gc.h"
#include "py/runtime.h"
#include "shared-bindings/pulseio/PulseOut.h"
#include "shared-bindings/pulseio/PWMOut.h"
#include "supervisor/shared/translate.h"
//void pulse_finish(struct tc_module *const module) {
//
//}
// A single timer is shared amongst all PulseOut objects under the assumption that
// the code is single threaded.
static uint8_t refcount = 0;
void pulseout_reset() {
static nrfx_timer_t *timer = NULL;
static uint16_t *pulse_array = NULL;
static volatile uint16_t pulse_array_index = 0;
static uint16_t pulse_array_length;
static void turn_on(pulseio_pulseout_obj_t *pulseout) {
pulseout->pwmout->pwm->PSEL.OUT[0] = pulseout->pwmout->pin_number;
}
void common_hal_pulseio_pulseout_construct(pulseio_pulseout_obj_t* self, const pulseio_pwmout_obj_t* carrier) {
mp_raise_NotImplementedError(NULL);
static void turn_off(pulseio_pulseout_obj_t *pulseout) {
// Disconnect pin from PWM.
pulseout->pwmout->pwm->PSEL.OUT[0] = 0xffffffff;
// Make sure pin is low.
nrf_gpio_pin_clear(pulseout->pwmout->pin_number);
}
static void start_timer(void) {
nrfx_timer_clear(timer);
// true enables interrupt.
nrfx_timer_compare(timer, NRF_TIMER_CC_CHANNEL0, pulse_array[pulse_array_index], true);
nrfx_timer_resume(timer);
}
static void pulseout_event_handler(nrf_timer_event_t event_type, void *p_context) {
pulseio_pulseout_obj_t *pulseout = (pulseio_pulseout_obj_t*) p_context;
if (event_type != NRF_TIMER_EVENT_COMPARE0) {
// Spurious event.
return;
}
nrfx_timer_pause(timer);
pulse_array_index++;
// No more pulses. Turn off output and don't restart.
if (pulse_array_index >= pulse_array_length) {
turn_off(pulseout);
return;
}
// Alternate on and off, starting with on.
if (pulse_array_index % 2 == 0) {
turn_on(pulseout);
} else {
turn_off(pulseout);
}
// Count up to the next given value.
start_timer();
}
void pulseout_reset() {
if (timer != NULL) {
nrf_peripherals_free_timer(timer);
}
refcount = 0;
}
void common_hal_pulseio_pulseout_construct(pulseio_pulseout_obj_t* self,
const pulseio_pwmout_obj_t* carrier) {
if (refcount == 0) {
timer = nrf_peripherals_allocate_timer();
if (timer == NULL) {
mp_raise_RuntimeError(translate("All timers in use"));
}
}
refcount++;
nrfx_timer_config_t timer_config = {
// PulseOut durations are in microseconds, so this is convenient.
.frequency = NRF_TIMER_FREQ_1MHz,
.mode = NRF_TIMER_MODE_TIMER,
.bit_width = NRF_TIMER_BIT_WIDTH_32,
.interrupt_priority = NRFX_TIMER_DEFAULT_CONFIG_IRQ_PRIORITY,
.p_context = self,
};
self->pwmout = carrier;
nrfx_timer_init(timer, &timer_config, &pulseout_event_handler);
turn_off(self);
}
bool common_hal_pulseio_pulseout_deinited(pulseio_pulseout_obj_t* self) {
return 1;
return self->pwmout == NULL;
}
void common_hal_pulseio_pulseout_deinit(pulseio_pulseout_obj_t* self) {
if (common_hal_pulseio_pulseout_deinited(self)) {
return;
}
turn_on(self);
self->pwmout = NULL;
refcount--;
if (refcount == 0) {
nrf_peripherals_free_timer(timer);
}
}
void common_hal_pulseio_pulseout_send(pulseio_pulseout_obj_t* self, uint16_t* pulses, uint16_t length) {
pulse_array = pulses;
pulse_array_index = 0;
pulse_array_length = length;
nrfx_timer_enable(timer);
turn_on(self);
// Count up to the next given value.
start_timer();
while(pulse_array_index < length) {
// Do other things while we wait. The interrupts will handle sending the
// signal.
#ifdef MICROPY_VM_HOOK_LOOP
MICROPY_VM_HOOK_LOOP
#endif
}
nrfx_timer_disable(timer);
}

View File

@ -3,7 +3,7 @@
*
* The MIT License (MIT)
*
* Copyright (c) 2017 Scott Shawcroft for Adafruit Industries
* Copyright (c) 2018 Dan Halbert 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
@ -28,13 +28,13 @@
#define MICROPY_INCLUDED_NRF_COMMON_HAL_PULSEIO_PULSEOUT_H
#include "common-hal/microcontroller/Pin.h"
#include "common-hal/pulseio/PWMOut.h"
#include "py/obj.h"
typedef struct {
mp_obj_base_t base;
// __IO PORT_PINCFG_Type *pincfg;
uint8_t pin;
const pulseio_pwmout_obj_t *pwmout;
} pulseio_pulseout_obj_t;
void pulseout_reset(void);

View File

@ -27,8 +27,10 @@
// Enable SPIM2 and SPIM3 (if available)
#define NRFX_SPIM2_ENABLED 1
#ifdef NRF52840_XXAA
#ifdef NRF_SPIM3
#define NRFX_SPIM3_ENABLED 1
#else
#define NRFX_SPIM3_ENABLED 0
#endif
@ -59,4 +61,24 @@
#define NRFX_PWM3_ENABLED 0
#endif
// TIMERS
#define NRFX_TIMER_ENABLED 1
// Don't enable TIMER0: it's used by the SoftDevice.
#define NRFX_TIMER1_ENABLED 1
#define NRFX_TIMER2_ENABLED 1
#ifdef NRFX_TIMER3
#define NRFX_TIMER3_ENABLED 1
#else
#define NRFX_TIMER3_ENABLED 0
#endif
#ifdef NRFX_TIMER4
#define NRFX_TIMER4_ENABLED 1
#else
#define NRFX_TIMER4_ENABLED 0
#endif
#define NRFX_TIMER_DEFAULT_CONFIG_IRQ_PRIORITY 7
#endif // NRFX_CONFIG_H__

View File

@ -3,7 +3,7 @@
*
* The MIT License (MIT)
*
* Copyright (c) 2013, 2014 Damien P. George
* Copyright (c) 2018 Dan Halbert 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

View File

@ -0,0 +1,88 @@
/*
* This file is part of the MicroPython project, http://micropython.org/
*
* The MIT License (MIT)
*
* Copyright (c) 2018 Dan Halbert 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 "common-hal/pulseio/PulseOut.h"
#include <stdint.h>
#include "nrfx.h"
#include "nrfx_timer.h"
#include "mpconfigport.h"
#include "py/runtime.h"
STATIC nrfx_timer_t nrfx_timers[] = {
#if NRFX_CHECK(NRFX_TIMER0_ENABLED)
// Note that TIMER0 is reserved for use by the SoftDevice, so it should not usually be enabled.
NRFX_TIMER_INSTANCE(0),
#endif
#if NRFX_CHECK(NRFX_TIMER1_ENABLED)
NRFX_TIMER_INSTANCE(1),
#endif
#if NRFX_CHECK(NRFX_TIMER2_ENABLED)
NRFX_TIMER_INSTANCE(2),
#endif
#if NRFX_CHECK(NRFX_TIMER3_ENABLED)
NRFX_TIMER_INSTANCE(3),
#endif
#if NRFX_CHECK(NRFX_TIMER4_ENABLED)
NRFX_TIMER_INSTANCE(4),
#endif
};
static bool nrfx_timer_allocated[ARRAY_SIZE(nrfx_timers)];
void timers_reset(void) {
for (size_t i = 0; i < ARRAY_SIZE(nrfx_timers); i ++) {
nrfx_timer_uninit(&nrfx_timers[i]);
nrfx_timer_allocated[i] = false;
}
}
// Returns a free nrfx_timer instance, and marks it as allocated.
// The caller should init as with the desired config.
// Returns NULL if no timer is available.
nrfx_timer_t* nrf_peripherals_allocate_timer(void) {
for (size_t i = 0; i < ARRAY_SIZE(nrfx_timers); i ++) {
if (!nrfx_timer_allocated[i]) {
nrfx_timer_allocated[i] = true;
return &nrfx_timers[i];
}
}
return NULL;
}
// Free a timer, which may or may not have been initialized.
void nrf_peripherals_free_timer(nrfx_timer_t* timer) {
for (size_t i = 0; i < ARRAY_SIZE(nrfx_timers); i ++) {
if (timer == &nrfx_timers[i]) {
nrfx_timer_allocated[i] = false;
// Safe to call even if not initialized.
nrfx_timer_uninit(timer);
return;
}
}
}

View File

@ -0,0 +1,32 @@
/*
* This file is part of the MicroPython project, http://micropython.org/
*
* The MIT License (MIT)
*
* Copyright (c) 2018 Dan Halbert 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 "nrfx.h"
#include "nrfx_timer.h"
void timers_reset(void);
nrfx_timer_t* nrf_peripherals_allocate_timer(void);
void nrf_peripherals_free_timer(nrfx_timer_t* timer);

View File

@ -31,12 +31,14 @@
#include "nrf/cache.h"
#include "nrf/clocks.h"
#include "nrf/power.h"
#include "nrf/timers.h"
#include "shared-module/gamepad/__init__.h"
#include "common-hal/microcontroller/Pin.h"
#include "common-hal/busio/I2C.h"
#include "common-hal/busio/SPI.h"
#include "common-hal/pulseio/PWMOut.h"
#include "common-hal/pulseio/PulseOut.h"
#include "tick.h"
safe_mode_t port_init(void) {
@ -81,6 +83,8 @@ void reset_port(void) {
i2c_reset();
spi_reset();
pwmout_reset();
pulseout_reset();
timers_reset();
reset_all_pins();
}
@ -88,16 +92,7 @@ void reset_port(void) {
void HardFault_Handler(void)
{
// static volatile uint32_t reg;
// static volatile uint32_t reg2;
// static volatile uint32_t bfar;
// reg = SCB->HFSR;
// reg2 = SCB->CFSR;
// bfar = SCB->BFAR;
// for (int i = 0; i < 0; i++)
// {
// (void)reg;
// (void)reg2;
// (void)bfar;
// }
while (true) {
asm("");
}
}

10
py/builtinimport.c Executable file → Normal file
View File

@ -155,11 +155,9 @@ STATIC void do_load_from_lexer(mp_obj_t module_obj, mp_lexer_t *lex) {
#endif
#if MICROPY_PERSISTENT_CODE_LOAD || MICROPY_MODULE_FROZEN_MPY
STATIC void do_execute_raw_code(mp_obj_t module_obj, mp_raw_code_t *raw_code) {
STATIC void do_execute_raw_code(mp_obj_t module_obj, mp_raw_code_t *raw_code, const char *filename) {
#if MICROPY_PY___FILE__
// TODO
//qstr source_name = lex->source_name;
//mp_store_attr(module_obj, MP_QSTR___file__, MP_OBJ_NEW_QSTR(source_name));
mp_store_attr(module_obj, MP_QSTR___file__, MP_OBJ_NEW_QSTR(qstr_from_str(filename)));
#endif
// execute the module in its context
@ -222,7 +220,7 @@ STATIC void do_load(mp_obj_t module_obj, vstr_t *file) {
// its data) in the list of frozen files, execute it.
#if MICROPY_MODULE_FROZEN_MPY
if (frozen_type == MP_FROZEN_MPY) {
do_execute_raw_code(module_obj, modref);
do_execute_raw_code(module_obj, modref, file_str);
return;
}
#endif
@ -235,7 +233,7 @@ STATIC void do_load(mp_obj_t module_obj, vstr_t *file) {
#if MICROPY_PERSISTENT_CODE_LOAD
if (file_str[file->len - 3] == 'm') {
mp_raw_code_t *raw_code = mp_raw_code_load_file(file_str);
do_execute_raw_code(module_obj, raw_code);
do_execute_raw_code(module_obj, raw_code, file_str);
return;
}
#endif

View File

@ -72,7 +72,7 @@ endif
MAKE_FROZEN = $(PYTHON) $(TOP)/tools/make-frozen.py
MPY_CROSS = $(TOP)/mpy-cross/mpy-cross
MPY_TOOL = $(PYTHON) $(TOP)/tools/mpy-tool.py
MPY_TOOL = $(PYTHON3) $(TOP)/tools/mpy-tool.py
PREPROCESS_FROZEN_MODULES = PYTHONPATH=$(TOP)/tools/python-semver $(TOP)/tools/preprocess_frozen_modules.py
all:

View File

@ -130,7 +130,7 @@ xargs -n1 "$(abspath $(MPY_CROSS))" $(MPY_CROSS_FLAGS)
# to build frozen_mpy.c from all .mpy files
# You need to define MPY_TOOL_LONGINT_IMPL in mpconfigport.mk
# if the default will not work (mpz is the default).
$(BUILD)/frozen_mpy.c: $(BUILD)/frozen_mpy $(BUILD)/genhdr/qstrdefs.generated.h
$(BUILD)/frozen_mpy.c: $(BUILD)/frozen_mpy $(BUILD)/genhdr/qstrdefs.generated.h $(TOP)/tools/mpy-tool.py
$(STEPECHO) "Creating $@"
$(Q)$(MPY_TOOL) $(MPY_TOOL_LONGINT_IMPL) -f -q $(BUILD)/genhdr/qstrdefs.preprocessed.h $(shell $(FIND) -L $(BUILD)/frozen_mpy -type f -name '*.mpy') > $@
endif

View File

@ -135,7 +135,7 @@ STATIC mp_obj_t mp_sys_exc_info(void) {
t->items[0] = MP_OBJ_FROM_PTR(mp_obj_get_type(cur_exc));
t->items[1] = cur_exc;
t->items[2] = mp_const_none;
t->items[2] = mp_obj_exception_get_traceback_obj(cur_exc);
return MP_OBJ_FROM_PTR(t);
}
MP_DEFINE_CONST_FUN_OBJ_0(mp_sys_exc_info_obj, mp_sys_exc_info);

View File

@ -717,6 +717,7 @@ bool mp_obj_exception_match(mp_obj_t exc, mp_const_obj_t exc_type);
void mp_obj_exception_clear_traceback(mp_obj_t self_in);
void mp_obj_exception_add_traceback(mp_obj_t self_in, qstr file, size_t line, qstr block);
void mp_obj_exception_get_traceback(mp_obj_t self_in, size_t *n, size_t **values);
mp_obj_t mp_obj_exception_get_traceback_obj(mp_obj_t self_in);
mp_obj_t mp_obj_exception_get_value(mp_obj_t self_in);
mp_obj_t mp_obj_exception_make_new(const mp_obj_type_t *type_in, size_t n_args, size_t n_kw, const mp_obj_t *args);
mp_obj_t mp_alloc_emergency_exception_buf(mp_obj_t size_in);

View File

@ -92,6 +92,9 @@ STATIC void bound_meth_attr(mp_obj_t self_in, qstr attr, mp_obj_t *dest) {
if (attr == MP_QSTR___name__) {
mp_obj_bound_meth_t *o = MP_OBJ_TO_PTR(self_in);
dest[0] = MP_OBJ_NEW_QSTR(mp_obj_fun_get_name(o->meth));
} else if (attr == MP_QSTR___func__) {
mp_obj_bound_meth_t *o = MP_OBJ_TO_PTR(self_in);
dest[0] = o->meth;
}
}
#endif

View File

@ -30,6 +30,7 @@
#include <stdio.h>
#include "py/objlist.h"
#include "py/objnamedtuple.h"
#include "py/objstr.h"
#include "py/objtuple.h"
#include "py/objtype.h"
@ -531,3 +532,164 @@ void mp_obj_exception_get_traceback(mp_obj_t self_in, size_t *n, size_t **values
*values = self->traceback_data;
}
}
#if MICROPY_PY_SYS_EXC_INFO
STATIC const mp_obj_namedtuple_type_t code_type_obj = {
.base = {
.base = {
.type = &mp_type_type
},
.name = MP_QSTR_code,
.print = namedtuple_print,
.make_new = namedtuple_make_new,
.unary_op = mp_obj_tuple_unary_op,
.binary_op = mp_obj_tuple_binary_op,
.attr = namedtuple_attr,
.subscr = mp_obj_tuple_subscr,
.getiter = mp_obj_tuple_getiter,
.parent = &mp_type_tuple,
},
.n_fields = 15,
.fields = {
MP_QSTR_co_argcount,
MP_QSTR_co_kwonlyargcount,
MP_QSTR_co_nlocals,
MP_QSTR_co_stacksize,
MP_QSTR_co_flags,
MP_QSTR_co_code,
MP_QSTR_co_consts,
MP_QSTR_co_names,
MP_QSTR_co_varnames,
MP_QSTR_co_freevars,
MP_QSTR_co_cellvars,
MP_QSTR_co_filename,
MP_QSTR_co_name,
MP_QSTR_co_firstlineno,
MP_QSTR_co_lnotab,
},
};
STATIC mp_obj_t code_make_new(qstr file, qstr block) {
mp_obj_t elems[15] = {
mp_obj_new_int(0), // co_argcount
mp_obj_new_int(0), // co_kwonlyargcount
mp_obj_new_int(0), // co_nlocals
mp_obj_new_int(0), // co_stacksize
mp_obj_new_int(0), // co_flags
mp_obj_new_bytearray(0, NULL), // co_code
mp_obj_new_tuple(0, NULL), // co_consts
mp_obj_new_tuple(0, NULL), // co_names
mp_obj_new_tuple(0, NULL), // co_varnames
mp_obj_new_tuple(0, NULL), // co_freevars
mp_obj_new_tuple(0, NULL), // co_cellvars
MP_OBJ_NEW_QSTR(file), // co_filename
MP_OBJ_NEW_QSTR(block), // co_name
mp_obj_new_int(1), // co_firstlineno
mp_obj_new_bytearray(0, NULL), // co_lnotab
};
return namedtuple_make_new((const mp_obj_type_t*)&code_type_obj, 15, 0, elems);
}
STATIC const mp_obj_namedtuple_type_t frame_type_obj = {
.base = {
.base = {
.type = &mp_type_type
},
.name = MP_QSTR_frame,
.print = namedtuple_print,
.make_new = namedtuple_make_new,
.unary_op = mp_obj_tuple_unary_op,
.binary_op = mp_obj_tuple_binary_op,
.attr = namedtuple_attr,
.subscr = mp_obj_tuple_subscr,
.getiter = mp_obj_tuple_getiter,
.parent = &mp_type_tuple,
},
.n_fields = 8,
.fields = {
MP_QSTR_f_back,
MP_QSTR_f_builtins,
MP_QSTR_f_code,
MP_QSTR_f_globals,
MP_QSTR_f_lasti,
MP_QSTR_f_lineno,
MP_QSTR_f_locals,
MP_QSTR_f_trace,
},
};
STATIC mp_obj_t frame_make_new(mp_obj_t f_code, int f_lineno) {
mp_obj_t elems[8] = {
mp_const_none, // f_back
mp_obj_new_dict(0), // f_builtins
f_code, // f_code
mp_obj_new_dict(0), // f_globals
mp_obj_new_int(0), // f_lasti
mp_obj_new_int(f_lineno), // f_lineno
mp_obj_new_dict(0), // f_locals
mp_const_none, // f_trace
};
return namedtuple_make_new((const mp_obj_type_t*)&frame_type_obj, 8, 0, elems);
}
STATIC const mp_obj_namedtuple_type_t traceback_type_obj = {
.base = {
.base = {
.type = &mp_type_type
},
.name = MP_QSTR_traceback,
.print = namedtuple_print,
.make_new = namedtuple_make_new,
.unary_op = mp_obj_tuple_unary_op,
.binary_op = mp_obj_tuple_binary_op,
.attr = namedtuple_attr,
.subscr = mp_obj_tuple_subscr,
.getiter = mp_obj_tuple_getiter,
.parent = &mp_type_tuple,
},
.n_fields = 4,
.fields = {
MP_QSTR_tb_frame,
MP_QSTR_tb_lasti,
MP_QSTR_tb_lineno,
MP_QSTR_tb_next,
},
};
STATIC mp_obj_t traceback_from_values(size_t *values, mp_obj_t tb_next) {
int lineno = values[1];
mp_obj_t elems[4] = {
frame_make_new(code_make_new(values[0], values[2]), lineno),
mp_obj_new_int(0),
mp_obj_new_int(lineno),
tb_next,
};
return namedtuple_make_new((const mp_obj_type_t*)&traceback_type_obj, 4, 0, elems);
};
mp_obj_t mp_obj_exception_get_traceback_obj(mp_obj_t self_in) {
mp_obj_exception_t *self = MP_OBJ_TO_PTR(self_in);
if (!mp_obj_is_exception_instance(self)) {
return mp_const_none;
}
size_t n, *values;
mp_obj_exception_get_traceback(self, &n, &values);
if (n == 0) {
return mp_const_none;
}
mp_obj_t tb_next = mp_const_none;
for (size_t i = 0; i < n; i += 3) {
tb_next = traceback_from_values(&values[i], tb_next);
}
return tb_next;
}
#endif

View File

@ -43,13 +43,15 @@
//|
//| AudioOut can be used to output an analog audio signal on a given pin.
//|
//| .. class:: AudioOut(left_channel, right_channel=None)
//| .. class:: AudioOut(left_channel, *, right_channel=None, quiescent_value=0x8000)
//|
//| Create a AudioOut object associated with the given pin(s). This allows you to
//| play audio signals out on the given pin(s).
//|
//| :param ~microcontroller.Pin left_channel: The pin to output the left channel to
//| :param ~microcontroller.Pin right_channel: The pin to output the right channel to
//| :param int quiescent_value: The output value when no signal is present. Samples should start
//| and end with this value to prevent audible popping.
//|
//| Simple 8ksps 440 Hz sin wave::
//|
@ -95,10 +97,11 @@ STATIC mp_obj_t audioio_audioout_make_new(const mp_obj_type_t *type, size_t n_ar
mp_arg_check_num(n_args, n_kw, 1, 2, true);
mp_map_t kw_args;
mp_map_init_fixed_table(&kw_args, n_kw, pos_args + n_args);
enum { ARG_left_channel, ARG_right_channel };
enum { ARG_left_channel, ARG_right_channel, ARG_quiescent_value };
static const mp_arg_t allowed_args[] = {
{ MP_QSTR_left_channel, MP_ARG_OBJ | MP_ARG_REQUIRED },
{ MP_QSTR_right_channel, MP_ARG_OBJ | MP_ARG_KW_ONLY, {.u_rom_obj = mp_const_none} },
{ MP_QSTR_quiescent_value, MP_ARG_OBJ | MP_ARG_KW_ONLY, {.u_int = 0x8000} },
};
mp_arg_val_t args[MP_ARRAY_SIZE(allowed_args)];
mp_arg_parse_all(n_args, pos_args, &kw_args, MP_ARRAY_SIZE(allowed_args), allowed_args, args);
@ -117,7 +120,7 @@ STATIC mp_obj_t audioio_audioout_make_new(const mp_obj_type_t *type, size_t n_ar
// create AudioOut object from the given pin
audioio_audioout_obj_t *self = m_new_obj(audioio_audioout_obj_t);
self->base.type = &audioio_audioout_type;
common_hal_audioio_audioout_construct(self, left_channel_pin, right_channel_pin);
common_hal_audioio_audioout_construct(self, left_channel_pin, right_channel_pin, args[ARG_quiescent_value].u_int);
return MP_OBJ_FROM_PTR(self);
}

View File

@ -35,7 +35,7 @@ extern const mp_obj_type_t audioio_audioout_type;
// left_channel will always be non-NULL but right_channel may be for mono output.
void common_hal_audioio_audioout_construct(audioio_audioout_obj_t* self,
const mcu_pin_obj_t* left_channel, const mcu_pin_obj_t* right_channel);
const mcu_pin_obj_t* left_channel, const mcu_pin_obj_t* right_channel, uint16_t default_value);
void common_hal_audioio_audioout_deinit(audioio_audioout_obj_t* self);
bool common_hal_audioio_audioout_deinited(audioio_audioout_obj_t* self);

View File

@ -47,7 +47,7 @@
//|
//| .. class:: PulseOut(carrier)
//|
//| Create a PulseOut object associated with the given PWM out experience.
//| Create a PulseOut object associated with the given PWMout object.
//|
//| :param ~pulseio.PWMOut carrier: PWMOut that is set to output on the desired pin.
//|
@ -57,9 +57,10 @@
//| import pulseio
//| import board
//|
//| pwm = pulseio.PWMOut(board.D13, duty_cycle=2 ** 15)
//| # 50% duty cycle at 38kHz.
//| pwm = pulseio.PWMOut(board.D13, frequency=38000, duty_cycle=32768)
//| pulse = pulseio.PulseOut(pwm)
//| # on off on off on
//| # on off on off on
//| pulses = array.array('H', [65000, 1000, 65000, 65000, 1000])
//| pulse.send(pulses)
//|

View File

@ -206,6 +206,20 @@ STATIC mp_obj_t time_time(void) {
}
MP_DEFINE_CONST_FUN_OBJ_0(time_time_obj, time_time);
//| .. method:: monotonic_ns(clk_id)
//|
//| Return the time of the specified clock clk_id in nanoseconds. Refer to
//| Clock ID Constants for a list of accepted values for clk_id.
//|
//| :return: the current time
//| :rtype: int
//|
STATIC mp_obj_t time_monotonic_ns(void) {
uint64_t time64 = common_hal_time_monotonic() * 1000000llu;
return mp_obj_new_int_from_ll((long long) time64);
}
MP_DEFINE_CONST_FUN_OBJ_0(time_monotonic_ns_obj, time_monotonic_ns);
//| .. method:: localtime([secs])
//|
//| Convert a time expressed in seconds since Jan 1, 1970 to a struct_time in
@ -280,6 +294,7 @@ STATIC const mp_rom_map_elem_t time_module_globals_table[] = {
#endif // MICROPY_PY_COLLECTIONS
#if MICROPY_LONGINT_IMPL != MICROPY_LONGINT_IMPL_NONE
{ MP_ROM_QSTR(MP_QSTR_time), MP_ROM_PTR(&time_time_obj) },
{ MP_ROM_QSTR(MP_QSTR_monotonic_ns), MP_ROM_PTR(&time_monotonic_ns_obj) },
#endif
};

View File

@ -25,8 +25,10 @@ grandcentral_m4_express \
hallowing_m0_express \
itsybitsy_m0_express \
itsybitsy_m4_express \
makerdiary_nrf52840_mdk \
metro_m0_express \
metro_m4_express \
meowmeow \
pca10056 \
pca10059 \
pirkey_m0 \
@ -81,6 +83,11 @@ for board in $boards; do
(( exit_status = exit_status || $? ))
temp_filename=ports/nrf/build-$board-s140/firmware.uf2
extension=uf2
elif [[ $board == "makerdiary_nrf52840_mdk" ]]; then
make $PARALLEL -C ports/nrf TRANSLATION=$language BOARD=$board SD=s140
(( exit_status = exit_status || $? ))
temp_filename=ports/nrf/build-$board-s140/firmware.hex
extension=hex
else
time make $PARALLEL -C ports/atmel-samd TRANSLATION=$language BOARD=$board
(( exit_status = exit_status || $? ))

View File

@ -78,6 +78,18 @@ MP_BC_LOAD_GLOBAL = 0x1d
MP_BC_LOAD_ATTR = 0x1e
MP_BC_STORE_ATTR = 0x26
# load opcode names
opcode_names = {}
with open("../../py/bc0.h") as f:
for line in f.readlines():
if line.startswith("#define"):
s = line.split(maxsplit=3)
if len(s) < 3:
continue
_, name, value = s[:3]
opcode = int(value.strip("()"), 0)
opcode_names[opcode] = name
def make_opcode_format():
def OC4(a, b, c, d):
return a | (b << 2) | (c << 4) | (d << 6)
@ -252,35 +264,50 @@ class RawCode:
i += 1
RawCode.escaped_names.add(self.escaped_name)
sizes = {"bytecode": 0, "strings": 0, "raw_code_overhead": 0, "const_table_overhead": 0, "string_overhead": 0, "number_overhead": 0}
# emit children first
for rc in self.raw_codes:
rc.freeze(self.escaped_name + '_')
subsize = rc.freeze(self.escaped_name + '_')
for k in sizes:
sizes[k] += subsize[k]
# generate bytecode data
print()
print('// frozen bytecode for file %s, scope %s%s' % (self.source_file.str, parent_name, self.simple_name.str))
print("// bytecode size", len(self.bytecode))
print('STATIC ', end='')
if not config.MICROPY_OPT_CACHE_MAP_LOOKUP_IN_BYTECODE:
print('const ', end='')
print('byte bytecode_data_%s[%u] = {' % (self.escaped_name, len(self.bytecode)))
sizes["bytecode"] += len(self.bytecode)
print(' ', end='')
for i in range(self.ip2):
print(' 0x%02x,' % self.bytecode[i], end='')
print()
print(" // simple name")
print(' ', self.simple_name.qstr_id, '& 0xff,', self.simple_name.qstr_id, '>> 8,')
print(" // source file")
print(' ', self.source_file.qstr_id, '& 0xff,', self.source_file.qstr_id, '>> 8,')
print(" // code info")
print(' ', end='')
for i in range(self.ip2 + 4, self.ip):
print(' 0x%02x,' % self.bytecode[i], end='')
print()
print(" // bytecode")
ip = self.ip
while ip < len(self.bytecode):
f, sz = mp_opcode_format(self.bytecode, ip)
opcode = self.bytecode[ip]
if opcode in opcode_names:
opcode = opcode_names[opcode]
else:
opcode = '0x%02x' % opcode
if f == 1:
qst = self._unpack_qstr(ip + 1).qstr_id
print(' ', '0x%02x,' % self.bytecode[ip], qst, '& 0xff,', qst, '>> 8,')
print(' {}, {} & 0xff, {} >> 8,'.format(opcode, qst, qst))
else:
print(' ', ''.join('0x%02x, ' % self.bytecode[ip + i] for i in range(sz)))
print(' {},{}'.format(opcode, ''.join(' 0x%02x,' % self.bytecode[ip + i] for i in range(1, sz))))
ip += sz
print('};')
@ -295,9 +322,12 @@ class RawCode:
obj_type = 'mp_type_str'
else:
obj_type = 'mp_type_bytes'
print('STATIC const mp_obj_str_t %s = {{&%s}, %u, %u, (const byte*)"%s"};'
print('STATIC const mp_obj_str_t %s = {{&%s}, %u, %u, (const byte*)"%s"}; // %s'
% (obj_name, obj_type, qstrutil.compute_hash(obj, config.MICROPY_QSTR_BYTES_IN_HASH),
len(obj), ''.join(('\\x%02x' % b) for b in obj)))
len(obj), ''.join(('\\x%02x' % b) for b in obj), obj))
sizes["strings"] += len(obj)
sizes["string_overhead"] += 16
elif is_int_type(obj):
if config.MICROPY_LONGINT_IMPL == config.MICROPY_LONGINT_IMPL_NONE:
# TODO check if we can actually fit this long-int into a small-int
@ -321,14 +351,17 @@ class RawCode:
print('STATIC const mp_obj_int_t %s = {{&mp_type_int}, '
'{.neg=%u, .fixed_dig=1, .alloc=%u, .len=%u, .dig=(uint%u_t[]){%s}}};'
% (obj_name, neg, ndigs, ndigs, bits_per_dig, digs))
sizes["number_overhead"] += 16
elif type(obj) is float:
print('#if MICROPY_OBJ_REPR == MICROPY_OBJ_REPR_A || MICROPY_OBJ_REPR == MICROPY_OBJ_REPR_B')
print('STATIC const mp_obj_float_t %s = {{&mp_type_float}, %.16g};'
% (obj_name, obj))
print('#endif')
sizes["number_overhead"] += 8
elif type(obj) is complex:
print('STATIC const mp_obj_complex_t %s = {{&mp_type_complex}, %.16g, %.16g};'
% (obj_name, obj.real, obj.imag))
sizes["number_overhead"] += 12
else:
raise FreezeError(self, 'freezing of object %r is not implemented' % (obj,))
@ -338,8 +371,10 @@ class RawCode:
print('STATIC const mp_rom_obj_t const_table_data_%s[%u] = {'
% (self.escaped_name, const_table_len))
for qst in self.qstrs:
sizes["const_table_overhead"] += 4
print(' MP_ROM_QSTR(%s),' % global_qstrs[qst].qstr_id)
for i in range(len(self.objs)):
sizes["const_table_overhead"] += 4
if type(self.objs[i]) is float:
print('#if MICROPY_OBJ_REPR == MICROPY_OBJ_REPR_A || MICROPY_OBJ_REPR == MICROPY_OBJ_REPR_B')
print(' MP_ROM_PTR(&const_obj_%s_%u),' % (self.escaped_name, i))
@ -353,6 +388,7 @@ class RawCode:
else:
print(' MP_ROM_PTR(&const_obj_%s_%u),' % (self.escaped_name, i))
for rc in self.raw_codes:
sizes["const_table_overhead"] += 4
print(' MP_ROM_PTR(&raw_code_%s),' % rc.escaped_name)
print('};')
@ -376,6 +412,9 @@ class RawCode:
print(' #endif')
print(' },')
print('};')
sizes["raw_code_overhead"] += 16
return sizes
def read_uint(f):
i = 0
@ -467,6 +506,7 @@ def freeze_mpy(base_qstrs, raw_codes):
new[q.qstr_esc] = (len(new), q.qstr_esc, q.str)
new = sorted(new.values(), key=lambda x: x[0])
print('#include "py/bc0.h"')
print('#include "py/mpconfig.h"')
print('#include "py/objint.h"')
print('#include "py/objstr.h"')
@ -523,27 +563,45 @@ def freeze_mpy(base_qstrs, raw_codes):
print(' %u, // allocated entries' % len(new))
print(' %u, // used entries' % len(new))
print(' {')
qstr_size = {"metadata": 0, "data": 0}
for _, _, qstr in new:
qstr_size["metadata"] += config.MICROPY_QSTR_BYTES_IN_LEN + config.MICROPY_QSTR_BYTES_IN_HASH
qstr_size["data"] += len(qstr)
print(' %s,'
% qstrutil.make_bytes(config.MICROPY_QSTR_BYTES_IN_LEN, config.MICROPY_QSTR_BYTES_IN_HASH, qstr))
print(' },')
print('};')
sizes = {}
for rc in raw_codes:
rc.freeze(rc.source_file.str.replace('/', '_')[:-3] + '_')
sizes[rc.source_file.str] = rc.freeze(rc.source_file.str.replace('/', '_')[:-3] + '_')
print()
print('const char mp_frozen_mpy_names[] = {')
qstr_size["filenames"] = 1
for rc in raw_codes:
module_name = rc.source_file.str
print('"%s\\0"' % module_name)
qstr_size["filenames"] += len(module_name) + 1
print('"\\0"};')
print('const mp_raw_code_t *const mp_frozen_mpy_content[] = {')
for rc in raw_codes:
print(' &raw_code_%s,' % rc.escaped_name)
size = sizes[rc.source_file.str]
print(' // Total size:', sum(size.values()))
for k in size:
print(" // {} {}".format(k, size[k]))
print('};')
print()
print('// Total size:', sum([sum(x.values()) for x in sizes.values()]) + sum(qstr_size.values()))
for k in size:
total = sum([x[k] for x in sizes.values()])
print("// {} {}".format(k, total))
for k in qstr_size:
print("// qstr {} {}".format(k, qstr_size[k]))
def main():
import argparse
cmd_parser = argparse.ArgumentParser(description='A tool to work with MicroPython .mpy files.')