Originally, I believed the implementation might be shared with AudioOut,
as on the ESP32 (non-S2) the I2S peripheral was also used to drive the DAC.
However, this is not the case on ESP32-S2 and appears it will not be
the case with the ESP32-S3 or -C3, to the extent that there's skeletal
support for either of them in esp-idf master branch.
However, it could still be shared by I2SIn or PDMIn (the latter being
hypothetically implemented as I2SIn + digital postprocessing like we did
in the atmel-sam port, to my understanding), so I moved it to
the common-hal folder.
.. otherwise, the background callback to load the I2S fifos does not get
run. (I'm not sure this is _correct_ behavior of sleep + background
tasks, but it is the current behavior)
There were _possibly_ problems where this routine was being entered
by direct call AND by background callback. Schedule the work here,
and it will be done almost immediately, without worry about interference.
I don't know if this is strictly necessary, but it doesn't hurt. Since
the I2S clock is being run all the time, we have to enter the background
task to fill the FIFO with zeros constantly anyway.
This can be useful so that e.g., on a Kaluga when programming via
the FTDI chip, you can override the variable to specify "--after=hard_reset"
to automatically return to running CircuitPython, choose a different
baud rate (921600 is about 2s faster than 460800), etc:
make BOARD=espressif_kaluga_1 ESPTOOL_FLAGS="-b 921600 --before=default_reset --after=hard_reset"
IO13 is for blue LED
IO14 is the correct pin header between IO18 and IO12
The silk is wrong (shows IO13), but hardware is correct as IO14, but IO14 was not included in pins.c
Silk will be updated on next PCB production run
(note that the before and after files both lack trailing newlines; this is
how the esp-idf do)
OPTIMIZATION_DEFAULT is -Og, which enables optimizations that do not
interfere with the debugger:
```
elseif(CONFIG_COMPILER_OPTIMIZATION_DEFAULT)
list(APPEND compile_options "-Og")
```
* Better messaging when code is stopped by an auto-reload.
* Auto-reload works during sleeps on ESP32-S2. Ticks wake up the
main task each time.
* Made internal naming consistent. CamelCase Python names are NOT
separated by an underscore.
Very long ago, this was apparently not supported in esptool yet, at
least when operating over USB CDC. This now works just fine, and
our esp webtool relies on it as well. It makes flashing faster,
too.