- Move generic implementation of atomic_set_return to core/atomic.c
- Generic implementation of atomic compare and swap in core/atomic.c
- atomic_cas is used to implement atomic counters in core/include/atomic.h
- atomic_int_t is an atomic integer type
- ATOMIC_INIT can be used as an initializer for atomic_int_t
- ATOMIC_VALUE gets a reference to the value of an atomic integer
fix functions arguments
extended sam3x GPIO from 16 to 31
fix GPIO_NUMOF to 32
add GPIOs
extend GPIO 16-31 for ArduinoDue/UDOO
fix white space at the end gpio_clear
The ucontext->x86_fxsave is initialize as 512 bytes of zeros, but it
is not a valid value to be set onto FPU registers, causing a General
Protection Fault:
Interrupt 0x0d (General Protection Fault) while handling 0x07 (Device not available)
EAX=0012f4c0 ECX=001336e4 EDX=001334ac EBX=001336e0
ESP=00123784 EBP=001237c8 ESI=00000200 EDI=00000000
Error code=00000000
CR0=80010031 CR2=00000000 CR3=0012d000 CR4=000001e0
EIP=0000:80010031 EFLAGS=0012d000
<stack trace>
00000000
???
</stack trace>
Halting.
So lets copy the initial state of FPU registers before FPU is used
and set it as the initial state of FPU to new threads(coroutine).
Tested on the following Freescale Kinetis K60 CPUs:
- MK60DN512VLL10
The port should with a high probability also support the following variations of the above CPUs (untested):
- MK60DN256VLL10
And possibly also:
- MK60DX256VLL10
- MK60DX512VLL10
- MK60DN512VLQ10
- MK60DN256VLQ10
- MK60DX256VLQ10
- MK60DN512VMC10
- MK60DN256VMC10
- MK60DX256VMC10
- MK60DN512VMD10
- MK60DX256VMD10
- MK60DN256VMD10
Currently not working on the following CPUs (Missing PIT channel
chaining necessary for kinetis_common/periph/timer implementation):
- MK60DN256ZVLL10
- MK60DN512ZVLL10
- MK60DX256ZVLL10
- MK60DX512ZVLL10
- MK60DN512ZVLQ10
- MK60DN256ZVLQ10
- MK60DX256ZVLQ10
- MK60DN512ZVMC10
- MK60DN256ZVMC10
- MK60DX256ZVMC10
- MK60DN512ZVMD10
- MK60DX256ZVMD10
- MK60DN256ZVMD10
Regarding header files from Freescale:
dist/tools/licenses: Add Freescale CMSIS PAL license pattern
Redistribution is OK according to:
https://community.freescale.com/message/477976?et=watches.email.thread#477976
Archive copy in case the above link disappears:
https://web.archive.org/web/20150328073057/https://community.freescale.com/message/477976?et=watches.email.thread
Applies to:
- MK60DZ10.h (K60 variant)
Clang 3.6 is stricter than GCC and previous releases of Clang regarding
naked functions and now only allows inline asm inside naked functions.
This is a refactoring of the functions isr_pendsv, isr_svc,
context_save, context_restore to still be naked functions but allow
building with Clang 3.6