diff --git a/ProjetsKEIL/Drivers/adcdriver.c b/ProjetsKEIL/Drivers/adcdriver.c index 603eea0..4c6320d 100644 --- a/ProjetsKEIL/Drivers/adcdriver.c +++ b/ProjetsKEIL/Drivers/adcdriver.c @@ -1,5 +1,12 @@ #include "adcdriver.h" +void (* pFncADC) (void); /* déclaration d’un pointeur de fonction */ + +void MyADC_Init_Periph (void (* ptrFonction)(void)) +{ + pFncADC = ptrFonction; /* affectation du pointeur */ +} + void MyADC_Init(MyADC_Struct_TypeDef * ADCStructPtr) { RCC->CFGR |= RCC_CFGR_ADCPRE_1; // ADC Prescaler : divided by 6 -> 72MHz to 12MHz @@ -18,16 +25,20 @@ void MyADC_Init(MyADC_Struct_TypeDef * ADCStructPtr) ADCStructPtr->ADC->CR2 |= ADC_CR2_EXTSEL; //Event externe choisie : SWSTART MyADC_ActiveIT(ADCStructPtr->ADC,0); ADCStructPtr->ADC->CR2 |= ADC_CR2_ADON; //Init l'ADC -} - -void MyADC_Start (ADC_TypeDef * ADC) -{ - ADC->CR2 |= ADC_CR2_SWSTART; //Start Conversion of regular channels + MyADC_Base_Start(ADCStructPtr->ADC); //Debut du premier ADC } void MyADC_ActiveIT(ADC_TypeDef * ADC, uint8_t Prio) { - ADC->CR1 |= ADC_CR1_EOCIE; //Interruption active + ADC->CR1 |= ADC_CR1_EOCIE; //Interruption active NVIC->IP[ADC1_2_IRQn] |= (Prio << 0x4); //Prio de l'interruption (p.197 manuel reference RM0008 pour ADC1_IRQn) NVIC->ISER[0] |= (0x1<SR &= ~ADC_SR_EOC; //Prochaine lecture pouvant être effectuée. +} \ No newline at end of file diff --git a/ProjetsKEIL/Drivers/adcdriver.h b/ProjetsKEIL/Drivers/adcdriver.h index 4e66665..98fb2e2 100644 --- a/ProjetsKEIL/Drivers/adcdriver.h +++ b/ProjetsKEIL/Drivers/adcdriver.h @@ -23,8 +23,9 @@ typedef struct void MyADC_Init(MyADC_Struct_TypeDef * ADCStructPtr); void MyADC_ActiveIT(ADC_TypeDef * ADC, uint8_t Prio); -void MyADC_Start (ADC_TypeDef * ADC); +void MyADC_Init_Periph (void (* ptrFonction)(void)); MyGPIO_Struct_TypeDef GPIOFromADC(MyADC_Struct_TypeDef ADC); +#define MyADC_Base_Start(ADC) (ADC->CR2 |= ADC_CR2_SWSTART) #endif diff --git a/ProjetsKEIL/adc/Source/Principale.c b/ProjetsKEIL/adc/Source/Principale.c index 8110b94..097362e 100644 --- a/ProjetsKEIL/adc/Source/Principale.c +++ b/ProjetsKEIL/adc/Source/Principale.c @@ -7,7 +7,7 @@ #define ADON 0 -void ADC1_2_IRQHandler(void) +void LEDClignotte(void) { if(ADC1->DR >= 3102) { @@ -16,8 +16,6 @@ void ADC1_2_IRQHandler(void) else{ MyGPIO_Reset(GPIOA,5); } - MyADC_Start(ADC1); - ADC1->SR &= ~ADC_SR_EOC; //Prochaine lecture pouvant être effectuée. } int main (void) @@ -29,12 +27,9 @@ int main (void) MyGPIO_Init(&led); MyADC_Init(&adcStruct); + MyADC_Init_Periph(LEDClignotte); MyGPIO_Init(&adc); - MyADC_Start(ADC1); - - - while(1){ //MyADC_Start(ADC1); /* diff --git a/ProjetsKEIL/adc/adc.uvoptx b/ProjetsKEIL/adc/adc.uvoptx index 2282a8c..bccba1e 100644 --- a/ProjetsKEIL/adc/adc.uvoptx +++ b/ProjetsKEIL/adc/adc.uvoptx @@ -529,7 +529,7 @@ 2 3 1 - 0 + 1 0 0 ..\Drivers\timerdriver.c