Commit Graph

67 Commits

Author SHA1 Message Date
Scott Shawcroft
0c4b273f24 atmel-samd: Give the on board flash filesystem a unique volume ID. This is useful for identifying filesystem mounts and matching them up to hardware. 2017-07-06 10:45:42 -07:00
Scott Shawcroft
a715bf6bac atmel-samd: Introduce board reset mechanic used on CircuitPlayground
Express to ensure the Neopixels are off after reloads.
2017-06-16 15:40:15 -07:00
Scott Shawcroft
3e23464b1e atmel-samd: Add user initiated safe mode and rework board.c for
board specific functionality.

Fixes #155
2017-06-16 14:55:53 -07:00
Scott Shawcroft
3cad7b7b03 atmel-samd: correctly reset the REPL history on reload. Fixes #141 2017-05-24 10:53:52 -07:00
Scott Shawcroft
0a6bed491f atmel-samd: Enable autoreload by default again. 2017-05-20 08:11:06 -07:00
Scott Shawcroft
b1925b1bd8 atmel-samd: Fixup autoreset after switching boot to running once. 2017-05-15 20:21:26 -07:00
Scott Shawcroft
974847ac8d atmel-samd: Add a safe mode which detects hard faults and reboots without running user code again. 2017-05-15 15:29:04 -07:00
Scott Shawcroft
790c38e18c atmel-samd: Rework boot, main and REPL order.
Boot will only run once now before USB is started. Its output goes to
boot_out.txt. After main and REPL will run with VM and hardware resets
between each.
2017-05-12 18:26:14 -07:00
Scott Shawcroft
7672bf7736 atmel-samd: Rename auto-reset to auto-reload to reduce confusion with physical reset buttons. 2017-05-12 16:45:38 -07:00
Scott Shawcroft
7ea76e0889 atmel-samd: Pin reset improvements.
* Reset SWD lines to SWD rather than GPIO. This makes OpenOCD happier.
* Default speaker enable lines to False for CircuitPlayground to prevent
  the speaker from buzzing when no sound is playing. Fixes #126
2017-05-12 13:14:01 -07:00
Scott Shawcroft
c6d539ace3 atmel-samd: Fix sporadic "syntax errors"
The GC was deleting memory that was in use because its scan of the
stack missed the very top. Switching to _estack fixes this by relying
on the location from the linker.

Fixes #124
2017-05-05 12:04:20 -07:00
Scott Shawcroft
24a5752f94 atmel-samd: Use DMA for SPI flash block transfers.
Fixes #99
2017-05-02 15:25:06 -07:00
Scott Shawcroft
58b9789d0c atmel-samd: Introduce audio sample playback via audioio.AudioOut. 2017-05-01 13:10:03 -07:00
Scott Shawcroft
67ec52d7a9 atmel-samd: Swap out pulseio for touchio based on FreeTouch. 2017-04-18 09:44:04 -07:00
Scott Shawcroft
4a4f29b8f9 atmel-samd: Rework status LED implementation
* Track status pin use by user code separately so it can take over the pins and then give them back.
* Switch to hardware SPI for APA102 on Gemma and Trinket.
* Merge microcontroller/types.h into microcontroller/Pin.h to better match approach going forwards.
2017-04-12 15:24:50 -07:00
Scott Shawcroft
45dfaa835f atmel-samd: Reset PulseIn correctly on soft reset. 2017-04-11 16:56:06 -07:00
Scott Shawcroft
f28f8ba568 Split up nativeio.
This was done to allow greatly granularity when deciding what functionality
is built into each board's build. For example, this way pulseio can be
omitted to allow for something else such as touchio.
2017-04-10 13:32:19 -07:00
Scott Shawcroft
f5caf86870 atmel-samd: Add message for when auto reset is off. Fixes #112 2017-03-27 20:12:30 +01:00
Scott Shawcroft
d200a62164 Add PulseOut which can pulse a PWMOut for IR remote transmission. 2017-03-10 19:17:54 +01:00
Scott Shawcroft
fcd60915e2 atmel-samd: Turn on stack checking so infinite recursion doesn't completely crash. 2017-03-09 16:09:13 +01:00
Scott Shawcroft
d598c2a919 atmel-samd: Add USB HID mouse and keyboard support. 2017-02-27 15:43:58 +01:00
Scott Shawcroft
062fac1d43 atmel-samd: Use link time optimization to reduce code size of builds which
share space with the file system.

