Код: Выделить всё
// АЦП
PMUSYS->ADCPWRCFG_bit.LDOEN = 1;
PMUSYS->ADCPWRCFG_bit.LVLDIS = 0;
RCU->ADCSARCLKCFG_bit.CLKSEL = RCU_ADCSARCLKCFG_CLKSEL_PLL1;
RCU->ADCSARCLKCFG_bit.DIVEN = 0; // частота АЦП 33.3(3) МГц
RCU->ADCSARCLKCFG_bit.CLKEN = 1;
RCU->ADCSARCLKCFG_bit.RSTDIS = 1;
RCU->CGCFGAPB_bit.ADCSAREN = 1;
RCU->RSTDISAPB_bit.ADCSAREN = 1;
ADCSAR->ACTL_bit.SELRES = ADCSAR_ACTL_SELRES_12bit;
ADCSAR->ACTL_bit.ADCEN = 1;
while ( 0 == ADCSAR->ACTL_bit.ADCRDY ) {}
ADCSAR->EMUX_bit.EM0 = ADCSAR_EMUX_EM0_Cycle;
ADCSAR->SEQ[0].SCCTL_bit.ICNT = 3;
ADCSAR->SEQ[0].SCCTL_bit.RCNT = 0;
ADCSAR->SEQ[0].SRTMR = 33332;
ADCSAR->SEQ[0].SRQCTL_bit.RQMAX = 1;
ADCSAR->SEQ[0].SRQSEL_bit.RQ0 = 0;
ADCSAR->SEQ[0].SRQSEL_bit.RQ1 = 1;
ADCSAR->SEQ[0].SRQCTL_bit.QAVGVAL = 0;
ADCSAR->SEQ[0].SRQCTL_bit.QAVGEN = 0;
ADCSAR->IM_bit.SEQIM0 = 1;
ADCSAR->SEQEN_bit.SEQEN0 = 1;
PLIC_int_enable( IsrVect_IRQ_ADC );
//
ADCSAR->SEQSYNC_bit.SYNC0 = 1;
ADCSAR->SEQSYNC_bit.GSYNC = 1;
Код: Выделить всё
void PLIC_Handler_ADC(void) {
uint16_t v_val = 0;
for ( int i = 0; i < 4; ++i ) {
v_val += (uint16_t)ADCSAR->SEQ[0].SFIFO;
}
g_adc_val = v_val / 4;
g_read_val = true;
ADCSAR->IC = ADCSAR_IC_SEQIC0_Msk;
}
