Commit Graph

329 Commits

Author SHA1 Message Date
Scott Shawcroft
097af804cd
Fix ticks
In #7497 port_background_task was renamed to port_background_tick
but the actual call site wasn't changed. This meant that it was
no longer called!

Rename more functions from task to tick to make it clearer which is
which.
2023-04-07 09:49:51 -07:00
Jeff Epler
685fdf29e3
remove include directory that doesn't exist 2023-04-05 10:31:05 -05:00
Jeff Epler
02f8a45dfa
synthio: allow increasing number of channels
12 channels works well on metro m7
2023-04-01 11:46:27 -05:00
Jeff Epler
cb5e1a1e98
mimxrt: Fix output frequency for samples that don't divide 192kHz
This makes all the samples from Dan's collection register as 440Hz
when playing on pwmio or i2sout, using https://webaudiodemos.appspot.com/pitchdetect/index.html
to detect the frequency played (all should show as A 440Hz; an error
of up to 20 "cents" should be treated as OK)

There's an audible carrier with PWM output and the 8kHz samples. This is
probably a limitation of the peripheral which is documented as being for
input signals of 44 kHz or 48 kHz; the carrier frequency is a fixed
multiple of the sample frequency.

Closes #7800
2023-03-28 10:18:28 -05:00
Dan Halbert
77cd20af8f
Merge pull request #7785 from jepler/mimxrt10xx-mqs
mimxrt10xx: Add PWMAudioOut
2023-03-27 20:46:11 -04:00
Jeff Epler
9d090ee73e
get rid of another debug print 2023-03-27 10:52:52 -05:00
Jeff Epler
b1d9331367
move comment next to its associated #if 2023-03-23 21:11:05 -05:00
Jeff Epler
0c0e06c940
remove comment that was copypasted 2023-03-23 21:10:04 -05:00
Jeff Epler
e1c8a3062a
remove debugging print 2023-03-23 21:06:53 -05:00
Jeff Epler
e2565e2305
mimxrt10xx: Add PWMAudioOut
.. via a peripheral known as the "MQS" (medium quality sound). It uses an
~192kHz PWM signal to generate audio. It sounds OK on a small speaker with
no amplifier. There's a small pop when starting/stopping audio, as is
typical.
2023-03-23 14:08:44 -05:00
Jeff Epler
df916e0484
Merge remote-tracking branch 'origin/main' into mimxrt10xx-rotaryio 2023-03-23 13:02:12 -05:00
Dan Halbert
0639c0850f
Merge pull request #7751 from hathach/add-codespell
Add codespell to pre-commit to scan and fix typo
2023-03-23 13:26:24 -04:00
Scott Shawcroft
cd69e1cec3
Merge pull request #7764 from jepler/mimxrt10xx-i2sout-v2
mimxrt10xx: implement i2sout
2023-03-23 10:07:51 -07:00
Jeff Epler
b235b50647
mimxrt: no longer need to collect the pin chainge interrupt ptrs
.. the objects on the gc heap are guaranteed to be alive, as their
finali(s/z)er will disable the interrupt.
2023-03-23 09:58:40 -05:00
Jeff Epler
de74b63472
move pin change interrupt stuff to peripherals 2023-03-23 09:28:14 -05:00
Jeff Epler
d247e5c6c9
Add the ability for a port to gc things, collect pin change objects that way 2023-03-23 09:16:00 -05:00
Jeff Epler
47e1abdbc7
Add IncrementalEncoder for mimxrt1011
.. and write a general 'pin change interrupt' facility to power it

