The irq handling in sam3x8e isn't specific to the sam3x8e proccessor -
it's generic for all armcm type machines. So, move the definitions
into a new file generic/armcm-irq.c
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
It's possible for sched_del_timer() to be called on a timer that fires
just after sched_del_timer disables irqs but before the next timer is
scheduled. In this case be sure to clear the irq pending status flag
after scheduling the next timer so that a delayed irq doesn't cause
the wrong timer to be run. For the same reason, make sure to check
the irq pending status flag at the start of the timer irq.
Also, as a safety check, make sure timer_set_next() isn't called from
within the timer irq dispatch loop.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
There is a small possibility that a shutdown could occur between
clearing transmit_max and clearing transmit_pos - so make sure to
handle the case where transmit_pos > transmit_max.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
As long as the code is careful when writing the in_sendf variable it
should be safe to update it without having to disable irqs.
Also, make sure in_sendf is cleared on shutdown.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Add a DECL_CONSTANT macro to allow the firmware to define constants
that are to be exported to the host during the "identify" phase. This
replaces the existing hardcoded mechanism of scanning the Kconfig
header file for certain constants.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Rework the timer prioritization code so that is compares against the
current time instead of the number of repeat timers in a given
interrupt. This makes the code slightly faster and it should provide
better protection against task starvation.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
This adds basic support for running on the Atmel SAM3x8e
micro-controllers that are found in the Arudino Due boards.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>