commiting examples
This commit is contained in:
53
Examples/NeoPixel Example/ADC.c
Normal file
53
Examples/NeoPixel Example/ADC.c
Normal file
@@ -0,0 +1,53 @@
|
||||
#include <samd21g18a.h>
|
||||
#include "ADC.h"
|
||||
|
||||
volatile uint16_t adc_value;
|
||||
|
||||
void ADC_init(void)
|
||||
{
|
||||
/* enable peripheral clock */
|
||||
PM->APBCMASK.bit.ADC_ = 1;
|
||||
|
||||
/* enable generic clock */
|
||||
GCLK->CLKCTRL.bit.ID = GCLK_CLKCTRL_ID_ADC_Val; // configure generic clock for ADC
|
||||
GCLK->CLKCTRL.bit.GEN = GCLK_CLKCTRL_GEN_GCLK0_Val; // source is generic clock generator 0
|
||||
GCLK->CLKCTRL.bit.CLKEN = 1; // enable generic clock
|
||||
|
||||
/* select GPIO pins alternative function */
|
||||
PORT->Group[1].PINCFG[8].bit.PMUXEN = 1; // enable alternative function for pin PB08
|
||||
PORT->Group[1].PINCFG[3].bit.PMUXEN = 1; // enable alternative function for pin PA03 (analog function AREF)
|
||||
PORT->Group[1].PMUX[4].bit.PMUXE = MUX_PB08B_ADC_AIN2; // PB08 alternative function B (ADC in 2)
|
||||
|
||||
/* configure peripheral */
|
||||
ADC->CTRLB.bit.PRESCALER = ADC_CTRLB_PRESCALER_DIV256_Val; // prescaler
|
||||
ADC->CTRLB.bit.DIFFMODE = 0x00; // single-ended mode
|
||||
ADC->CTRLB.bit.LEFTADJ = 0x00; // right adjusted result
|
||||
ADC->CTRLB.bit.RESSEL = ADC_CTRLB_RESSEL_16BIT_Val; // conversion resolution is 16 bit (for accumulation)
|
||||
ADC->CTRLB.bit.FREERUN = 1; // fee run mode
|
||||
ADC->AVGCTRL.bit.SAMPLENUM = ADC_AVGCTRL_SAMPLENUM_16_Val; // result is the accumulation of 16 samples
|
||||
ADC->AVGCTRL.bit.ADJRES = 0x04; // result is averaged over 16 samples
|
||||
ADC->INPUTCTRL.bit.MUXNEG = ADC_INPUTCTRL_MUXNEG_GND_Val; // negative input is internal ground
|
||||
ADC->INPUTCTRL.bit.MUXPOS = ADC_INPUTCTRL_MUXPOS_PIN2_Val; // positive input on ADC in 2 (pin PB08)
|
||||
|
||||
/* enable result ready interrupt */
|
||||
ADC->INTENSET.reg = ADC_INTENSET_RESRDY;
|
||||
NVIC_EnableIRQ(ADC_IRQn);
|
||||
|
||||
/* enable peripheral */
|
||||
ADC->CTRLA.reg |= ADC_CTRLA_ENABLE;
|
||||
}
|
||||
|
||||
void ADC_deinit(void)
|
||||
{
|
||||
/* disable result ready interrupt */
|
||||
ADC->INTENCLR.reg = ADC_INTENCLR_RESRDY;
|
||||
NVIC_DisableIRQ(ADC_IRQn);
|
||||
}
|
||||
|
||||
void ADC_Handler(void)
|
||||
{
|
||||
adc_value = (ADC->RESULT.reg);
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user