The power consumption was reported by Paul Staron to be 100uA higher
when an AnalogIn was used previously.
Problem 1 is that 40uA was used by the async ADC clock, which is never
actually used, so it is disabled. Problem 2 is that setting it for high
speed mode increased it by another 60uA while in deepsleep. This
currently seems to me to be possibly a bug in the design, but the
workaround is checking if this is the case before going to deepsleep,
and if yes, disable it. Afterwards it is re-enabled.
Added extra code for Teensy3.1 deepsleep wake up restore function.
For some reason the Teensy3.1 would not wake from deepsleep, problem with restoring clock set ups. Possibly due to the higher clock frequencies requiring additional PLL locking time.
Most of the SystemInit() code was required. Teensy3.1 has no debug facilities, USBSerial is not usable during deepsleep/wakeup processes. Unless anyone has a better option.
Fully tested with InterruptIn and soft WakeUp.
Deepsleep is not really viable for this platform as it is not possible to isolate the interface chip from the power supply, 2.5mA at best in deepsleep mode.
The old code for the K20 PWM had an issue where calling for example
pwm.period and pwm.write after each other resulted in the pwm.write
function setting the pulsewidth with the value of the old pwm period.
This makes sure it waits until the latest pwm period is written before
it will do so.
Three changes, first it fixes:
https://github.com/mbedmicro/mbed/issues/761 (which was reported
slightly wrong because K20 has again different clocking from KLXX for
uarts).
Second it adds mcgpllfll to clk_freqs, which again is different for K20
compared to KLXX .
Finally it adds the fractional baudrate divider for more accurate serial
baudrates.
The K64F/K22F didn't send the first char. I don't know why exactly, but
any type of reading a status register seems to fix it. And this extra
line at least makes sense. Now it works correctly.
Nordic(?)/STM should also be done, but I don't know if they do their own
stuff.
Issue is that since the mbed-assert implementation, calling pin_mode
causes an assert when a pin is NC. Since defining a serial object with
only TX or RX is a valid use case, this should be handled.
pinmap_pinout does accept NC pins, so there no guards are needed (person
who adds asserts there may also fix it in all other code).
Previously in the KLXX devices the LPTMR was used for ticker/timeout,
since they only have 2 PIT channels which are required for regular
timer. The KSDK targets have 4 PIT channels, which allows for two 32-bit
timers running at 1 MHz.
Since PIT timers are 32-bit, and LPTMR 16-bit, this both simplifies it
and makes it more efficient. It does cost the remaining 2 PIT channels,
but on the other hand leaves the LPTMR free.