Commit Graph

690 Commits

Author SHA1 Message Date
Scott Shawcroft e5dd78d393
Merge pull request #2324 from jepler/nrf-i2s-channels-widths
nrf: assign channel width and count correctly
2019-11-25 16:59:08 -08:00
Scott Shawcroft 2653455ded
Merge pull request #2321 from jepler/nrf-i2s-buglets
Nrf i2s buglets
2019-11-25 16:11:43 -08:00
Jeff Epler 1ee35fd6fd nrf: i2sout: move register settings closer together
.. just for consistency's sake
2019-11-25 11:43:51 -06:00
Jeff Epler 47a6eaa297 nrf: i2sout: Assign SWIDTH
The sample width register was never set, so all samples were played
as though they were 16 bit.

After this change, 8-bit samples no longer produce audio on the MAX 98357A
BOB, because only 16-, 24-, and 32-bit samples are supported by the
hardware.  This will be addressed by a future change to pad samples to
16 bits; see #2323 and the 98357A datasheet page 6.
2019-11-25 11:43:29 -06:00
Jeff Epler 8f4bab2d24 i2sout: Correctly retrieve channel_count
The meaning of the "single channel" parameter is not well-documented,
but in fact it seems that "true" must be passed or else the returned
channel_count is always 1.  This caused stereo samples to be played
incorrectly.
2019-11-25 10:59:59 -06:00
Dan Halbert d154d11911
Merge pull request #2320 from jepler/nrf-unsigned-audio-crash
nrf: i2sout: Fix double-increment when copying samples
2019-11-25 11:42:16 -05:00
Jeff Epler c9946dfd63 nrf: i2sout: Use <, not !=, for loop condition
This is good C style, h/t @danh
2019-11-25 09:35:57 -06:00
Jeff Epler 19d122e546 nrf: i2sout: Fix double-increment when copying samples
This caused two problems when playing unsigned samples:
 * When an even number of samples were present, it "worked" but only
   every other sample was copied into the output, changing the waveform
 * When an odd number of samples were present, the copy continued beyond
   the end of the buffers and caused a hard fault
2019-11-25 09:07:20 -06:00
Dan Halbert 1ccb7b4c5e cosmetic commit, mostly to re-run 2019-11-22 16:30:10 -05:00
Dan Halbert 13375d16f1 change mpconfigport.mk files so they can be overriden by mpconfigboard.mk 2019-11-22 15:44:51 -05:00
Jeff Epler 1c6c9a3e1f nrf: i2sout: Ensure hardware I2S is stopped at deinit
.. otherwise, it may be possible under some scenario, for the background
task to continue and overwrite unrelated memory.
2019-11-22 14:15:07 -06:00
Jeff Epler aabb56c840 nrf: i2sout: Only update hold_value when appropriate
If we put no samples into the buffer, then there is no last
sample to fill out hold_value with.  (and, in fact, the expression such
as *(uint32_t*)(buffer-4) is outside an allocated region)

Detect this condition, and leave the prior value in place.

This improves clicks heard when pausing and resuming a waveform.
2019-11-22 13:54:37 -06:00
Scott Shawcroft 743bc829ab
Clean up debug changes 2019-11-21 16:39:57 -08:00
Scott Shawcroft e63796c7bc
Special exception message for when pairing prompt is ignored. 2019-11-21 16:32:42 -08:00
Scott Shawcroft 39f4046f70
Fix pairing when peripheral. Central untested. 2019-11-21 16:32:42 -08:00
Scott Shawcroft 5e857fdb67
Use BluetoothError in _bleio
This better differentiates errors than using OSError everywhere.
2019-11-20 14:02:15 -08:00
Hierophect 81223c76bd revert error 2019-11-15 13:04:25 -05:00
Hierophect 2c6781f74d move neopixel_in_use flag to shared-bindings 2019-11-15 12:59:52 -05:00
Hierophect de5691acf5 Add never_reset and reset to pin common hal, adjust files 2019-11-15 12:47:00 -05:00
Dan Halbert 8cd2f87e99
Merge pull request #2236 from tannewt/bleio_tweaks
Refine _bleio
2019-11-04 22:27:54 -05:00
Dan Halbert e3638ffaad
Merge pull request #2262 from jepler/cpb-speaker-disable
cpb: Disable the onboard speaker until request
2019-11-03 18:34:29 -05:00
Dan Halbert 85a648224f Check for no pullups on I2C on nrf; give arduino nano 33 ble two I2C devices 2019-11-02 22:47:03 -04:00
jepler 2bdccf03a7 cpb: define the SPEAKER_ENABLE_PIN
This allows the board to disable the onboard speaker until explicitly
enabled in user code.

Testing performed on a CPB:
 * Touching the AUDIO pin with a fingertip no longer generates noise/buzz
 * Generating a waveform with `simpleio.tone` produces no sound by default
 * When the board.SPEAKER_ENABLE is configured as a digital output and
   set True, `simpleio.tone` does produce sound

Note that while guides should include information about SPEAKER_ENABLE, it's
possible that some users who omitted it could view this as a breaking change.
They can fix it by simply adding code similar to

    speaker_enable = digitalio.DigitalInOut(board.SPEAKER_ENABLE)
    speaker_enable.direction = digitalio.Direction.OUTPUT
    speaker_enable.value = True

before using the internal speaker.

