From 1f78d3422b63d1299de0a744f0b429e31ce69357 Mon Sep 17 00:00:00 2001 From: Arnaud Cadot Date: Sun, 20 Mar 2016 22:36:19 +0100 Subject: [PATCH] Moved interruption code to class Clock --- stm32/src/asservissement/asservissement.cpp | 33 +++++++++++---------- stm32/src/clock.cpp | 27 +++++++++++++++++ stm32/src/initialisation.cpp | 3 +- 3 files changed, 46 insertions(+), 17 deletions(-) diff --git a/stm32/src/asservissement/asservissement.cpp b/stm32/src/asservissement/asservissement.cpp index c512fda2..34f36589 100644 --- a/stm32/src/asservissement/asservissement.cpp +++ b/stm32/src/asservissement/asservissement.cpp @@ -91,24 +91,25 @@ Asservissement::Asservissement(Odometrie* _odometrie) : testMod(false), testRunn #ifdef CAPTEURS sensors = Sensors::getSensors(); #endif +#if 0 + #ifdef ROBOTHW //on définie les interruptions possibles dues à certains ports + *((uint32_t *)(STK_CTRL_ADDR)) = 0x03; // CLKSOURCE:0 ; TICKINT: 1 ; ENABLE:1 + #ifdef STM32F40_41xxx + *((uint32_t *)(STK_LOAD_ADDR)) = 21000*nb_ms_between_updates; // valeur en ms*9000 (doit etre inférieur à 0x00FFFFFF=16 777 215) + #else + *((uint32_t *)(STK_LOAD_ADDR)) = 9000*nb_ms_between_updates; // valeur en ms*9000 (doit etre inférieur à 0x00FFFFFF=16 777 215) + #endif + // le micro controlleur tourne à une frequence f (72Mhz ici), la valeur à mettre est (0.001*(f/8))*(temps en ms entre chaque update) + // voir p190 de la doc -#ifdef ROBOTHW //on définie les interruptions possibles dues à certains ports - *((uint32_t *)(STK_CTRL_ADDR)) = 0x03; // CLKSOURCE:0 ; TICKINT: 1 ; ENABLE:1 -#ifdef STM32F40_41xxx - *((uint32_t *)(STK_LOAD_ADDR)) = 21000*nb_ms_between_updates; // valeur en ms*9000 (doit etre inférieur à 0x00FFFFFF=16 777 215) -#else - *((uint32_t *)(STK_LOAD_ADDR)) = 9000*nb_ms_between_updates; // valeur en ms*9000 (doit etre inférieur à 0x00FFFFFF=16 777 215) -#endif - // le micro controlleur tourne à une frequence f (72Mhz ici), la valeur à mettre est (0.001*(f/8))*(temps en ms entre chaque update) - // voir p190 de la doc - - NVIC_InitTypeDef SysTick_IRQ; + NVIC_InitTypeDef SysTick_IRQ; - SysTick_IRQ.NVIC_IRQChannel = SysTick_IRQn; - SysTick_IRQ.NVIC_IRQChannelCmd = ENABLE; - SysTick_IRQ.NVIC_IRQChannelPreemptionPriority = 0; - SysTick_IRQ.NVIC_IRQChannelSubPriority = 1; - NVIC_Init(&SysTick_IRQ); + SysTick_IRQ.NVIC_IRQChannel = SysTick_IRQn; + SysTick_IRQ.NVIC_IRQChannelCmd = ENABLE; + SysTick_IRQ.NVIC_IRQChannelPreemptionPriority = 0; + SysTick_IRQ.NVIC_IRQChannelSubPriority = 1; + NVIC_Init(&SysTick_IRQ); + #endif #endif } diff --git a/stm32/src/clock.cpp b/stm32/src/clock.cpp index 120e4d05..56331c93 100644 --- a/stm32/src/clock.cpp +++ b/stm32/src/clock.cpp @@ -5,6 +5,16 @@ #include "hardware/tourelle.h" #include "hardware/leds.h" +#ifndef ROBOTHW + #include +#endif + +#ifdef STM32F40_41xxx + #define HW_CLOCK_SPEED 72000000 // 72Mhz +#else + #define HW_CLOCK_SPEED 168000000 // 168Mhz +#endif + void Clock::everyTick() { } @@ -39,6 +49,23 @@ Clock::Clock() m_last5msTick = 0; m_matchStartTime = 0; m_matchStarted = false; + + #ifdef ROBOTHW + *((uint32_t *)(STK_CTRL_ADDR)) = 0x03; // CLKSOURCE:0 ; TICKINT: 1 ; ENABLE:1 + + *((uint32_t *)(STK_LOAD_ADDR)) = (0.001*HW_CLOCK_SPEED*Clock::MS_PER_TICK)/8; // (doit etre inférieur à 0x00FFFFFF=16 777 215) + /* (voir p190 de la doc) */ + + NVIC_InitTypeDef SysTick_IRQ; + + SysTick_IRQ.NVIC_IRQChannel = SysTick_IRQn; + SysTick_IRQ.NVIC_IRQChannelCmd = ENABLE; + SysTick_IRQ.NVIC_IRQChannelPreemptionPriority = 0; + SysTick_IRQ.NVIC_IRQChannelSubPriority = 1; + NVIC_Init(&SysTick_IRQ); + #else + /* Some trick with QTimer here */ + #endif } void Clock::tick() diff --git a/stm32/src/initialisation.cpp b/stm32/src/initialisation.cpp index f62f20d6..a3e0f993 100644 --- a/stm32/src/initialisation.cpp +++ b/stm32/src/initialisation.cpp @@ -45,9 +45,10 @@ void Initialisation::init() #ifdef ROBOTHW tirette->attendreRemise(); tirette->attendreEnlevee(); - Clock::getInstance()->matchStart(); + #endif */ + Clock::getInstance()->matchStart(); // Will also start the callbacks asservissement = new Asservissement(odometrie); #ifdef ROBOTHW -- GitLab