This uses the same quadrature state machine as atmel-samd, nrf, and
rp2040. The 1011 doesn't have a dedicated encoder peripheral, so we
go the pin-change + software route.
2023-03-23 09:14:58 -05:00
Jeff Epler
b50c80e3d9
remove unused macro 2023-03-23 09:12:46 -05:00
hathach
8c1095b268
Merge branch 'main' into add-codespell 2023-03-23 14:09:57 +07:00
Dan Halbert
d45cde1d6f
Merge pull request #7776 from dhalbert/metro-m7-esp-tx-rx-swap
Swap ESP32 RX and TX pins on Metro M7 1011
2023-03-22 20:09:38 -04:00
Dan Halbert
57188885d3 Swap ESP32 RX and TX pins on Metro M7 1011 2023-03-22 14:08:03 -04:00
Jeff Epler
f40504b7bc
enable MP3 2023-03-22 12:16:29 -05:00
Jeff Epler
04bb0513df
enable audiomixer 2023-03-22 12:16:26 -05:00
Jeff Epler
c6bc9c48c9
mimxrt10xx: implement i2sout
tested on metro m7 (green prototype version) with max98357a i2s amplifier and the following test code:
```py
import board
import time
import digitalio
from audiobusio import I2SOut
from audiocore import RawSample
from microcontroller import pin
from ulab import numpy as np

n = np.array(np.sin(np.linspace(0, np.pi*2, 218, endpoint=False)) * 200, dtype=np.int16)
print(n)
r = RawSample(n, sample_rate=8000, channel_count=2)
def main():
    with digitalio.DigitalInOut(board.LED) as l:
        l.switch_to_output(True)
        value = False
        while True:
            with I2SOut(pin.GPIO_06, pin.GPIO_07, pin.GPIO_04) as i:
                time.sleep(.01)
                l.value = value = not value
                i.play(r, loop=True)
                print(i.playing)
                time.sleep(.5)
                i.stop()
                print("STOPPED")
                print(i.playing)
                time.sleep(.5)
                i.play(r, loop=True)
                print(i.playing)
                print("PLAY AGAIN")
                time.sleep(.5)
            time.sleep(1)
```

Only stereo, 16-bit, raw samples were tested; the sample rate is actually fixed
at 48kHz in the core right now. There is more to do, but the basics work.

# Conflicts:
#	ports/mimxrt10xx/Makefile
#	ports/mimxrt10xx/mpconfigport.mk
2023-03-22 12:15:25 -05:00
Jeff Epler
1e1172bc24
fix sorting of block 2023-03-22 12:04:34 -05:00
Jeff Epler
08358ecd50
constify spi, i2c, uart bank data 2023-03-22 12:03:20 -05:00
Scott Shawcroft
9c3c0555dd
Switch iMX RT sdk to NXP repo
Fixes #7645
2023-03-21 16:21:57 -07:00
Scott Shawcroft
bdf592089a
Fix .bin, .hex and .uf2 with new linker sections
Also, format perfbench output in table with reference timing from
the host.
2023-03-20 14:02:57 -07:00
hathach
fecc1bdedb
fix typos (partial) detected by codepell 2023-03-18 22:17:02 +07:00
Scott Shawcroft
5bb8a7a7c6
Improve iMX RT performance
* Enable dcache for OCRAM where the VM heap lives.
* Add CIRCUITPY_SWO_TRACE for pushing program counters out over the
  SWO pin via the ITM module in the CPU. Exempt some functions from
  instrumentation to reduce traffic and allow inlining.
* Place more functions in ITCM to handle errors using code in RAM-only
  and speed up CP.
* Use SET and CLEAR registers for digitalio. The SDK does read, mask
  and write.
* Switch to 2MiB reserved for CircuitPython code. Up from 1MiB.
* Run USB interrupts during flash erase and write.
* Allow storage writes from CP if the USB drive is disabled.
* Get perf bench tests running on CircuitPython and increase timeouts
  so it works when instrumentation is active.
2023-03-14 12:30:58 -07:00
Scott Shawcroft
8a10069995
Merge pull request #7674 from jepler/m7-bootloader-reset
use right DBL_TAP_REG when resetting to bootloader
2023-03-03 13:44:22 -08:00
Jeff Epler
b2a08e2cce
use right DBL_TAP_REG when resetting to bootloader
This helps my development scripts work better, and probably also fixes
a problem switching from the circuitpython environment back to arduino.
(specifically, the "1200 baud" serial trick was not rebooting into
the bootloader but was just resetting)
2023-03-03 10:09:31 -06:00
Dan Halbert
859a48723f
Merge pull request #7633 from tannewt/fix_imx_pwm
Fix `pwmio` on iMX RT.
2023-02-28 14:11:06 -05:00
Dan Halbert
f9831b3bbc
Merge pull request #7639 from adafruit/8.0.x
Merge 8.0.x up to main
2023-02-24 19:32:09 -05:00
Scott Shawcroft
1acf65ee22
Fix pwmio on iMX RT.
It now handles deinit, never_reset and sharing tracking. PWM
now runs in the WAIT state as well during a time.sleep().

