summaryrefslogtreecommitdiffstatshomepage
path: root/stm/timer.c
diff options
context:
space:
mode:
authorDamien George <damien.p.george@gmail.com>2014-05-21 20:14:27 +0100
committerDamien George <damien.p.george@gmail.com>2014-05-21 20:14:27 +0100
commitaa7cf6f72f4e8a553f892629bb3338ab8c982d57 (patch)
treeb16167eecc2c5e8e5f84bd710308366a166c55e8 /stm/timer.c
parent63436ce22ee20f56b0083f846261c0b77af9961b (diff)
downloadmicropython-aa7cf6f72f4e8a553f892629bb3338ab8c982d57.tar.gz
micropython-aa7cf6f72f4e8a553f892629bb3338ab8c982d57.zip
stm: Remove long-obsolete stm/ port.
Diffstat (limited to 'stm/timer.c')
-rw-r--r--stm/timer.c98
1 files changed, 0 insertions, 98 deletions
diff --git a/stm/timer.c b/stm/timer.c
deleted file mode 100644
index 8d51de2cc1..0000000000
--- a/stm/timer.c
+++ /dev/null
@@ -1,98 +0,0 @@
-#include <stdint.h>
-#include <stdio.h>
-#include <string.h>
-
-#include "stm_misc.h"
-#include "stm32f4xx_rcc.h"
-#include "stm32f4xx_tim.h"
-
-#include "mpconfig.h"
-#include "nlr.h"
-#include "misc.h"
-#include "qstr.h"
-#include "parse.h"
-#include "obj.h"
-#include "runtime.h"
-
-#include "timer.h"
-
-// TIM6 is used as an internal interrup to schedule something at a specific rate
-mp_obj_t timer_py_callback;
-
-mp_obj_t timer_py_set_callback(mp_obj_t f) {
- timer_py_callback = f;
- return mp_const_none;
-}
-
-mp_obj_t timer_py_set_period(mp_obj_t period) {
- TIM6->ARR = mp_obj_get_int(period) & 0xffff;
- return mp_const_none;
-}
-
-mp_obj_t timer_py_set_prescaler(mp_obj_t prescaler) {
- TIM6->PSC = mp_obj_get_int(prescaler) & 0xffff;
- return mp_const_none;
-}
-
-mp_obj_t timer_py_get_value(void) {
- return mp_obj_new_int(TIM6->CNT & 0xfffff);
-}
-
-void timer_init(void) {
- timer_py_callback = mp_const_none;
-
- // TIM6 clock enable
- RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM6, ENABLE);
-
- // Compute the prescaler value so TIM6 runs at 20kHz
- uint16_t PrescalerValue = (uint16_t) ((SystemCoreClock / 2) / 20000) - 1;
-
- // Time base configuration
- TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
- TIM_TimeBaseStructure.TIM_Period = 20000; // timer cycles at 1Hz
- TIM_TimeBaseStructure.TIM_Prescaler = PrescalerValue;
- TIM_TimeBaseStructure.TIM_ClockDivision = 0; // unused for TIM6
- TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; // unused for TIM6
- TIM_TimeBaseInit(TIM6, &TIM_TimeBaseStructure);
-
- // enable perhipheral preload register
- TIM_ARRPreloadConfig(TIM6, ENABLE);
-
- // enable interrupt when counter overflows
- TIM_ITConfig(TIM6, TIM_IT_Update, ENABLE);
-
- // set up interrupt
- NVIC_InitTypeDef NVIC_InitStructure;
- NVIC_InitStructure.NVIC_IRQChannel = TIM6_DAC_IRQn;
- NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x0f; // lowest priority
- NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x0f; // lowest priority
- NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
- NVIC_Init(&NVIC_InitStructure);
-
- // TIM6 enable counter
- TIM_Cmd(TIM6, ENABLE);
-
- // Python interface
- mp_obj_t m = mp_obj_new_module(QSTR_FROM_STR_STATIC("timer"));
- mp_store_attr(m, QSTR_FROM_STR_STATIC("callback"), mp_make_function_n(1, timer_py_set_callback));
- mp_store_attr(m, QSTR_FROM_STR_STATIC("period"), mp_make_function_n(1, timer_py_set_period));
- mp_store_attr(m, QSTR_FROM_STR_STATIC("prescaler"), mp_make_function_n(1, timer_py_set_prescaler));
- mp_store_attr(m, QSTR_FROM_STR_STATIC("value"), mp_make_function_n(0, timer_py_get_value));
- mp_store_name(QSTR_FROM_STR_STATIC("timer"), m);
-}
-
-void timer_interrupt(void) {
- if (timer_py_callback != mp_const_none) {
- nlr_buf_t nlr;
- if (nlr_push(&nlr) == 0) {
- // XXX what to do if the GC is in the middle of running??
- mp_call_function_0(timer_py_callback);
- nlr_pop();
- } else {
- // uncaught exception
- printf("exception in timer interrupt\n");
- mp_obj_print((mp_obj_t)nlr.ret_val, PRINT_REPR);
- printf("\n");
- }
- }
-}