71 lines
2 KiB
C
71 lines
2 KiB
C
#include "ADC_READ.h"
|
|
#include "adc.h"
|
|
#include "dma.h"
|
|
|
|
#define READ_CH 1
|
|
// definisci il vettore per i risultati delle misure
|
|
|
|
|
|
void ADC_calibrate(){
|
|
// calibrazione
|
|
// ADC3->CR |= ADC_CR_ADCALDIF; // SOLO per misure differenziali (defualt=0)
|
|
// esegui anche calibrazione linearità (oltre che offest)
|
|
ADC3->CR |= ADC_CR_ADCALLIN;
|
|
// inizia la calibrazione
|
|
ADC3->CR |= ADC_CR_ADCAL;
|
|
}
|
|
|
|
void DMA_init(){
|
|
// DMA per USART (DMA1 stream3)
|
|
DMA1_Stream3->M0AR = (uint32_t) &results;
|
|
DMA1_Stream3->PAR = (uint32_t) &(USART3->TDR);
|
|
DMA1_Stream3->NDTR = (uint16_t) (N_MEAS+1)*2; // send signle bytes
|
|
|
|
DMA1->LIFCR = 0xffffffff;
|
|
DMA1->HIFCR = 0xffffffff;
|
|
DMA1_Stream3->CR |= DMA_SxCR_TCIE;
|
|
|
|
// DMA per ADC (DMA2 stream0)
|
|
DMA2_Stream0->M0AR = (uint32_t) &results;
|
|
DMA2_Stream0->PAR = (uint32_t) &(ADC3->DR);
|
|
DMA2_Stream0->NDTR = (uint16_t) N_MEAS;
|
|
|
|
DMA2->LIFCR = 0xffffffff;
|
|
DMA2->HIFCR = 0xffffffff;
|
|
DMA2_Stream0->CR |= DMA_SxCR_TCIE;
|
|
}
|
|
|
|
void ADC_READ_init(){
|
|
|
|
// TIM6 conf.
|
|
TIM6 -> PSC = 6000; // set single timer ticks to 0.25us (240MHz/30 = 4MHz) - 240MHz is APB1 clock freq.
|
|
TIM6 -> CNT = 0;
|
|
TIM6 -> ARR = 4; // 1/4 us
|
|
|
|
// configura canali da leggere in modalità sequenziale
|
|
ADC3->SQR1 = 0;
|
|
ADC3->SQR1 |= (READ_CH << ADC_SQR1_SQ1_Pos);
|
|
// imposta una sola misura (lui misura L+1 canali dove L è il valore impostato in questo reg.)
|
|
ADC3->SQR1 |= (0 << ADC_SQR1_L_Pos);
|
|
// abilita i canali da utilizzare nel multiplexer
|
|
ADC3->PCSEL |= ADC_PCSEL_PCSEL_1;
|
|
// imposta il tempo di lettura (bigger, better)
|
|
ADC3->SMPR1 |= (0 << ADC_SMPR1_SMP1_Pos);
|
|
// abilita interrupt per fine misura [e messa in funzione (ADRDY abilitato)]
|
|
ADC3->IER |= ADC_IER_EOSIE;
|
|
// cont. mode
|
|
//ADC3->CFGR |= ADC_CFGR_CONT;
|
|
// abilita DMA sull'ADC
|
|
ADC3->CFGR |= ADC_CFGR_DMNGT;
|
|
|
|
// ignora overrun
|
|
//ADC3->CFGR |= ADC_CFGR_OVRMOD;
|
|
|
|
// abilita ADC vera e propria
|
|
ADC3->ISR |= ADC_ISR_ADRDY;
|
|
ADC3->CR |= ADC_CR_ADEN;
|
|
|
|
DMA2_Stream0->CR |= DMA_SxCR_EN;
|
|
}
|
|
|
|
|