Merge branch 'dhylands-add-timer-deinit'

This commit is contained in:
Damien George 2014-07-02 14:10:18 +01:00
commit 5e6419cb11
3 changed files with 24 additions and 3 deletions

View File

@ -549,6 +549,7 @@ soft_reset:
storage_flush(); storage_flush();
printf("PYB: soft reboot\n"); printf("PYB: soft reboot\n");
timer_deinit();
first_soft_reset = false; first_soft_reset = false;
goto soft_reset; goto soft_reset;

View File

@ -107,6 +107,9 @@ static uint32_t tim3_counter = 0;
STATIC pyb_timer_obj_t *pyb_timer_obj_all[14]; STATIC pyb_timer_obj_t *pyb_timer_obj_all[14];
#define PYB_TIMER_OBJ_ALL_NUM MP_ARRAY_SIZE(pyb_timer_obj_all) #define PYB_TIMER_OBJ_ALL_NUM MP_ARRAY_SIZE(pyb_timer_obj_all)
STATIC mp_obj_t pyb_timer_deinit(mp_obj_t self_in);
STATIC mp_obj_t pyb_timer_callback(mp_obj_t self_in, mp_obj_t callback);
void timer_init0(void) { void timer_init0(void) {
tim3_counter = 0; tim3_counter = 0;
for (uint i = 0; i < PYB_TIMER_OBJ_ALL_NUM; i++) { for (uint i = 0; i < PYB_TIMER_OBJ_ALL_NUM; i++) {
@ -114,6 +117,16 @@ void timer_init0(void) {
} }
} }
// 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);
}
}
}
// TIM3 is set-up for the USB CDC interface // TIM3 is set-up for the USB CDC interface
void timer_tim3_init(void) { void timer_tim3_init(void) {
// set up the timer for USBD CDC // set up the timer for USBD CDC
@ -369,10 +382,15 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_KW(pyb_timer_init_obj, 1, pyb_timer_init);
/// \method deinit() /// \method deinit()
/// Deinitialises the timer. /// 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) { STATIC mp_obj_t pyb_timer_deinit(mp_obj_t self_in) {
//pyb_timer_obj_t *self = self_in; pyb_timer_obj_t *self = self_in;
// TODO implement me
// Disable the interrupt
pyb_timer_callback(self_in, mp_const_none);
HAL_TIM_Base_DeInit(&self->tim);
return mp_const_none; return mp_const_none;
} }
STATIC MP_DEFINE_CONST_FUN_OBJ_1(pyb_timer_deinit_obj, pyb_timer_deinit); STATIC MP_DEFINE_CONST_FUN_OBJ_1(pyb_timer_deinit_obj, pyb_timer_deinit);

View File

@ -40,4 +40,6 @@ void timer_tim3_init(void);
void timer_tim5_init(void); void timer_tim5_init(void);
void timer_tim6_init(uint freq); void timer_tim6_init(uint freq);
void timer_deinit(void);
void timer_irq_handler(uint tim_id); void timer_irq_handler(uint tim_id);