Blame view

RIOT/boards/arduino-zero/include/periph_conf.h 6.57 KB
fb11e647   vrobic   reseau statique a...
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
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
  /*
   * Copyright (C)  2016 Freie Universitรคt Berlin
   *                2016 Inria
   *
   * This file is subject to the terms and conditions of the GNU Lesser
   * General Public License v2.1. See the file LICENSE in the top level
   * directory for more details.
   */
  
  /**
   * @ingroup     boards_arduino-zero
   * @{
   *
   * @file
   * @brief       Configuration of CPU peripherals for Arduino Zero board
   *
   * @author      Thomas Eichinger <thomas.eichinger@fu-berlin.de>
   * @author      Hauke Petersen <hauke.petersen@fu-berlin.de>
   * @author      Peter Kietzmann <peter.kietzmann@haw-hamburg.de>
   * @author      Alexandre Abadie <alexandre.abadie@inria.fr>
   */
  
  #ifndef PERIPH_CONF_H_
  #define PERIPH_CONF_H_
  
  #include <stdint.h>
  
  #include "cpu.h"
  #include "periph_cpu.h"
  
  #ifdef __cplusplus
  extern "C" {
  #endif
  
  /**
   * @brief   External oscillator and clock configuration
   *
   * For selection of the used CORECLOCK, we have implemented two choices:
   *
   * - usage of the PLL fed by the internal 8MHz oscillator divided by 8
   * - usage of the internal 8MHz oscillator directly, divided by N if needed
   *
   *
   * The PLL option allows for the usage of a wider frequency range and a more
   * stable clock with less jitter. This is why we use this option as default.
   *
   * The target frequency is computed from the PLL multiplier and the PLL divisor.
   * Use the following formula to compute your values:
   *
   * CORECLOCK = ((PLL_MUL + 1) * 1MHz) / PLL_DIV
   *
   * NOTE: The PLL circuit does not run with less than 32MHz while the maximum PLL
   *       frequency is 96MHz. So PLL_MULL must be between 31 and 95!
   *
   *
   * The internal Oscillator used directly can lead to a slightly better power
   * efficiency to the cost of a less stable clock. Use this option when you know
   * what you are doing! The actual core frequency is adjusted as follows:
   *
   * CORECLOCK = 8MHz / DIV
   *
   * NOTE: A core clock frequency below 1MHz is not recommended
   *
   * @{
   */
  #define CLOCK_USE_PLL       (1)
  
  #if CLOCK_USE_PLL
  /* edit these values to adjust the PLL output frequency */
  #define CLOCK_PLL_MUL       (47U)               /* must be >= 31 & <= 95 */
  #define CLOCK_PLL_DIV       (1U)                /* adjust to your needs */
  /* generate the actual used core clock frequency */
  #define CLOCK_CORECLOCK     (((CLOCK_PLL_MUL + 1) * 1000000U) / CLOCK_PLL_DIV)
  #else
  /* edit this value to your needs */
  #define CLOCK_DIV           (1U)
  /* generate the actual core clock frequency */
  #define CLOCK_CORECLOCK     (8000000 / CLOCK_DIV)
  #endif
  /** @} */
  
  /**
   * @name Timer peripheral configuration
   * @{
   */
  #define TIMER_NUMOF         (2U)
  #define TIMER_0_EN          1
  #define TIMER_1_EN          1
  
  /* Timer 0 configuration */
  #define TIMER_0_DEV         TC3->COUNT16
  #define TIMER_0_CHANNELS    2
  #define TIMER_0_MAX_VALUE   (0xffff)
  #define TIMER_0_ISR         isr_tc3
  
  /* Timer 1 configuration */
  #define TIMER_1_DEV         TC4->COUNT32
  #define TIMER_1_CHANNELS    2
  #define TIMER_1_MAX_VALUE   (0xffffffff)
  #define TIMER_1_ISR         isr_tc4
  
  /** @} */
  
  /**
   * @name UART configuration
   * @{
   */
  static const uart_conf_t uart_config[] = {
      {
          .dev    = &SERCOM5->USART,
          .rx_pin = GPIO_PIN(PB,23),
          .tx_pin = GPIO_PIN(PB,22),
          .mux    = GPIO_MUX_D,
          .rx_pad = UART_PAD_RX_3,
          .tx_pad = UART_PAD_TX_2
      },
      {
          .dev    = &SERCOM0->USART,
          .rx_pin = GPIO_PIN(PA,11),
          .tx_pin = GPIO_PIN(PA,10),
          .mux    = GPIO_MUX_C,
          .rx_pad = UART_PAD_RX_3,
          .tx_pad = UART_PAD_TX_2
      }
  };
  
  /* interrupt function name mapping */
  #define UART_0_ISR          isr_sercom5
  #define UART_1_ISR          isr_sercom0
  
  #define UART_NUMOF          (sizeof(uart_config) / sizeof(uart_config[0]))
  /** @} */
  
  /**
   * @name PWM configuration
   * @{
   */
  #define PWM_0_EN            1
  #define PWM_1_EN            1
  #define PWM_MAX_CHANNELS    2
  /* for compatibility with test application */
  #define PWM_0_CHANNELS      PWM_MAX_CHANNELS
  #define PWM_1_CHANNELS      PWM_MAX_CHANNELS
  
  /* PWM device configuration */
  static const pwm_conf_t pwm_config[] = {
  #if PWM_0_EN
      {TCC0, {
          /* GPIO pin, MUX value, TCC channel */
          { GPIO_PIN(PA, 8), GPIO_MUX_E,  0 },
          { GPIO_PIN(PA, 9), GPIO_MUX_E,  1 },
      }},
  #endif
  #if PWM_1_EN
      {TCC1, {
          /* GPIO pin, MUX value, TCC channel */
          { GPIO_PIN(PA, 6), GPIO_MUX_E, 0 },
          { GPIO_PIN(PA, 7), GPIO_MUX_E, 1 },
      }},
  #endif
  };
  
  /* number of devices that are actually defined */
  #define PWM_NUMOF           (2U)
  /** @} */
  
  /**
   * @name ADC configuration
   * @{
   */
  #define ADC_CONFIG {            \
      { GPIO_PIN(PA, 2), 0, 0  }, \
      { GPIO_PIN(PB, 8), 0, 2  }, \
      { GPIO_PIN(PB, 9), 0, 3  }, \
      { GPIO_PIN(PA, 4), 0, 4  }, \
      { GPIO_PIN(PA, 5), 0, 5  }, \
      { GPIO_PIN(PB, 2), 0, 10 }}
  
  #define ADC_NUMOF           (6)
  /** @} */
  
  /**
   * @name SPI configuration
   * @{
   */
  #define SPI_NUMOF          (1)
  #define SPI_0_EN           1
  
  /*      SPI0             */
  #define SPI_0_DEV          SERCOM4->SPI
  #define SPI_IRQ_0          SERCOM4_IRQn
  #define SPI_0_GCLK_ID      SERCOM4_GCLK_ID_CORE
  /* SPI 0 pin configuration */
  #define SPI_0_SCLK         GPIO_PIN(PB, 11)
  #define SPI_0_SCLK_MUX     GPIO_MUX_D
  #define SPI_0_MISO         GPIO_PIN(PA, 12)
  #define SPI_0_MISO_MUX     GPIO_MUX_D
  #define SPI_0_MISO_PAD     SPI_PAD_MISO_0
  #define SPI_0_MOSI         GPIO_PIN(PB, 10)
  #define SPI_0_MOSI_MUX     GPIO_MUX_D
  #define SPI_0_MOSI_PAD     SPI_PAD_MOSI_2_SCK_3
  
  /** @} */
  
  /**
   * @name I2C configuration
   * @{
   */
  #define I2C_NUMOF          (1U)
  #define I2C_0_EN            1
  #define I2C_1_EN            0
  #define I2C_2_EN            0
  #define I2C_3_EN            0
  #define I2C_IRQ_PRIO        1
  
  #define I2C_0_DEV           SERCOM3->I2CM
  #define I2C_0_IRQ           SERCOM3_IRQn
  #define I2C_0_ISR           isr_sercom3
  /* I2C 0 GCLK */
  #define I2C_0_GCLK_ID       SERCOM3_GCLK_ID_CORE
  #define I2C_0_GCLK_ID_SLOW  SERCOM3_GCLK_ID_SLOW
  /* I2C 0 pin configuration */
  #define I2C_0_SDA           GPIO_PIN(PA, 22)
  #define I2C_0_SCL           GPIO_PIN(PA, 23)
  #define I2C_0_MUX           GPIO_MUX_C
  
  /**
   * @name RTC configuration
   * @{
   */
  #define RTC_NUMOF           (1U)
  #define RTC_DEV             RTC->MODE2
  /** @} */
  
  /**
   * @name RTT configuration
   * @{
   */
  #define RTT_NUMOF           (1U)
  #define RTT_DEV             RTC->MODE0
  #define RTT_IRQ             RTC_IRQn
  #define RTT_IRQ_PRIO        10
  #define RTT_ISR             isr_rtc
  #define RTT_MAX_VALUE       (0xffffffff)
  #define RTT_FREQUENCY       (32768U)    /* in Hz. For changes see `rtt.c` */
  #define RTT_RUNSTDBY        (1)         /* Keep RTT running in sleep states */
  /** @} */
  
  #ifdef __cplusplus
  }
  #endif
  
  #endif /* PERIPH_CONF_H_ */
  /** @} */