Les fichiers Driver_SPI sont des versions personnelles non fonctionelle de la gestion du SPI. C'est la bibliothèque MySPI qui est utilisée dans le projet. Ajout de commentaires dans tous les fichiers driver en format doxygen.
70 lines
1.9 KiB
C
70 lines
1.9 KiB
C
#include "stm32f10x.h"
|
||
#include "stdio.h"
|
||
#include "Driver_ADC.h"
|
||
void erreur (void)
|
||
{
|
||
while(1);
|
||
}
|
||
|
||
void (*ADC1_2_fx) (void) = &erreur;
|
||
|
||
|
||
/**
|
||
*************************************************************************************************
|
||
* @brief Activation et configuration de l'ADC1.
|
||
* @param -> Priorité de l'intérruption.
|
||
* @Note -> Fonction à lancer systématiquement avant d’aller plus en détail dans les conf plus fines (PWM, codeur inc...)
|
||
*************************************************************************************************
|
||
*/
|
||
void driver_adc_1_init (char Prio, void (*IT_function)(void))
|
||
{
|
||
//On règle la fréquence à 12Mhz
|
||
RCC->CFGR |= RCC_CFGR_ADCPRE_DIV6;
|
||
//Validation de l'horloge ACD1
|
||
RCC->APB2ENR |= RCC_APB2ENR_ADC1EN;
|
||
//Activation de l'external trig
|
||
ADC1->CR2 |= ADC_CR2_EXTTRIG;
|
||
//Activation SWSTART
|
||
ADC1->CR2 |= ADC_CR2_EXTSEL;
|
||
//Validation de l'horloge ACD1
|
||
RCC->APB2ENR |= RCC_APB2ENR_ADC1EN;
|
||
//Activation de l'ADC1
|
||
ADC1->CR2 |= ADC_CR2_ADON;
|
||
//Fixe le nb de conversion, ici 1
|
||
ADC1->SQR1 &= ADC_SQR1_L;
|
||
//Numéro de voie à convertir
|
||
ADC1->SQR3 |= 1;
|
||
//Lancement de la calibration
|
||
ADC1->CR2 |= ADC_CR2_CAL;
|
||
//Attente de la fin de la calibration
|
||
while((ADC1->CR2 & ADC_CR2_CAL));
|
||
//Activation de l'intéruption sur le flag EOC
|
||
ADC1->CR1 |= ADC_CR1_EOCIE;
|
||
//Activation de l'intéruption et configuration du niveau de priorité
|
||
NVIC_EnableIRQ(ADC1_2_IRQn);
|
||
NVIC_SetPriority(ADC1_2_IRQn, Prio);
|
||
//Fonction à appeler à l'intéruption
|
||
ADC1_2_fx = IT_function;
|
||
}
|
||
|
||
/* Fonction de lancement*/
|
||
void driver_adc_1_launch_read (void)
|
||
{
|
||
//Lancement de la conversion
|
||
ADC1->CR2 |= ADC_CR2_SWSTART;
|
||
}
|
||
|
||
/*Lecture de la converstion*/
|
||
uint16_t driver_adc_1_read (void)
|
||
{
|
||
//Retour de la conversion
|
||
return ADC1->DR &~ ((0x0F) << 12);
|
||
}
|
||
|
||
void ADC1_2_IRQHandler(void)
|
||
{
|
||
//On abaisse le flag pour la prochaine lecture
|
||
ADC1->SR &= ~ADC_SR_EOC;
|
||
//On lance la fonction de l'utilisateur
|
||
(*ADC1_2_fx)();
|
||
}
|