aboutsummaryrefslogtreecommitdiffstats
path: root/src/sam4e8e/timer.c
diff options
context:
space:
mode:
authorKevin O'Connor <kevin@koconnor.net>2018-12-26 16:50:44 -0500
committerKevin O'Connor <kevin@koconnor.net>2019-01-07 19:33:26 -0500
commit94c86d6c6ce85143d47b79f7cc2680c6b0ee6889 (patch)
treea9b8e293c4ba986e306366f039d9b979086bb12b /src/sam4e8e/timer.c
parente278552d44e2d795e335ec33f898c9d6e1413688 (diff)
downloadkutter-94c86d6c6ce85143d47b79f7cc2680c6b0ee6889.tar.gz
kutter-94c86d6c6ce85143d47b79f7cc2680c6b0ee6889.tar.xz
kutter-94c86d6c6ce85143d47b79f7cc2680c6b0ee6889.zip
sam3: Merge sam4e8e support into sam3 code
Most of the peripherals on the sam4e8e are similar to the ones on the sam3x8e mcu. Merge the code together and use just one code directory. Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Diffstat (limited to 'src/sam4e8e/timer.c')
-rw-r--r--src/sam4e8e/timer.c67
1 files changed, 0 insertions, 67 deletions
diff --git a/src/sam4e8e/timer.c b/src/sam4e8e/timer.c
deleted file mode 100644
index 8115ea8a..00000000
--- a/src/sam4e8e/timer.c
+++ /dev/null
@@ -1,67 +0,0 @@
-// SAM4e8e timer port
-//
-// Copyright (C) 2018 Florian Heilmann <Florian.Heilmann@gmx.net>
-//
-// This file may be distributed under the terms of the GNU GPLv3 license.
-
-// CMSIS
-#include "sam4e.h"
-// Klipper
-#include "board/irq.h" // irq_disable
-#include "board/misc.h" // timer_read_time
-#include "board/timer_irq.h" // timer_dispatch_many
-#include "sched.h" // DECL_INIT
-
-// Set the next irq time
-static void
-timer_set(uint32_t value)
-{
- TC0->TC_CHANNEL[0].TC_RA = value;
-}
-
-// Return the current time (in absolute clock ticks).
-uint32_t
-timer_read_time(void)
-{
- return TC0->TC_CHANNEL[0].TC_CV;
-}
-
-// Activate timer dispatch as soon as possible
-void
-timer_kick(void)
-{
- timer_set(timer_read_time() + 50);
- TC0->TC_CHANNEL[0].TC_SR;
-}
-
-void
-timer_init(void)
-{
- if ((PMC->PMC_PCSR0 & (1u << ID_TC0)) == 0) {
- PMC->PMC_PCER0 = 1 << ID_TC0;
- }
- TcChannel *tc_channel = &TC0->TC_CHANNEL[0];
- tc_channel->TC_CCR = TC_CCR_CLKDIS;
- tc_channel->TC_IDR = 0xFFFFFFFF;
- tc_channel->TC_SR;
- tc_channel->TC_CMR = TC_CMR_WAVE | TC_CMR_WAVSEL_UP | TC_CMR_TCCLKS_TIMER_CLOCK1;
- tc_channel->TC_IER = TC_IER_CPAS;
- NVIC_SetPriority(TC0_IRQn, 1);
- NVIC_EnableIRQ(TC0_IRQn);
- timer_kick();
- tc_channel->TC_CCR = TC_CCR_CLKEN | TC_CCR_SWTRG;
-}
-DECL_INIT(timer_init);
-
-// IRQ handler
-void __visible __aligned(16) // aligning helps stabilize perf benchmarks
-TC0_Handler(void)
-{
- irq_disable();
- uint32_t status = TC0->TC_CHANNEL[0].TC_SR;
- if (likely(status & TC_SR_CPAS)) {
- uint32_t next = timer_dispatch_many();
- timer_set(next);
- }
- irq_enable();
-}