#include "Driver_ADC.h" #include "Driver_GPIO.h" void (*PtrfctADC)(void); //Déclaration du pointeur de fonction ADC //---------------------INIT-------------------// void MyADC_Base_Init(MyADC_Struct_TypeDef * ADC){ MyGPIO_Struct_TypeDef * GPIO_ADC; //Déclaration du GPIO de l'ADC RCC->CFGR |= RCC_CFGR_ADCPRE_DIV6; //Division par 6 de la clock (72MHz) pour l'ADC (12MHz) RCC->APB2ENR |= RCC_APB2ENR_ADC1EN; //Start clock ADC1 GPIO_ADC->GPIO = GPIOC; //Initialisation du GPIO de l'ADC GPIO_ADC->GPIO_Conf = In_Analog; GPIO_ADC->GPIO_Pin = 0; MyGPIO_Init(GPIO_ADC); ADC1->SQR1 &= ADC_SQR1_L; //fixe le nombre de conversion à 1 ADC1->SQR3|= ADC->Channel; //indique la voie à convertir ADC1->CR2 |= ADC_CR2_EXTTRIG; //activation du trigger externe ADC1->CR2 |= ADC_CR2_EXTSEL; //event externe choisis : SWSTART MyADC_Base_Start(ADC->ADC); //Sart ADC1 et Horloge ADC1 } //--------------------START-------------------// void MyADC_Base_Start(ADC_TypeDef * ADC){ ADC1->CR2 |= ADC_CR2_ADON; } //------------------INTERRUPTION--------------// void MyADC_Base_Interuption(ADC_TypeDef * ADC){ //Activation du trigger externe ADC->CR1 |= ADC_CR1_EOCIE; //Interruption de l'ADC autorisée NVIC->ISER[0] |= (0x1<IP[ADC1_2_IRQn] |= 1<<4; //Affectation du niveau de priorité } //--------------------HANDLER-----------------// void ADC1_2_IRQHandler (void) { (*PtrfctADC)(); //Appel de la fonction pointée par le pointeur fonction ADC MyADC_Base_Start(ADC1); ADC1->SR &= ~ADC_SR_EOC; //RAZ du flag end of conversion } //--------------------DATA--------------------// int MyADC_Base_Result (MyADC_Struct_TypeDef * ADC){ return ADC1->DR & ~((0x0F)<<12); //Retour de la conversion de l'ADC } //-------------------POINTEUR-----------------// void MyADC_Init_Periph (void (*fct)(void)){ PtrfctADC=fct; //Affectation du pointeur de fonction ADC }