"Express" builds with SPI flash crash the compiler for some reason so its
currently disabled for them.
2017-02-26 01:00:33 +01:00
Scott Shawcroft
c81052a256 atmel-samd: Stop calibrating the crystal for Gemma and Trinket. We need the space for other code. 2017-02-19 14:11:24 +01:00
Scott Shawcroft
ae715a827b atmel-samd: Rework the clock configs to only be crystalless when needed by the hardware. 2017-02-10 05:09:17 -08:00
Scott Shawcroft
e3f9ee839a Add frequency changing support to PWMOut.
You can either set it once up front, or set variable_frequency on custruction to
indicate that the frequency must be able to change. This informs whether a timer
can be shared amongst pins.

This also adds persistent clock calibration on atmel-samd. Once the device has
synced its clock frequency over USB it will remember that config value until USB
is used again. This helps ensure the clock frequency is similar on and off USB.

Lastly, this also corrects time.sleep() when on USB by correcting the tick counter.
2017-01-30 15:02:01 -08:00
Scott Shawcroft
749d22b5e6 atmel-samd: stop overwriting the flash FS. 2017-01-19 14:26:57 -08:00
Scott Shawcroft
79024f3fb9 atmel-samd: Change new flash FS name to CIRCUITPY
Fixes #79
2017-01-19 11:47:06 -08:00
Scott Shawcroft
dad33e6ad0 atmel-samd: Reset the DAC on soft reset. Fixes #80. 2017-01-19 11:42:33 -08:00
Scott Shawcroft
f74e477966 atmel-samd: Fully reset the ADC state on reset to prevent a crash. 2017-01-19 11:26:41 -08:00
Scott Shawcroft
35a5d44399 atmel-samd: Ensure pin state for first script run because we don't
know the post-bootloader state.

Also, color the status LED purple for ValueErrors which are used to
indicate a pin in use.
2017-01-13 15:39:50 -08:00
Scott Shawcroft
cea5503ca0 Fixup warnings from merge about undefined macro values, switch to
VM keyboard exception and switch to FATFS reader.
2017-01-12 12:46:18 -08:00
Scott Shawcroft
f48d2df634 atmel-samd: Improve TouchIn to allow for multiple simultaneous touch pads. 2016-12-20 16:39:32 -08:00
Scott Shawcroft
f2bfbab6a0 atmel-samd: Save space by not creating default files on the FS and by only keeping LED flashing code when LEDs are present. 2016-12-19 13:03:50 -08:00
Scott Shawcroft
18c1210e87 atmel-samd: Remove debug output. 2016-12-13 16:10:42 -08:00
Scott Shawcroft
3972bc19c7 atmel-samd: Basic capacitive touch button support.
Currently only works on a single channel and is only enabled for boards with
SPI flash. Only really designed for hardware testing at this point.
2016-12-12 15:11:25 -08:00
Scott Shawcroft
b6f1eebab3 atmel-samd: Add APA102 support and flash more advanced status.
The new sequence is as follows:
* Solid blue during the boot/settings script.
* Solid green during the main/code script.
* After main while waiting to enter repl or reset:
  * Fading green once main is done successfully.
  * On error produce a series of flashes:
    * Long flash color of script.
    * Long flash color of error:
      * Green = IndentationError
      * Cyan = SyntaxError
      * White = NameError
      * Orange = OSError
      * Yellow = Other error
    * Line number of the exception by digit. Number of flashes represents value.
      * Thousands = White
      * Hundreds = Blue
      * Tens = Yellow
      * Ones = Cyan
    * Off for a period and then repeats.

At any point a write to the flash storage will flicker red.

