summaryrefslogtreecommitdiffstats
path: root/bsps/arm/lpc176x/include/bsp/adc-defs.h
blob: e1a4825a2a3656151d7f6346cc8d016f8b420831 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
/**
 * @file
 *
 * @ingroup lpc176x
 *
 * @brief ADC library for the lpc176x bsp.
 */

/*
 * Copyright (c) 2014 Taller Technologies.
 *
 * @author  Diaz Marcos (marcos.diaz@tallertechnologies.com)
 *
 * The license and distribution terms for this file may be
 * found in the file LICENSE in this distribution or at
 * http://www.rtems.org/license/LICENSE.
 */
#ifndef LPC176X_ADC_DEFS_H
#define LPC176X_ADC_DEFS_H

#include <bsp.h>
#include <bsp/io.h>
#include <bsp/lpc176x.h>
#include <bsp/adc.h>

#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */

/**
 * @brief The ADC inputs of the board.
 */
typedef enum {
  ADC_0,
  ADC_1,
  ADC_2,
  ADC_3,
  ADC_4,
  ADC_5,
  ADC_6,
  ADC_7,
  ADC_DEVICES_COUNT
} lpc176x_adc_number;

#define MAX_ADC_CLK 13000000u

#define ADC_RANGE 0xFFFu

#define ADC_NUMBER_VALID( number ) ( ( (uint32_t) number ) < \
                                     ADC_DEVICES_COUNT )

#define ADC_CR_SEL( val ) BSP_FLD32( val, 0, 7 )
#define ADC_CR_SEL_GET( val ) BSP_FLD32GET( val, 0, 7 )
#define ADC_CR_SEL_SET( reg, val ) BSP_FLD32SET( reg, val, 0, 7 )
#define ADC_CR_CLKDIV( val ) BSP_FLD32( val, 8, 15 )
#define ADC_CR_CLKDIV_GET( reg ) BSP_FLD32GET( reg, 8, 15 )
#define ADC_CR_CLKDIV_SET( reg, val ) BSP_FLD32SET( reg, val, 8, 15 )
#define ADC_CR_BURST BSP_BIT32( 16 )
#define ADC_CR_CLKS( val ) BSP_FLD32( val, 17, 19 )
#define ADC_CR_PDN BSP_BIT32( 21 )
#define ADC_CR_START_NOW BSP_BIT32( 24 )
#define ADC_CR_START( val ) BSP_FLD32( val, 24, 26 )
#define ADC_CR_EDGE BSP_BIT32( 27 )

#define ADC_DR_VALUE( reg ) BSP_FLD32GET( reg, 4, 15 )
#define ADC_DR_OVERRUN BSP_BIT32( 30 )
#define ADC_DR_DONE BSP_BIT32( 31 )

#define ADC_DATA_CONVERSION_DONE( val ) ( ( val & ADC_DR_DONE ) != 0u )

/**
 * @brief The ADC low-level device.
 */
typedef struct {
  volatile uint32_t ADCR;
  volatile uint32_t ADGDR;
  volatile uint32_t RESERVED0;
  volatile uint32_t ADINTEN;
  volatile uint32_t ADDR[ ADC_DEVICES_COUNT ];
  volatile uint32_t ADSTAT;
  volatile uint32_t ADTRM;
} lpc176x_adc_device;

/**
 * @brief Represents the pin and function for each ADC input.
 */
typedef struct {
  uint32_t pin_number;
  lpc176x_pin_function pin_function;
} lpc176x_adc_pin_map;

#ifdef __cplusplus
}
#endif /* __cplusplus */

#endif