|
|
// *****************************************************************************
|
|
|
// SOFTWARE API DEFINITION FOR Analog to Digital Convertor
|
|
|
// *****************************************************************************
|
|
|
|
|
|
#ifndef ADC_AT91_H
|
|
|
#define ADC_AT91_H
|
|
|
|
|
|
#define MAP_SIZE 4096Ul
|
|
|
#define MAP_MASK (MAP_SIZE - 1)
|
|
|
|
|
|
#define ADC_BASE 0xFFFE0000
|
|
|
|
|
|
// -------- ADC_CR : (ADC Offset: 0x0) ADC Control Register --------
|
|
|
#define ADC_SWRST ((unsigned int) 0x1 << 0) // (ADC) Software Reset
|
|
|
#define ADC_START ((unsigned int) 0x1 << 1) // (ADC) Start Conversion
|
|
|
// -------- ADC_MR : (ADC Offset: 0x4) ADC Mode Register --------
|
|
|
#define ADC_TRGEN_DIS ((unsigned int) 0x0) // (ADC) Hradware triggers are disabled. Starting a conversion is only possible by software
|
|
|
#define ADC_TRGEN_EN ((unsigned int) 0x1) // (ADC) Hardware trigger selected by TRGSEL field is enabled.
|
|
|
|
|
|
#define ADC_TRGSEL_TIOA0 ((unsigned int) 0x0 << 1) // (ADC) Selected TRGSEL = TIAO0
|
|
|
#define ADC_TRGSEL_TIOA1 ((unsigned int) 0x1 << 1) // (ADC) Selected TRGSEL = TIAO1
|
|
|
#define ADC_TRGSEL_TIOA2 ((unsigned int) 0x2 << 1) // (ADC) Selected TRGSEL = TIAO2
|
|
|
#define ADC_TRGSEL_TIOA3 ((unsigned int) 0x3 << 1) // (ADC) Selected TRGSEL = TIAO3
|
|
|
#define ADC_TRGSEL_TIOA4 ((unsigned int) 0x4 << 1) // (ADC) Selected TRGSEL = TIAO4
|
|
|
#define ADC_TRGSEL_TIOA5 ((unsigned int) 0x5 << 1) // (ADC) Selected TRGSEL = TIAO5
|
|
|
#define ADC_TRGSEL_EXT ((unsigned int) 0x6 << 1) // (ADC) Selected TRGSEL = External Trigger
|
|
|
|
|
|
#define ADC_RES_10BIT ((unsigned int) 0x0 << 4) // (ADC) 10-bit resolution
|
|
|
#define ADC_RES_8BIT ((unsigned int) 0x1 << 4) // (ADC) 8-bit resolution
|
|
|
|
|
|
#define ADC_SLEEP_NORMAL_MODE ((unsigned int) 0x0 << 5) // (ADC) Normal Mode
|
|
|
#define ADC_SLEEP_MODE ((unsigned int) 0x1 << 5) // (ADC) Sleep Mode
|
|
|
|
|
|
#define ADC_PRESCAL ((unsigned int) 0x31 << 2) // (ADC) Prescaler rate selection
|
|
|
#define ADC_STARTUP ((unsigned int) 0x00 << 2) // (ADC) Startup Time
|
|
|
#define ADC_SHTIM ((unsigned int) 0x01 << 9) // (ADC) Sample & Hold Time
|
|
|
|
|
|
// -------- ADC_CHER : (ADC Offset: 0x10) ADC Channel Enable Register --------
|
|
|
#define ADC_CH0 ((unsigned int) 0x1 << 0) // (ADC) Channel 0
|
|
|
#define ADC_CH1 ((unsigned int) 0x1 << 1) // (ADC) Channel 1
|
|
|
#define ADC_CH2 ((unsigned int) 0x1 << 2) // (ADC) Channel 2
|
|
|
#define ADC_CH3 ((unsigned int) 0x1 << 3) // (ADC) Channel 3
|
|
|
|
|
|
/*Anadido por DCordova*/
|
|
|
// -------- ADC_CHSR : (ADC Offset: 0x10) ADC Channel Status Register --------
|
|
|
#define ADC_CHSR0 ((unsigned int) 0x1 << 0) // (ADC) Channel 0
|
|
|
#define ADC_CHSR1 ((unsigned int) 0x1 << 1) // (ADC) Channel 1
|
|
|
#define ADC_CHSR2 ((unsigned int) 0x1 << 2) // (ADC) Channel 2
|
|
|
#define ADC_CHSR3 ((unsigned int) 0x1 << 3) // (ADC) Channel 3
|
|
|
/*Anadido por DCordova*/
|
|
|
|
|
|
|
|
|
// -------- ADC_CHDR : (ADC Offset: 0x14) ADC Channel Disable Register --------
|
|
|
// -------- ADC_CHSR : (ADC Offset: 0x18) ADC Channel Status Register --------
|
|
|
// -------- ADC_SR : (ADC Offset: 0x1c) ADC Status Register --------
|
|
|
|
|
|
#define MASK_EOC0 ((unsigned int) 0x1 << 0) // (ADC) End of Conversion
|
|
|
#define MASK_EOC1 ((unsigned int) 0x1 << 1) // (ADC) End of Conversion
|
|
|
#define MASK_EOC2 ((unsigned int) 0x1 << 2) // (ADC) End of Conversion
|
|
|
#define MASK_EOC3 ((unsigned int) 0x1 << 3) // (ADC) End of Conversion
|
|
|
#define MASK_OVRE0 ((unsigned int) 0x1 << 8) // (ADC) Overrun Error
|
|
|
#define MASK_OVRE1 ((unsigned int) 0x1 << 9) // (ADC) Overrun Error
|
|
|
#define MASK_OVRE2 ((unsigned int) 0x1 << 10) // (ADC) Overrun Error
|
|
|
#define MASK_OVRE3 ((unsigned int) 0x1 << 11) // (ADC) Overrun Error
|
|
|
#define MASK_DRDY ((unsigned int) 0x1 << 16) // (ADC) Data Ready
|
|
|
#define MASK_GOVRE ((unsigned int) 0x1 << 17) // (ADC) General Overrun
|
|
|
|
|
|
// -------- ADC_LCDR : (ADC Offset: 0x20) ADC Last Converted Data Register --------
|
|
|
#define ADC_LDATA ((unsigned int) 0x3FF << 0) // (ADC) Last Data Converted
|
|
|
#define ADC_DATA ((unsigned int) 0x3FF << 0) // (ADC) Converted Data
|
|
|
#define ADC_DISABLE_INTERRUP ((unsigned int) 0x0F0F0F << 0) //(ADC) Disable all interrup
|
|
|
|
|
|
typedef volatile unsigned int AT91_REG2;// Hardware register definition
|
|
|
|
|
|
typedef struct _AT91S_ADC {
|
|
|
AT91_REG2 ADC_CR; // ADC Control Register
|
|
|
AT91_REG2 ADC_MR; // ADC Mode Register
|
|
|
AT91_REG2 Reserved0[2]; //
|
|
|
AT91_REG2 ADC_CHER; // ADC Channel Enable Register
|
|
|
AT91_REG2 ADC_CHDR; // ADC Channel Disable Register
|
|
|
AT91_REG2 ADC_CHSR; // ADC Channel Status Register
|
|
|
AT91_REG2 ADC_SR; // ADC Status Register
|
|
|
AT91_REG2 ADC_LCDR; // ADC Last Converted Data Register
|
|
|
AT91_REG2 ADC_IER; // ADC Interrupt Enable Register
|
|
|
AT91_REG2 ADC_IDR; // ADC Interrupt Disable Register
|
|
|
AT91_REG2 ADC_IMR; // ADC Interrupt Mask Register
|
|
|
AT91_REG2 ADC_CDR0; // ADC Channel Data Register 0
|
|
|
AT91_REG2 ADC_CDR1; // ADC Channel Data Register 1
|
|
|
AT91_REG2 ADC_CDR2; // ADC Channel Data Register 2
|
|
|
AT91_REG2 ADC_CDR3; // ADC Channel Data Register 3
|
|
|
AT91_REG2 ADC_CDR4; // ADC Channel Data Register 4
|
|
|
AT91_REG2 ADC_CDR5; // ADC Channel Data Register 5
|
|
|
AT91_REG2 ADC_CDR6; // ADC Channel Data Register 6
|
|
|
AT91_REG2 ADC_CDR7; // ADC Channel Data Register 7
|
|
|
AT91_REG2 Reserved1[44]; //
|
|
|
AT91_REG2 ADC_RPR; // Receive Pointer Register
|
|
|
AT91_REG2 ADC_RCR; // Receive Counter Register
|
|
|
AT91_REG2 ADC_TPR; // Transmit Pointer Register
|
|
|
AT91_REG2 ADC_TCR; // Transmit Counter Register
|
|
|
AT91_REG2 ADC_RNPR; // Receive Next Pointer Register
|
|
|
AT91_REG2 ADC_RNCR; // Receive Next Counter Register
|
|
|
AT91_REG2 ADC_TNPR; // Transmit Next Pointer Register
|
|
|
AT91_REG2 ADC_TNCR; // Transmit Next Counter Register
|
|
|
AT91_REG2 ADC_PTCR; // PDC Transfer Control Register
|
|
|
AT91_REG2 ADC_PTSR; // PDC Transfer Status Register
|
|
|
} AT91S_ADC, *AT91PS_ADC;
|
|
|
|
|
|
AT91S_ADC *adc_map(unsigned int adcbase);
|
|
|
/**********************Aniadido por DCV*********/
|
|
|
AT91S_ADC *adc_map1(unsigned int adcbase);
|
|
|
/**********************Aniadido por DCV*********/
|
|
|
|
|
|
void ADC_INIT(AT91S_ADC * adc);
|
|
|
void ADC_RESET(AT91S_ADC * adc);
|
|
|
void CONFIG_ADC(AT91S_ADC * adc,unsigned int REG_CONFIG);
|
|
|
void ENABLE_CHANNEL(AT91S_ADC * adc,unsigned int CHANNEL);
|
|
|
unsigned int STATUS_CHANNEL(AT91S_ADC * adc);
|
|
|
unsigned int GET_ADC(AT91S_ADC * adc);
|
|
|
unsigned int GET_ADC0(AT91S_ADC * adc);
|
|
|
unsigned int GET_ADC1(AT91S_ADC * adc);
|
|
|
unsigned int GET_ADC3(AT91S_ADC * adc);
|
|
|
unsigned int ver_reg_mode(AT91S_ADC * adc);
|
|
|
unsigned int GET_STATUS(AT91S_ADC * adc);
|
|
|
#endif
|
|
|
|