summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
authorDamien George <damien.p.george@gmail.com>2014-07-02 14:06:28 +0100
committerDamien George <damien.p.george@gmail.com>2014-07-02 14:06:28 +0100
commit92a47b4dae14189cfd6572ee6eef09b973069d0d (patch)
treecc2b8729380716c83af74bbb65133366772b6576
parent9cd96cf25d4b044288a923dae63e8e7d8c261c7b (diff)
parent0d81c133b31774058408a5f1d1a058d9734a9def (diff)
downloadmicropython-92a47b4dae14189cfd6572ee6eef09b973069d0d.tar.gz
micropython-92a47b4dae14189cfd6572ee6eef09b973069d0d.zip
Merge branch 'add-timer-deinit' of github.com:dhylands/micropython into dhylands-add-timer-deinit
-rw-r--r--stmhal/main.c2
-rw-r--r--stmhal/timer.c23
-rw-r--r--stmhal/timer.h2
3 files changed, 24 insertions, 3 deletions
diff --git a/stmhal/main.c b/stmhal/main.c
index 0e260e18cd..c674574575 100644
--- a/stmhal/main.c
+++ b/stmhal/main.c
@@ -548,6 +548,8 @@ soft_reset:
printf("PYB: sync filesystems\n");
storage_flush();
+ timer_deinit();
+
printf("PYB: soft reboot\n");
first_soft_reset = false;
diff --git a/stmhal/timer.c b/stmhal/timer.c
index ec0c4dec4c..8634c46bf2 100644
--- a/stmhal/timer.c
+++ b/stmhal/timer.c
@@ -366,13 +366,20 @@ STATIC mp_obj_t pyb_timer_init(uint n_args, const mp_obj_t *args, mp_map_t *kw_a
}
STATIC MP_DEFINE_CONST_FUN_OBJ_KW(pyb_timer_init_obj, 1, pyb_timer_init);
+STATIC mp_obj_t pyb_timer_callback(mp_obj_t self_in, mp_obj_t callback);
+
/// \method deinit()
/// Deinitialises the timer.
///
-/// *This function is not yet implemented.*
+/// Disables the callback (and the associated irq).
+/// Stops the timer, and disables the timer peripheral.
STATIC mp_obj_t pyb_timer_deinit(mp_obj_t self_in) {
- //pyb_timer_obj_t *self = self_in;
- // TODO implement me
+ pyb_timer_obj_t *self = self_in;
+
+ // Disable the interrupt
+ pyb_timer_callback(self_in, mp_const_none);
+
+ HAL_TIM_Base_DeInit(&self->tim);
return mp_const_none;
}
STATIC MP_DEFINE_CONST_FUN_OBJ_1(pyb_timer_deinit_obj, pyb_timer_deinit);
@@ -464,6 +471,16 @@ const mp_obj_type_t pyb_timer_type = {
.locals_dict = (mp_obj_t)&pyb_timer_locals_dict,
};
+// Unregister all interrupt sources
+void timer_deinit(void) {
+ for (uint i = 0; i < PYB_TIMER_OBJ_ALL_NUM; i++) {
+ pyb_timer_obj_t *tim = pyb_timer_obj_all[i];
+ if (tim != NULL) {
+ pyb_timer_deinit(tim);
+ }
+ }
+}
+
void timer_irq_handler(uint tim_id) {
if (tim_id - 1 < PYB_TIMER_OBJ_ALL_NUM) {
// get the timer object
diff --git a/stmhal/timer.h b/stmhal/timer.h
index 9b19d1cd12..2a892db285 100644
--- a/stmhal/timer.h
+++ b/stmhal/timer.h
@@ -40,4 +40,6 @@ void timer_tim3_init(void);
void timer_tim5_init(void);
void timer_tim6_init(uint freq);
+void timer_deinit(void);
+
void timer_irq_handler(uint tim_id);