La version de horloge généralisée et maintenant disponible. Elle sera l'unique pilote horloge, on n'utilisera plus Timer.c, qui est donc retirée.
This commit is contained in:
parent
399ce1d926
commit
6e0c198702
3 changed files with 64 additions and 55 deletions
|
|
@ -1,8 +0,0 @@
|
|||
#ifndef TIMER_H_
|
||||
#define TIMER_H_
|
||||
#include "stm32f10x.h"
|
||||
// Config de timer
|
||||
extern void MyTimer_Base_Init(TIM_TypeDef *Timer , unsigned short ValARR , unsigned short ValPSC );
|
||||
// Enable timers
|
||||
void EnableTimer(TIM_TypeDef *Timer);
|
||||
#endif
|
||||
|
|
@ -2,18 +2,26 @@
|
|||
#include "Horloge.h"
|
||||
|
||||
static void (*TIM2_Appel)(void) = 0;
|
||||
static void (*TIM3_Appel)(void) = 0;
|
||||
static void (*TIM4_Appel)(void) = 0;
|
||||
|
||||
|
||||
void Timer_Init(TIM_TypeDef *Timer, unsigned short Autoreload, unsigned short Prescaler) {
|
||||
if (Timer == TIM1) {
|
||||
RCC->APB2ENR |= RCC_APB2ENR_TIM1EN;
|
||||
} else if (Timer == TIM2) {
|
||||
TIM2->CR1 |= TIM_CR1_CEN;
|
||||
RCC->APB1ENR |= RCC_APB1ENR_TIM2EN;
|
||||
} else if (Timer == TIM3) {
|
||||
RCC->APB1ENR |= RCC_APB1ENR_TIM3EN;
|
||||
} else if (Timer == TIM4) {
|
||||
RCC->APB1ENR |= RCC_APB1ENR_TIM4EN;
|
||||
// On ne l'utilise JAMAIS!!
|
||||
RCC->APB2ENR |= RCC_APB2ENR_TIM1EN;
|
||||
}
|
||||
else if (Timer == TIM2) {
|
||||
TIM2->CR1 |= TIM_CR1_CEN;
|
||||
RCC->APB1ENR |= RCC_APB1ENR_TIM2EN;
|
||||
}
|
||||
else if (Timer == TIM3) {
|
||||
TIM3->CR1 |= TIM_CR1_CEN;
|
||||
RCC->APB1ENR |= RCC_APB1ENR_TIM3EN;
|
||||
}
|
||||
else if (Timer == TIM4) {
|
||||
TIM3->CR1 |= TIM_CR1_CEN;
|
||||
RCC->APB1ENR |= RCC_APB1ENR_TIM4EN;
|
||||
}
|
||||
Timer->ARR |= Autoreload;
|
||||
Timer->PSC |= Prescaler;
|
||||
|
|
@ -21,18 +29,8 @@ void Timer_Init(TIM_TypeDef *Timer, unsigned short Autoreload, unsigned short Pr
|
|||
}
|
||||
|
||||
|
||||
//La fonction TIM2_IRQHandler existe déjà dans le processeur, on l'a juste redifint, tel qu'à chaque overflow on met un bit 1 dans GPIOA_ODR
|
||||
void TIM2_IRQHandler(void) { //On redefinit le IRQHandler qui est déjà ecrit dans le code source
|
||||
if (TIM2->SR & TIM_SR_UIF) { //On met le bit de overflow à un dès qu'on a overflow
|
||||
TIM2->SR &= ~TIM_SR_UIF; //Remise à zero
|
||||
|
||||
if (TIM2_Appel){TIM2_Appel();}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void MyTimer_ActiveIT(TIM_TypeDef * Timer, char Prio, void(*Interrupt_fonc)(void)) { //On veut créer une fonction qui envoie un signal au cas où il y a debordement, avec une prioritaire, 0 plus importante 15 moins importante
|
||||
if (Timer == TIM2){
|
||||
if (Timer == TIM2) {
|
||||
TIM2_Appel = Interrupt_fonc;
|
||||
|
||||
NVIC_EnableIRQ(TIM2_IRQn);
|
||||
|
|
@ -40,6 +38,53 @@ void MyTimer_ActiveIT(TIM_TypeDef * Timer, char Prio, void(*Interrupt_fonc)(void
|
|||
TIM2->DIER |= TIM_DIER_UIE; //Le registre DIER(Interrupt Enable Register) est mis au bit Update Interrupt, qui se commute lors d'un overflow
|
||||
TIM2->CR1 |= TIM_CR1_CEN; //Clock Enable
|
||||
}
|
||||
else if (Timer == TIM3) {
|
||||
TIM3_Appel = Interrupt_fonc;
|
||||
|
||||
NVIC_EnableIRQ(TIM3_IRQn);
|
||||
NVIC_SetPriority(TIM2_IRQn, Prio);
|
||||
TIM3->DIER |= TIM_DIER_UIE;
|
||||
TIM3->CR1 |= TIM_CR1_CEN;
|
||||
}
|
||||
else if (Timer == TIM4) {
|
||||
TIM4_Appel = Interrupt_fonc;
|
||||
|
||||
NVIC_EnableIRQ(TIM4_IRQn);
|
||||
NVIC_SetPriority(TIM4_IRQn, Prio);
|
||||
TIM4->DIER |= TIM_DIER_UIE;
|
||||
TIM4->CR1 |= TIM_CR1_CEN;
|
||||
}
|
||||
else if (Timer == TIM1) {
|
||||
// On n'utilise pas TIM1
|
||||
}
|
||||
else {
|
||||
// L'horloge n'existe pas
|
||||
}
|
||||
}
|
||||
|
||||
//La fonction TIM2_IRQHandler existe déjà dans le processeur, on l'a juste redifint, tel qu'à chaque overflow on met un bit 1 dans GPIOA_ODR
|
||||
void TIM2_IRQHandler(void) { //On redefinit le IRQHandler qui est déjà ecrit dans le code source
|
||||
if (TIM2->SR & TIM_SR_UIF) { //On met le bit de overflow à un dès qu'on a overflow
|
||||
TIM2->SR &= ~TIM_SR_UIF; //Remise à zero
|
||||
if (TIM2_Appel){TIM2_Appel();}
|
||||
}
|
||||
}
|
||||
|
||||
//La fonction TIM3_IRQHandler existe déjà dans le processeur, on l'a juste redifint, tel qu'à chaque overflow on met un bit 1 dans GPIOA_ODR
|
||||
void TIM3_IRQHandler(void) { //On redefinit le IRQHandler qui est déjà ecrit dans le code source
|
||||
if (TIM3->SR & TIM_SR_UIF) { //On met le bit de overflow à un dès qu'on a overflow
|
||||
TIM3->SR &= ~TIM_SR_UIF; //Remise à zero
|
||||
if (TIM3_Appel){TIM3_Appel();}
|
||||
}
|
||||
}
|
||||
|
||||
//La fonction TIM4_IRQHandler existe déjà dans le processeur, on l'a juste redifint, tel qu'à chaque overflow on met un bit 1 dans GPIOA_ODR
|
||||
void TIM4_IRQHandler(void) { //On redefinit le IRQHandler qui est déjà ecrit dans le code source
|
||||
if (TIM4->SR & TIM_SR_UIF) { //On met le bit de overflow à un dès qu'on a overflow
|
||||
TIM4->SR &= ~TIM_SR_UIF; //Remise à zero
|
||||
if (TIM4_Appel){TIM4_Appel();}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -1,28 +0,0 @@
|
|||
#include <stm32f10x.h>
|
||||
#include "Timer.h"
|
||||
|
||||
|
||||
void MyTimer_Base_Init(TIM_TypeDef * Timer, unsigned short ValARR, unsigned short ValPSC) { // Configuration du timer
|
||||
Timer -> PSC=(ValPSC);
|
||||
Timer-> ARR = (ValARR);
|
||||
Timer->EGR |= TIM_EGR_UG;
|
||||
};
|
||||
|
||||
|
||||
void EnableTimer(TIM_TypeDef *Timer) {
|
||||
if(Timer == TIM2){
|
||||
RCC -> APB1ENR |= RCC_APB1ENR_TIM2EN;
|
||||
}
|
||||
else if(Timer == TIM3){
|
||||
RCC -> APB1ENR |= RCC_APB1ENR_TIM3EN;
|
||||
}
|
||||
else if(Timer == TIM4){
|
||||
RCC -> APB1ENR |= RCC_APB1ENR_TIM4EN;
|
||||
}
|
||||
else if(Timer == TIM1){
|
||||
RCC->APB2ENR |= RCC_APB2ENR_TIM1EN;
|
||||
}
|
||||
else{
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
Reference in a new issue