Fixes #63
2016-12-09 19:35:56 -08:00
Scott Shawcroft
6225b89c76 atmel-samd: Stop dumping gc info on collect.
Fixes #27.
2016-12-07 17:51:10 -08:00
Scott Shawcroft
0ae344841f atmel-samd & esp8266: Make sure pins are not already in use.
This prevents corrupting previous functional objects by stealing their pins
out from under them. It prevents this by ensuring that pins are in default
state before claiming them. It also verifies pins are released correctly and
reset on soft reset.

Fixes #4, instantiating a second class will fail.
Fixes #29, pins are now reset too.
2016-12-07 15:21:14 -08:00
Scott Shawcroft
915e1e5603 atmel-samd: Move the README text out of ROM to save space. We can still ship with it on flash. 2016-11-30 09:50:19 -08:00
Scott Shawcroft
2d9a0c76c5 atmel-samd: Switch to MICROPY_PORT_ROOT_POINTERS for the flash cache. 2016-11-29 14:29:33 -08:00
Scott Shawcroft
575d2e7998 atmel-samd: Default to code.txt instead of main.py (main.py will still work on its own.) 2016-11-21 14:32:11 -08:00
Scott Shawcroft
ccbb5e84f9 This introduces an alternative hardware API called nativeio structured around different functions that are typically accelerated by native hardware. Its not meant to reflect the structure of the hardware.
Docs are here: http://tannewt-micropython.readthedocs.io/en/microcontroller/

It differs from upstream's machine in the following ways:

* Python API is identical across ports due to code structure. (Lives in shared-bindings)
* Focuses on abstracting common functionality (AnalogIn) and not representing structure (ADC).
* Documentation lives with code making it easy to ensure they match.
* Pin is split into references (board.D13 and microcontroller.pin.PA17) and functionality (DigitalInOut).
* All nativeio classes claim underlying hardware resources when inited on construction, support Context Managers (aka with statements) and have deinit methods which release the claimed hardware.
* All constructors take pin references rather than peripheral ids. Its up to the implementation to find hardware or throw and exception.
2016-11-21 14:11:52 -08:00
Scott Shawcroft
674f3d46e8 atmel-samd: Reset all SERCOMs except the SPI flash one if used. #29 2016-11-01 11:03:12 -07:00
Scott Shawcroft
5b3a143ffe atmel-samd: Rework tick timer to use TC5 and support neopixel status LED.
The tick timer needed to be reworked because the ASF delay functions also
use the SysTick timer. Now, it uses TC5 and calls out to the autoreset
logic every tick. Fixes #43.

Added neopixel status colors and corrected the latch time from ms to us.
Fixes #42.
2016-10-28 20:16:39 -07:00
Scott Shawcroft
d189a3f3cf atmel-samd: Support auto-reset based on USB write activity.
It will soft-reboot micropython after a burst of writes to the
file system. This means that after you save files on your computer
they will be automatically rerun.

This can be disabled in the build by unsetting AUTORESET_TIMER in
mpconfigboard.h.

Using the REPL will also prevent the soft resets until you reset
with CTRL-D manually.
2016-10-25 18:36:37 -07:00
Scott Shawcroft
b7768a74a7 atmel-samd: Fix file system init.
Adding the USB write protection prevented file system reset from
working. Since it happens before USB start we temporarily set the
volume to writeable and then set it back to read-only before USB is
started.
2016-10-25 15:13:43 -07:00
Scott Shawcroft
8b1526e95e atmel-samd: Add a heap based cache for writing to flash.
The code will fallback to the flash scratch space when the GC
cannot allocate us enough memory.
2016-10-21 15:44:09 -07:00
Scott Shawcroft
46f6f9f899 atmel-samd: Start USB at the end so storage is initialized. 2016-10-21 15:44:09 -07:00
Scott Shawcroft
306c921ed1 atmel-samd: Rework mass storage interaction with underlying block
storage to use micropython's VFS interface.

This makes mass storage work with any VFS implementation rather
than a single one.
2016-10-21 15:36:59 -07:00
Tony DiCola
903bc8d04e atmel-samd: Implement time.ticks_ms function using SysTick timer, add global interrupt enable/disable functions. 2016-10-13 04:59:43 +00:00