summaryrefslogtreecommitdiffstatshomepage
path: root/stmhal/timer.c
diff options
context:
space:
mode:
authorDamien George <damien.p.george@gmail.com>2016-01-29 22:31:56 +0000
committerDamien George <damien.p.george@gmail.com>2016-01-29 22:31:56 +0000
commitea89b80ff4f842b010f9f8ec3280675f81bc6bc5 (patch)
treee3879bcf6d78ee5efeb8cfea32ccad80cf5763e6 /stmhal/timer.c
parentd3631339176b768ce1ffdc535223385245ff906b (diff)
downloadmicropython-ea89b80ff4f842b010f9f8ec3280675f81bc6bc5.tar.gz
micropython-ea89b80ff4f842b010f9f8ec3280675f81bc6bc5.zip
stmhal: Make TIM3 available for use by the user.
TIM3 is no longer used by USB CDC for triggering outgoing data, so we can now make it available to the user. PWM fading on LED(4) is now gone, but will be reinstated in a new way.
Diffstat (limited to 'stmhal/timer.c')
-rw-r--r--stmhal/timer.c41
1 files changed, 1 insertions, 40 deletions
diff --git a/stmhal/timer.c b/stmhal/timer.c
index 850e0c8298..9caa056a2f 100644
--- a/stmhal/timer.c
+++ b/stmhal/timer.c
@@ -68,7 +68,7 @@
/// tim.callback(lambda t: ...) # set callback for update interrupt (t=tim instance)
/// tim.callback(None) # clear callback
///
-/// *Note:* Timer 3 is reserved for internal use. Timer 5 controls
+/// *Note:* Timer 3 is used for fading the blue LED. Timer 5 controls
/// the servo driver, and Timer 6 is used for timed ADC/DAC reading/writing.
/// It is recommended to use the other timers in your programs.
@@ -76,8 +76,6 @@
// the interrupts to be dispatched, so they are all collected here.
//
// TIM3:
-// - flash storage controller, to flush the cache
-// - USB CDC interface, interval, to check for new data
// - LED 4, PWM to set the LED intensity
//
// TIM5:
@@ -144,7 +142,6 @@ typedef struct _pyb_timer_obj_t {
#define TIMER_CNT_MASK(self) ((self)->is_32bit ? 0xffffffff : 0xffff)
#define TIMER_CHANNEL(self) ((((self)->channel) - 1) << 2)
-TIM_HandleTypeDef TIM3_Handle;
TIM_HandleTypeDef TIM5_Handle;
TIM_HandleTypeDef TIM6_Handle;
@@ -171,34 +168,6 @@ void timer_deinit(void) {
}
}
-// TIM3 is set-up for the USB CDC interface
-void timer_tim3_init(void) {
- // set up the timer for USBD CDC
- __TIM3_CLK_ENABLE();
-
- TIM3_Handle.Instance = TIM3;
- TIM3_Handle.Init.Period = (USBD_CDC_POLLING_INTERVAL*1000) - 1; // TIM3 fires every USBD_CDC_POLLING_INTERVAL ms
- TIM3_Handle.Init.Prescaler = timer_get_source_freq(3) / 1000000 - 1; // TIM3 runs at 1MHz
- TIM3_Handle.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
- TIM3_Handle.Init.CounterMode = TIM_COUNTERMODE_UP;
- HAL_TIM_Base_Init(&TIM3_Handle);
-
- HAL_NVIC_SetPriority(TIM3_IRQn, IRQ_PRI_TIM3, IRQ_SUBPRI_TIM3);
- HAL_NVIC_EnableIRQ(TIM3_IRQn);
-
- if (HAL_TIM_Base_Start(&TIM3_Handle) != HAL_OK) {
- /* Starting Error */
- }
-}
-
-/* unused
-void timer_tim3_deinit(void) {
- // reset TIM3 timer
- __TIM3_FORCE_RESET();
- __TIM3_RELEASE_RESET();
-}
-*/
-
// TIM5 is set-up for the servo controller
// This function inits but does not start the timer
void timer_tim5_init(void) {
@@ -250,10 +219,6 @@ TIM_HandleTypeDef *timer_tim6_init(uint freq) {
// Interrupt dispatch
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) {
- #if !defined(MICROPY_HW_USE_ALT_IRQ_FOR_CDC)
- if (htim == &TIM3_Handle) {
- } else
- #endif
if (htim == &TIM5_Handle) {
servo_timer_irq_callback();
}
@@ -655,11 +620,7 @@ STATIC mp_obj_t pyb_timer_make_new(const mp_obj_type_t *type, mp_uint_t n_args,
switch (tim->tim_id) {
case 1: tim->tim.Instance = TIM1; tim->irqn = TIM1_UP_TIM10_IRQn; break;
case 2: tim->tim.Instance = TIM2; tim->irqn = TIM2_IRQn; tim->is_32bit = true; break;
- #if defined(MICROPY_HW_USE_ALT_IRQ_FOR_CDC)
case 3: tim->tim.Instance = TIM3; tim->irqn = TIM3_IRQn; break;
- #else
- case 3: nlr_raise(mp_obj_new_exception_msg(&mp_type_ValueError, "Timer 3 is for internal use only")); // TIM3 used for low-level stuff; go via regs if necessary
- #endif
case 4: tim->tim.Instance = TIM4; tim->irqn = TIM4_IRQn; break;
case 5: tim->tim.Instance = TIM5; tim->irqn = TIM5_IRQn; tim->is_32bit = true; break;
#if defined(TIM6)