Closes: #2258
2019-11-01 16:26:03 -05:00
jepler fe47eba97f nRF: Handle SPEAKER_ENABLE_PIN
.. the existing code, which was never activated by the preprocessor,
wasn't quite right.
2019-11-01 16:23:35 -05:00
Scott Shawcroft 47e50e5659
Merge remote-tracking branch 'adafruit/master' into bleio_tweaks 2019-11-01 13:20:58 -07:00
Dan Halbert e35eb08f1d nrf: allocate two I2C on CPB 2019-10-28 21:08:53 -04:00
Dan Halbert 358920db0e Use MICROPY_PY_SYS_PLATFORM in mpconfigport.h only 2019-10-28 10:40:10 -04:00
Jeff Epler 1103490223
Merge pull request #2244 from dhalbert/itsybitsy_nrf52840_express
Initial Itsy nRF52840 defn
2019-10-27 16:46:28 -05:00
Dan Halbert 76817eaa10 Merge remote-tracking branch 'adafruit/master' into nano-33-ble 2019-10-25 22:41:26 -04:00
Dan Halbert ab6fd34828 add object types to rgb status objects;mark spi rgb objects as never_reset 2019-10-25 22:32:43 -04:00
Dan Halbert 7d04d9109e use bitbang SPI for DotStar; still need to fix hw SPI for dotstar 2019-10-25 15:37:27 -04:00
Dan Halbert cdeb0857a9 Initial Itsy nRF52840 defn 2019-10-25 11:15:34 -04:00
Scott Shawcroft 91c9d519ae
Refine comments and switch prefix_len to size_t 2019-10-22 23:09:56 -07:00
Scott Shawcroft ae30a1e5aa
Refine _bleio
This PR refines the _bleio API. It was originally motivated by
the addition of a new CircuitPython service that enables reading
and modifying files on the device. Moving the BLE lifecycle outside
of the VM motivated a number of changes to remove heap allocations
in some APIs.

It also motivated unifying connection initiation to the Adapter class
rather than the Central and Peripheral classes which have been removed.
Adapter now handles the GAP portion of BLE including advertising, which
has moved but is largely unchanged, and scanning, which has been enhanced
to return an iterator of filtered results.

Once a connection is created (either by us (aka Central) or a remote
device (aka Peripheral)) it is represented by a new Connection class.
This class knows the current connection state and can discover and
instantiate remote Services along with their Characteristics and
Descriptors.

Relates to #586
2019-10-21 18:57:03 -07:00
Kamil Tomaszewski 96756b3945 Add functions to get top and limit stack 2019-10-18 11:04:45 +02:00
Dan Halbert eca73436c9 Merge remote-tracking branch 'adafruit/master' into cpu-voltage 2019-10-15 09:03:24 -04:00
Dan Halbert fdd7ebef2d change calibration from analogin_reset() to analogin_init() 2019-10-14 23:38:41 -04:00
Dan Halbert c1ab2486f9 return chip vcc value 2019-10-12 15:42:15 -04:00
Jeff Epler fae6e29546 nrf: PWMAudioOut: deactivate PWM when deinitting self
.. otherwise, when an AudioPWMOut object was deinitted without being
explicitly stop()ped, it would use up a slot in active_audio[]; the
5th iteration would create a non-working audio object which would just
buzz instead of playing the right thing.

Closes: #2203
2019-10-12 14:01:35 +09:00
Jeff Epler ef459326cb nrf: PWMAudioOut: coding style 2019-10-12 13:57:31 +09:00
Dan Halbert aa1eed3bd3 initial Arduino Nano 33 BLE board definition 2019-09-26 15:28:57 -04:00
Scott Shawcroft 19c6c96929
Merge pull request #2130 from jepler/nrf-debugflags
nrf: Makefile: sensible flags for debugging
2019-09-20 10:18:00 -07:00
Scott Shawcroft b5a9ed3688
Merge pull request #2161 from jepler/nrf-analog-reference
nRF: Change analog reference voltage
2019-09-17 09:41:52 -07:00
jepler d39c85e3f5 nRF: Change analog reference to VCC(/4)
@ladyada says:
"having this be adjustable (reference) would be ideal cause you can get
absolute voltages but for now, VCC/4 + 4x matches every other chip :)"

... and indeed doing it this way happens to give a much more steady
reading when using a VCC-referenced resistance, and so many of the simple
things you'd wire up are actually VCC-referenced anyway.
2019-09-16 21:43:07 -05:00
Jeff Epler c56186da8c nRF: Change analog reference voltage
Datasheet reading explains one reason why readings might have been 10% low.
2019-09-16 18:35:48 -05:00
jepler df48312ce7 nRF: PWMOut: At deinit, make pin available again
Closes: #2146
2019-09-11 20:09:38 -05:00
jepler 7b9dfc9952 nrf: i2s: tune audio buffering
.. based on some tasks I found that caused stuttering:

 # Test SD and printing
 while True: os.listdir('.')

 # Test bulk I/O
 while True: len(open('somefile.wav', 'rb').read())

Each of these tasks *WAS* worse and I am improving them in a separate
PR by adding RUN_BACKGROUND_TASKS to them.
2019-09-09 20:13:12 -05:00
jepler c66f5a8536 nrf: i2s: rewrite without 'goto' 2019-09-09 19:26:18 -05:00
jepler fe9605a6a3 nrf: i2s: Comment this slightly tricksy code 2019-09-09 19:25:52 -05:00
jepler ccf08aa3df nrf: I2SOut: deal more gracefully with errors from the sample 2019-09-08 21:59:07 -05:00