diff options
author | Florian Heilmann <Florian.Heilmann@gmx.net> | 2019-01-13 02:14:50 +0100 |
---|---|---|
committer | KevinOConnor <kevin@koconnor.net> | 2019-01-12 20:14:50 -0500 |
commit | 6256599a6dfc0c52a3c5e019c470d4cc46feeb82 (patch) | |
tree | 4453913a6178a06e3f58dbfc530e6d65291473d3 /src/samd21/timer.c | |
parent | 432e6c490a229f71d608ec0391773ab7f90534d1 (diff) | |
download | kutter-6256599a6dfc0c52a3c5e019c470d4cc46feeb82.tar.gz kutter-6256599a6dfc0c52a3c5e019c470d4cc46feeb82.tar.xz kutter-6256599a6dfc0c52a3c5e019c470d4cc46feeb82.zip |
src: Rename source folders for atsam and atsamd architectures
Signed-off-by: Florian Heilmann <Florian.Heilmann@gmx.net>
Diffstat (limited to 'src/samd21/timer.c')
-rw-r--r-- | src/samd21/timer.c | 66 |
1 files changed, 0 insertions, 66 deletions
diff --git a/src/samd21/timer.c b/src/samd21/timer.c deleted file mode 100644 index 882b4c10..00000000 --- a/src/samd21/timer.c +++ /dev/null @@ -1,66 +0,0 @@ -// SAMD21 timer interrupt scheduling -// -// Copyright (C) 2018 Kevin O'Connor <kevin@koconnor.net> -// -// This file may be distributed under the terms of the GNU GPLv3 license. - -#include "board/irq.h" // irq_disable -#include "board/misc.h" // timer_read_time -#include "board/timer_irq.h" // timer_dispatch_many -#include "internal.h" // enable_pclock -#include "samd21.h" // TC4 -#include "sched.h" // DECL_INIT - -// Set the next irq time -static void -timer_set(uint32_t value) -{ - TC4->COUNT32.CC[0].reg = value; - TC4->COUNT32.INTFLAG.reg = TC_INTFLAG_MC0; -} - -// Return the current time (in absolute clock ticks). -uint32_t -timer_read_time(void) -{ - return TC4->COUNT32.COUNT.reg; -} - -// Activate timer dispatch as soon as possible -void -timer_kick(void) -{ - timer_set(timer_read_time() + 50); -} - -void -timer_init(void) -{ - // Supply power and clock to the timer - enable_pclock(TC3_GCLK_ID, PM_APBCMASK_TC3); - enable_pclock(TC4_GCLK_ID, PM_APBCMASK_TC4); - - // Configure the timer - TcCount32 *tc = &TC4->COUNT32; - irqstatus_t flag = irq_save(); - tc->CTRLA.reg = 0; - tc->CTRLA.reg = TC_CTRLA_MODE_COUNT32; - NVIC_SetPriority(TC4_IRQn, 2); - NVIC_EnableIRQ(TC4_IRQn); - tc->INTENSET.reg = TC_INTENSET_MC0; - tc->COUNT.reg = 0; - timer_kick(); - tc->CTRLA.reg = TC_CTRLA_MODE_COUNT32 | TC_CTRLA_ENABLE; - irq_restore(flag); -} -DECL_INIT(timer_init); - -// IRQ handler -void __visible __aligned(16) // aligning helps stabilize perf benchmarks -TC4_Handler(void) -{ - irq_disable(); - uint32_t next = timer_dispatch_many(); - timer_set(next); - irq_enable(); -} |