_reset_ok() was removed because it was called in one spot right
before deinit().

Some PWMOut were also switched to a bitmap for use instead of
reference count. That way init and deinit are idempotent.

Fixes #6589. Fixes #4841. Fixes #4541.
2023-02-22 11:22:39 -08:00
Scott Shawcroft
de5f58a61d
Merge branch 'main' into banglejs2 2023-02-21 12:04:28 -08:00
Dan Halbert
2684aeb838 don't check for RX and TX both none in ports: now checked in shared-bindings 2023-02-20 19:11:16 -05:00
Dan Halbert
6d51356324 Fix pad assignments on atmel-samd UART 2023-02-19 20:42:44 -05:00
Scott Shawcroft
931c7c1c51
Add Bangle.js 2, JDI memory displays and ACeP epd
This 2-in-1 PR started with the goal of support the Bangle.js 2
smartwatch with *no USB*.
* Adds "secure" DFU build support with a committed private key.
* Adds 3-bit color support with one dummy bit for the JDI memory display
* Allows nrf boards to have a board_background_task() run in RUN_BACKGROUND_TASK.
  This is needed because the Bangle.js 2 uses the watchdog to reset.
* Renamed port_background_task() to port_background_tick() to indicate it
  runs on tick, not RUN_BACKGROUND_TASK.
* Marks serial connected when the display terminal is inited. This means
  that safe mode messages show up on the display.

ACep, 7-color epaper displays also pack 3 bits in 4. So, I added that
support as well.
* Adds 3-bit ACeP color support for 7-color e-paper displays. (Not
  watch related but similar due to color depth.)
* Allows a refresh sequence instead of a single int command. The 7" ACeP
  display requires a data byte for refresh.
* Adds optional delay after resetting the display. The ACeP displays
  need this. (Probably to load LUTs from flash.)
* Adds a cleaning phase for ACeP displays before the real refresh.

For both:
* Add dither support to Palette.
* Palette no longer converts colors when set. Instead, it caches
  converted colors at each index.
* ColorConverter now caches the last converted color. It should make
  conversions faster for repeated colors (not dithering.)
2023-02-15 15:03:40 -08:00
Dan Halbert
d8231f1588 Implement safemode.py 2023-02-13 18:26:38 -05:00
Dan Halbert
f13e6d8758 update flash chip for Metro M7 1011 2023-02-03 11:56:42 -05:00
RetiredWizard
f66e865510 Use low power RTC on mimxrt10xx (Teensy41) boards
There are apparently two RTC interfaces in the mimxrt10xx dev
kit. The low power interface access the battery backed up hardware.

I've tested this on the Teensy41 and it seems to
fix issue #4574
2023-01-17 23:30:36 -05:00
RetiredWizard
fa514e22b2 mimxrt10xx gpio pins don't deinit
It looks like a rogue "return" made it's way into the reset pin code
for the mimxrt10xx port resulting in pin.deinit() not working.
2023-01-05 19:17:08 -05:00
RetiredWizard
7a40d449e6 mimxrt10xx/common-hal/UART.C: Fix for bits parameter validation.
I believe this will resolve issue #7389
2022-12-27 22:07:54 -05:00
Dan Halbert
b90a6413c2 refactor to reduce duplicate code 2022-12-15 13:17:28 -05:00
Dan Halbert
5c569f03c2 redo pin never resetting for mimxrt10xx 2022-12-14 19:34:26 -05:00
Scott Shawcroft
ad2d190507
Merge pull request #7247 from tannewt/picow_web_workflow
Enable* web workflow for Pico W
2022-11-28 14:19:42 -08:00
Scott Shawcroft
c3a96a63c0
Enable* web workflow for Pico W
* Except for circuitpython.local which depends on MDNS and will be
done in a follow up PR.

Progress on #7214
2022-11-21 16:24:05 -08:00
MicroDev
c3c1717813
refactor common port specific Makefile code 2022-11-18 23:00:28 +05:30
MicroDev
e2a3597263
add awesome new make error message
Copied from initial implementation on atmel-samd

Co-authored-by: Rose Hooper <rhooper@toybox.ca>
Co-authored-by: Jeff Epler <jepler@gmail.com>
2022-11-18 11:27:23 +05:30