summaryrefslogtreecommitdiff
path: root/nuttx/configs/dk-tm4c129x/include/board.h
blob: 5efb3cc9a9a6321a44f21e984bf27030ab666498 (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
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
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
/************************************************************************************
 * configs/dk-tm4c129x/include/board.h
 *
 *   Copyright (C) 2014 Gregory Nutt. All rights reserved.
 *   Author: Gregory Nutt <gnutt@nuttx.org>
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 *
 * 1. Redistributions of source code must retain the above copyright
 *    notice, this list of conditions and the following disclaimer.
 * 2. Redistributions in binary form must reproduce the above copyright
 *    notice, this list of conditions and the following disclaimer in
 *    the documentation and/or other materials provided with the
 *    distribution.
 * 3. Neither the name NuttX nor the names of its contributors may be
 *    used to endorse or promote products derived from this software
 *    without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
 * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
 * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
 * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
 * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
 * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
 * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 *
 ************************************************************************************/

#ifndef __CONFIGS_DK_TM4C129X_INCLUDE_BOARD_H
#define __CONFIGS_DK_TM4C129X_INCLUDE_BOARD_H

/************************************************************************************
 * Included Files
 ************************************************************************************/

#ifndef __ASSEMBLY__
#  include <stdbool.h>
#endif

/************************************************************************************
 * Pre-processor Definitions
 ************************************************************************************/

/* Clocking *************************************************************************/

/* Crystals on-board the DK-TM4C129X include:
 *
 * 1. 25.0MHz (Y2) is connected to OSC0/1 pins and is used as the run mode input to
 *    the PLL.
 * 2. 32.768kHz (Y3) connected to XOSC0/1 and clocks the hibernation module.
 */

#define SYSCON_RCC_XTAL      SYSCON_RCC_XTAL16000KHZ /* On-board crystal is 25 MHz */
#define XTAL_FREQUENCY       25000000

/* The PLL generates Fvco according to the following formulae.  The input clock to
 * the PLL may be either the external crystal (Fxtal) or PIOSC (Fpiosc).  This
 * logic supports only the external crystal as the PLL source clock.
 *
 *   Fin  = Fxtal / (Q + 1 )(N + 1) -OR- Fpiosc / (Q + 1)(N + 1)
 *   Mdiv = Mint + (MFrac / 1024)
 *   Fvco = Fin * Mdiv
 *
 * Where the register fields Q and N actually hold (Q-1) and (N-1).   The following
 * setup then generates Fvco = 480MHz:
 *
 *   Fin  = 25 MHz / 1 / 5 = 5 MHz
 *   Mdiv = 96
 *   Fvco = 480
 */

#define BOARD_PLL_MINT       96        /* Integer part of PLL M value */
#define BOARD_PLL_MFRAC      0         /* Fractional part of PLL M value */
#define BOARD_PLL_N          5         /* PLL N value */
#define BOARD_PLL_Q          1         /* PLL Q value */

#define BOARD_FVCO_FREQUENCY 480000000 /* Resulting Fvco */

/* When the PLL is active, the system clock frequency (SysClk) is calculated using
 * the following equation:
 *
 *   SysClk = Fvco/ (sysdiv + 1)
 *
 * The following setup generates Sysclk = 120MHz:
 */

#define BOARD_PLL_SYSDIV     4         /* Sysclk = Fvco / 4 = 120MHz */
#define SYSCLK_FREQUENCY     120000000 /* Resulting SysClk frequency */

/* LED definitions ******************************************************************/
/* The DK-TM4C129X has a single RGB LED.  There is only one visible LED which
 * will vary in color.  But, from the standpoint of the firmware, this appears as
 * three LEDs:
 *
 *   --- ------------ -----------------
 *   Pin Pin Function Jumper
 *   --- ------------ -----------------
 *   PN5 Red LED      J36 pins 1 and 2
 *   PQ4 Blue LED     J36 pins 3 and 4
 *   PQ7 Green LED    J36 pins 5 and 6
 *   --- ------------ -----------------
 */

/* LED index values for use with tiva_setled() */

#define BOARD_LED_R               0
#define BOARD_LED_G               1
#define BOARD_LED_B               2
#define BOARD_NLEDS               3

/* LED bits for use with tiva_setleds() */

#define BOARD_LED_R_BIT           (1 << BOARD_LED_R)
#define BOARD_LED_G_BIT           (1 << BOARD_LED_G)
#define BOARD_LED_B_BIT           (1 << BOARD_LED_B)

/* If CONFIG_ARCH_LEDS is defined, then automated support for the DK-TM4C129X LED
 * will be included in the build:
 */
                                /* RED  GREEN BLUE */
#define LED_STARTED       0     /* OFF  OFF   ON   */
#define LED_HEAPALLOCATE  1     /* NC   NC    NC   */
#define LED_IRQSENABLED   1     /* NC   NC    NC   */
#define LED_STACKCREATED  2     /* OFF  ON    OFF  */
#define LED_INIRQ         1     /* NC   NC    NC   */
#define LED_SIGNAL        1     /* NC   NC    NC   */
#define LED_ASSERTION     1     /* NC   NC    NC   */
#define LED_PANIC         3     /* ON   OFF   OFF (flashing 2Hz) */

/* Button definitions ***************************************************************/
/* There are three push buttons on the board.
 *
 *   --- ------------ -----------------
 *   Pin Pin Function Jumper
 *   --- ------------ -----------------
 *   PP1 Select SW4   J37 pins 1 and 2
 *   PN3 Up SW2       J37 pins 3 and 4
 *   PE5 Down SW3     J37 pins 5 and 6
 *   --- ------------ -----------------
 */

#define BUTTON_SW2        0
#define BUTTON_SW3        1
#define BUTTON_SW4        2
#define NUM_BUTTONS       3

#define BUTTON_SW2_BIT    (1 << BUTTON_SW2)
#define BUTTON_SW3_BIT    (1 << BUTTON_SW3)
#define BUTTON_SW4_BIT    (1 << BUTTON_SW4)

/* Pin Multiplexing Disambiguation **************************************************/
/* UARTs
 *
 *   UART0: PA0-1 (fixed configuration)
 *   UART3: PJ0-1 to EM_TX/EM_RX or BOOSTER_PACK2_RX/BOOSTER_PACK2_TX(Depending
 *          on J12/J13)
 *   UART5: PH6-7 to BOOSTER_PACK1_RX/BOOSTER_PACK1_TX
 */

#define GPIO_UART3_RX     GPIO_UART3_RX_2
#define GPIO_UART3_TX     GPIO_UART3_TX_2

#define GPIO_UART5_RX     GPIO_UART5_RX_2
#define GPIO_UART5_TX     GPIO_UART5_TX_2

/* SSI:
 *
 *   SSI0: PA2-5 are used for SSI0 to the second booster pack (fixed configuration)
 *   SSI3: PF0/PF4-5/PH4/PQ0-2 are used for the SPI flash (on-board and SD card).
 *         PH4 selects the SD card and PQ1 selects the on-board SPI flash.
 */

#define GPIO_SSI3_CLK     GPIO_SSI3_CLK_2
#define GPIO_SSI3_FSS     GPIO_SSI3_FSS_2
#define GPIO_SSI3_XDAT0   GPIO_SSI3_XDAT0_2
#define GPIO_SSI3_XDAT1   GPIO_SSI3_XDAT1_1
#define GPIO_SSI3_XDAT2   GPIO_SSI3_XDAT2_1
#define GPIO_SSI3_XDAT3   GPIO_SSI3_XDAT3_1

/* I2C:
 *
 *   I2C3: PG4-5 are provide to the BoostPack 1 interface
 *   I2C7: PA4-5 are provide to the BoostPack 2 interface
 *   I2C6: PB6-7 are used for I2C to the TMP100 and the EM connector.
 *         J18 and J20 must be closed to connect the TMP100.
 *         I2C address is 0x4A
 */

#define GPIO_I2C3_SCL     GPIO_I2C3_SCL_1
#define GPIO_I2C3_SDA     GPIO_I2C3_SDA_1
#define GPIO_I2C7_SCL     GPIO_I2C7_SCL_1
#define GPIO_I2C7_SDA     GPIO_I2C7_SDA_1
#define GPIO_I2C6_SCL     GPIO_I2C6_SCL_2
#define GPIO_I2C6_SDA     GPIO_I2C6_SDA_2

/* USB:
 *
 *   PB0-1/PD6-7/PL6-7 are used for USB (Only PD6-7 are not fixed configuration)
 */

#define GPIO_USB0_EPEN   GPIO_USB0_EPEN_3
#define GPIO_USB0_PFLT   GPIO_USB0_PFLT_2

/* Ethernet LEDs
 *
 *    PF1/PK4/PK6 are used for Ethernet LEDs.
 *      PK4/EN0RXD3/LED0
 *      PK6/EN0TXD2/LED1
 *      PF1/LED2
 */

#  define GPIO_EN0_LED0   GPIO_EN0_LED0_2
#  define GPIO_EN0_LED1   GPIO_EN0_LED1_2
#  define GPIO_EN0_LED2   GPIO_EN0_LED2_1

/* LCD
 *
 *   PF6-7/PJ6/PS4-5/PR0-7 are used for the LCD (fixed configuration).
 */

/************************************************************************************
 * Public Function Prototypes
 ************************************************************************************/

#ifndef __ASSEMBLY__

/************************************************************************************
 * Name: tiva_boardinitialize
 *
 * Description:
 *   All Tiva architectures must provide the following entry point.  This entry
 *   point is called early in the initialization -- after all memory has been
 *   configured and mapped but before any devices have been initialized.
 *
 ************************************************************************************/

void tiva_boardinitialize(void);

/************************************************************************************
 * Name:  tiva_ledinit, tiva_setled, and tiva_setleds
 *
 * Description:
 *   If CONFIG_ARCH_LEDS is defined, then NuttX will control the on-board LED.  If
 *   CONFIG_ARCH_LEDS is not defined, then the following interfaces are available to
 *   control the LEDs from user applications.
 *
 ************************************************************************************/

#ifndef CONFIG_ARCH_LEDS
void tiva_ledinit(void);
void tiva_setled(int led, bool ledon);
void tiva_setleds(uint8_t ledset);
#endif

/************************************************************************************
 * Name: tiva_tmp100_initialize
 *
 * Description:
 *   Initialize and register the TMP-100 Temperature Sensor driver.
 *
 * Input parameters:
 *   devpath - The full path to the driver to register. E.g., "/dev/temp0"
 *
 * Returned Value:
 *   Zero (OK) on success; a negated errno value on failure.
 *
 ************************************************************************************/

#if defined(CONFIG_I2C) && defined(CONFIG_I2C_LM75) && defined(CONFIG_TIVA_I2C6)
int tiva_tmp100_initialize(FAR const char *devpath);
#endif

#endif /* __ASSEMBLY__ */
#endif  /* __CONFIGS_DK_TM4C129X_INCLUDE_BOARD_H */