mirror of
https://github.com/arduino/Arduino.git
synced 2024-12-10 21:24:12 +01:00
133 lines
4.3 KiB
C
133 lines
4.3 KiB
C
/*
|
|
%atmel_license%
|
|
*/
|
|
|
|
/**
|
|
* \file
|
|
*
|
|
* \section Purpose
|
|
*
|
|
* Interface for configuration the Analog-to-Digital Converter (ADC) peripheral.
|
|
*
|
|
* \section Usage
|
|
*
|
|
* -# Configurate the pins for ADC
|
|
* -# Initialize the ADC with ADC_Initialize().
|
|
* -# Select the active channel using ADC_EnableChannel()
|
|
* -# Start the conversion with ADC_StartConversion()
|
|
* -# Wait the end of the conversion by polling status with ADC_GetStatus()
|
|
* -# Finally, get the converted data using ADC_GetConvertedData()
|
|
*
|
|
*/
|
|
#ifndef _ADC_
|
|
#define _ADC_
|
|
|
|
/*----------------------------------------------------------------------------
|
|
* Headers
|
|
*----------------------------------------------------------------------------*/
|
|
#include "../chip.h"
|
|
|
|
#include <assert.h>
|
|
#include <stdint.h>
|
|
|
|
/*------------------------------------------------------------------------------
|
|
* Definitions
|
|
*------------------------------------------------------------------------------*/
|
|
/* SAM3S */
|
|
#define ADC_FREQ_MAX 20000000
|
|
#define ADC_FREQ_MIN 1000000
|
|
|
|
#define ADC_STARTUP_NORM 40
|
|
#define ADC_STARTUP_FAST 12
|
|
|
|
#define ADC_CHANNEL_0 0
|
|
#define ADC_CHANNEL_1 1
|
|
#define ADC_CHANNEL_2 2
|
|
#define ADC_CHANNEL_3 3
|
|
#define ADC_CHANNEL_4 4
|
|
#define ADC_CHANNEL_5 5
|
|
#define ADC_CHANNEL_6 6
|
|
#define ADC_CHANNEL_7 7
|
|
#define ADC_CHANNEL_8 8
|
|
#define ADC_CHANNEL_9 9
|
|
#define ADC_CHANNEL_10 10
|
|
#define ADC_CHANNEL_11 11
|
|
#define ADC_CHANNEL_12 12
|
|
#define ADC_CHANNEL_13 13
|
|
#define ADC_CHANNEL_14 14
|
|
#define ADC_CHANNEL_15 15
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
/*------------------------------------------------------------------------------
|
|
* Macros function of register access
|
|
*------------------------------------------------------------------------------*/
|
|
|
|
#define ADC_GetModeReg( pAdc ) ((pAdc)->ADC_MR)
|
|
|
|
#define ADC_StartConversion( pAdc ) ((pAdc)->ADC_CR = ADC_CR_START)
|
|
|
|
|
|
#define ADC_EnableChannel( pAdc, channel ) {\
|
|
assert( (channel) < 16 ) ;\
|
|
(pAdc)->ADC_CHER = (1 << (channel));\
|
|
}
|
|
|
|
#define ADC_DisableChannel(pAdc, channel) {\
|
|
assert( (channel) < 16 ) ;\
|
|
(pAdc)->ADC_CHDR = (1 << (channel));\
|
|
}
|
|
|
|
#define ADC_EnableIt(pAdc, dwMode) {\
|
|
(pAdc)->ADC_IER = (dwMode);\
|
|
}
|
|
|
|
#define ADC_DisableIt(pAdc, dwMode) {\
|
|
(pAdc)->ADC_IDR = (dwMode);\
|
|
}
|
|
|
|
#define ADC_EnableTS(pAdc,dwMode) {\
|
|
(pAdc)->ADC_ACR |= (dwMode);\
|
|
}
|
|
|
|
#define ADC_EnableDataReadyIt(pAdc) ((pAdc)->ADC_IER = AT91C_ADC_DRDY)
|
|
|
|
#define ADC_GetStatus(pAdc) ((pAdc)->ADC_ISR)
|
|
|
|
#define ADC_GetCompareMode(pAdc) (((pAdc)->ADC_EMR)& (ADC_EMR_CMPMODE_Msk))
|
|
|
|
#define ADC_GetChannelStatus(pAdc) ((pAdc)->ADC_CHSR)
|
|
|
|
#define ADC_GetInterruptMaskStatus(pAdc) ((pAdc)->ADC_IMR)
|
|
|
|
#define ADC_GetLastConvertedData(pAdc) ((pAdc)->ADC_LCDR)
|
|
|
|
/*------------------------------------------------------------------------------
|
|
* Exported functions
|
|
*------------------------------------------------------------------------------*/
|
|
extern void ADC_Initialize( Adc* pAdc, uint32_t idAdc );
|
|
extern void ADC_CfgTiming( Adc* pAdc, uint32_t tracking, uint32_t settling, uint32_t transfer );
|
|
extern void ADC_cfgFrequency( Adc* pAdc, uint32_t startup, uint32_t prescal );
|
|
extern void ADC_CfgTrigering( Adc* pAdc, uint32_t trgEn, uint32_t trgSel, uint32_t freeRun );
|
|
extern void ADC_CfgLowRes( Adc* pAdc, uint32_t resolution );
|
|
extern void ADC_CfgPowerSave( Adc* pAdc, uint32_t sleep, uint32_t fwup );
|
|
extern void ADC_CfgChannelMode( Adc* pAdc, uint32_t useq, uint32_t anach );
|
|
extern void ADC_check( Adc* pAdc, uint32_t mck_freq );
|
|
|
|
extern uint32_t ADC_GetConvertedData( Adc* pAdc, uint32_t dwChannel ) ;
|
|
extern void ADC_SetCompareChannel( Adc* pAdc, uint32_t dwChannel ) ;
|
|
extern void ADC_SetCompareMode( Adc* pAdc, uint32_t dwMode ) ;
|
|
extern void ADC_SetComparisonWindow( Adc* pAdc, uint32_t dwHi_Lo ) ;
|
|
extern uint32_t ADC_IsInterruptMasked( Adc* pAdc, uint32_t dwFlag ) ;
|
|
extern uint32_t ADC_IsStatusSet( Adc* pAdc, uint32_t dwFlag ) ;
|
|
extern uint32_t ADC_IsChannelInterruptStatusSet( uint32_t adc_sr, uint32_t dwChannel ) ;
|
|
extern uint32_t ADC_ReadBuffer( Adc* pADC, int16_t *pwBuffer, uint32_t dwSize ) ;
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif /* #ifndef _ADC_ */
|