added readme
[tida-00561-firmware-files/tida-00561-firmware-files.git] / Startup / Board.c
1 /*
2  * Copyright (c) 2015, Texas Instruments Incorporated
3  * All rights reserved.
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions
7  * are met:
8  *
9  * *  Redistributions of source code must retain the above copyright
10  *    notice, this list of conditions and the following disclaimer.
11  *
12  * *  Redistributions in binary form must reproduce the above copyright
13  *    notice, this list of conditions and the following disclaimer in the
14  *    documentation and/or other materials provided with the distribution.
15  *
16  * *  Neither the name of Texas Instruments Incorporated nor the names of
17  *    its contributors may be used to endorse or promote products derived
18  *    from this software without specific prior written permission.
19  *
20  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
21  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
22  * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
23  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
24  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
25  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
26  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
27  * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
28  * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
29  * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
30  * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31  */
33 /*
34  *  ====================== CC2650STK.c =========================================
35  *  This file is responsible for setting up the board specific items for the
36  *  CC2650 SensorTag.
37  *
38  *  NB! This board file is for PCB version 1.2 and 1.3
39  */
42 /*
43  *  ====================== Includes ============================================
44  */
45 #include <xdc/std.h>
46 #include <xdc/runtime/System.h>
48 #include <ti/sysbios/family/arm/m3/Hwi.h>
49 #include <ti/drivers/PIN.h>
50 #include <ti/drivers/pin/PINCC26XX.h>
51 #include <ti/drivers/PWM.h>
52 #include <ti/drivers/pwm/PWMTimerCC26XX.h>
53 #include <ti/drivers/timer/GPTimerCC26XX.h>
54 #include <ti/drivers/Power.h>
55 #include <ti/drivers/power/PowerCC26XX.h>
57 #include <inc/hw_memmap.h>
58 #include <inc/hw_ints.h>
59 #include <driverlib/ioc.h>
60 #include <driverlib/udma.h>
62 #include "Board.h"
64 /*
65  *  ========================= IO driver initialization =========================
66  *  From main, PIN_init(BoardGpioInitTable) should be called to setup safe
67  *  settings for this board.
68  *  When a pin is allocated and then de-allocated, it will revert to the state
69  *  configured in this table.
70 */
72 /* Place into subsections to allow the TI linker to remove items properly */
73 #if defined(__TI_COMPILER_VERSION__)
74 #pragma DATA_SECTION(BoardGpioInitTable, ".const:BoardGpioInitTable")
75 #pragma DATA_SECTION(PINCC26XX_hwAttrs, ".const:PINCC26XX_hwAttrs")
76 #endif
78 const PIN_Config BoardGpioInitTable[] = {
79     Board_STK_LED1       | PIN_GPIO_OUTPUT_EN | PIN_GPIO_LOW | PIN_PUSHPULL | PIN_DRVSTR_MAX,     /* LED initially off             */
80     Board_STK_LED2       | PIN_GPIO_OUTPUT_EN | PIN_GPIO_LOW | PIN_PUSHPULL | PIN_DRVSTR_MAX,     /* LED initially off             */
81     Board_KEY_LEFT   | PIN_INPUT_EN | PIN_PULLUP | PIN_IRQ_BOTHEDGES | PIN_HYSTERESIS,        /* Button is active low          */
82     Board_KEY_RIGHT  | PIN_INPUT_EN | PIN_PULLUP | PIN_IRQ_BOTHEDGES | PIN_HYSTERESIS,        /* Button is active low          */
83     Board_RELAY      | PIN_INPUT_EN | PIN_PULLDOWN | PIN_IRQ_BOTHEDGES | PIN_HYSTERESIS,      /* Relay is active high          */
84     Board_MPU_INT    | PIN_INPUT_EN | PIN_PULLDOWN | PIN_IRQ_NEGEDGE | PIN_HYSTERESIS,        /* MPU_INT is active low         */
85     Board_TMP_RDY    | PIN_INPUT_EN | PIN_PULLUP | PIN_HYSTERESIS,                            /* TMP_RDY is active high        */
86     Board_BUZZER     | PIN_GPIO_OUTPUT_EN | PIN_GPIO_LOW | PIN_PUSHPULL | PIN_DRVSTR_MAX,     /* Buzzer initially off          */
87     Board_MPU_POWER  | PIN_GPIO_OUTPUT_EN | PIN_GPIO_HIGH | PIN_PUSHPULL | PIN_DRVSTR_MAX,    /* MPU initially on              */
88     Board_MIC_POWER  | PIN_GPIO_OUTPUT_EN | PIN_GPIO_LOW | PIN_PUSHPULL | PIN_DRVSTR_MIN,     /* MIC initially off             */
89     Board_SPI_FLASH_CS | PIN_GPIO_OUTPUT_EN | PIN_GPIO_HIGH | PIN_PUSHPULL | PIN_DRVSTR_MIN,  /* External flash chip select    */
90     Board_SPI_DEVPK_CS | PIN_GPIO_OUTPUT_EN | PIN_GPIO_LOW | PIN_PUSHPULL | PIN_DRVSTR_MIN,   /* DevPack chip select           */
91     Board_AUDIO_DI | PIN_INPUT_EN | PIN_PULLDOWN,                                             /* Audio DI                      */
92     Board_AUDIODO | PIN_GPIO_OUTPUT_EN | PIN_GPIO_HIGH | PIN_PUSHPULL | PIN_DRVSTR_MIN,       /* Audio data out                */
93 #ifndef PH_SENSOR_DK            //deb_gp
94     Board_AUDIO_CLK | PIN_INPUT_EN | PIN_PULLDOWN,                                            /* DevPack */
95 #endif
96     Board_DP2 | PIN_INPUT_EN | PIN_PULLDOWN,                                                  /* DevPack */
97     Board_DP1 | PIN_INPUT_EN | PIN_PULLDOWN,                                                  /* DevPack */
98     Board_DP0 | PIN_INPUT_EN | PIN_PULLDOWN,                                                  /* DevPack */
99     Board_DP3 | PIN_INPUT_EN | PIN_PULLDOWN,                                                  /* DevPack */
100     Board_DP4_UARTRX | PIN_INPUT_EN | PIN_PULLDOWN,                                           /* DevPack */
101     Board_DP5_UARTTX | PIN_INPUT_EN | PIN_PULLDOWN,                                           /* Devpack */
102     Board_DEVPK_ID | PIN_INPUT_EN | PIN_NOPULL,                                               /* Device pack ID - external PU  */
104     PIN_TERMINATE
105 };
107 const PINCC26XX_HWAttrs PINCC26XX_hwAttrs = {
108     .intPriority = ~0,
109     .swiPriority = 0
110 };
111 /*============================================================================*/
113 /*
114  *  ============================= Power begin ==================================
115  */
116 /* Place into subsections to allow the TI linker to remove items properly */
117 #if defined(__TI_COMPILER_VERSION__)
118 #pragma DATA_SECTION(PowerCC26XX_config, ".const:PowerCC26XX_config")
119 #endif
120 const PowerCC26XX_Config PowerCC26XX_config = {
121     .policyInitFxn      = NULL,
122     .policyFxn          = &PowerCC26XX_standbyPolicy,
123     .calibrateFxn       = &PowerCC26XX_calibrate,
124     .enablePolicy       = TRUE,
125     .calibrateRCOSC_LF  = TRUE,
126     .calibrateRCOSC_HF  = TRUE,
127 };
128 /*
129  *  ============================= Power end ===================================
130  */
132 /*
133  *  ============================= UART begin ===================================
134  */
135 /* Place into subsections to allow the TI linker to remove items properly */
136 #if defined(__TI_COMPILER_VERSION__)
137 #pragma DATA_SECTION(UART_config, ".const:UART_config")
138 #pragma DATA_SECTION(uartCC26XXHWAttrs, ".const:uartCC26XXHWAttrs")
139 #endif
141 /* Include drivers */
142 #include <ti/drivers/UART.h>
143 #include <ti/drivers/uart/UARTCC26XX.h>
145 /* UART objects */
146 UARTCC26XX_Object uartCC26XXObjects[CC2650STK_UARTCOUNT];
148 /* UART hardware parameter structure, also used to assign UART pins */
149 const UARTCC26XX_HWAttrsV1 uartCC26XXHWAttrs[CC2650STK_UARTCOUNT] = {
150     {
151         .baseAddr       = UART0_BASE,
152         .powerMngrId    = PowerCC26XX_PERIPH_UART0,
153         .intNum         = INT_UART0_COMB,
154         .intPriority    = ~0,
155         .swiPriority    = 0,
156         .txPin          = Board_UART_TX,
157         .rxPin          = Board_UART_RX,
158         .ctsPin         = PIN_UNASSIGNED,
159         .rtsPin         = PIN_UNASSIGNED
160     }
161 };
163 /* UART configuration structure */
164 const UART_Config UART_config[] = {
165     {
166         .fxnTablePtr = &UARTCC26XX_fxnTable,
167         .object      = &uartCC26XXObjects[0],
168         .hwAttrs     = &uartCC26XXHWAttrs[0]
169     },
170     {NULL, NULL, NULL}
171 };
172 /*
173  *  ============================= UART end =====================================
174  */
176 /*
177  *  ============================= UDMA begin ===================================
178  */
179 /* Place into subsections to allow the TI linker to remove items properly */
180 #if defined(__TI_COMPILER_VERSION__)
181 #pragma DATA_SECTION(UDMACC26XX_config, ".const:UDMACC26XX_config")
182 #pragma DATA_SECTION(udmaHWAttrs, ".const:udmaHWAttrs")
183 #endif
185 /* Include drivers */
186 #include <ti/drivers/dma/UDMACC26XX.h>
188 /* UDMA objects */
189 UDMACC26XX_Object udmaObjects[CC2650STK_UDMACOUNT];
191 /* UDMA configuration structure */
192 const UDMACC26XX_HWAttrs udmaHWAttrs[CC2650STK_UDMACOUNT] = {
193     {
194         .baseAddr    = UDMA0_BASE,
195         .powerMngrId = PowerCC26XX_PERIPH_UDMA,
196         .intNum      = INT_DMA_ERR,
197         .intPriority = ~0
198     }
199 };
201 /* UDMA configuration structure */
202 const UDMACC26XX_Config UDMACC26XX_config[] = {
203     {
204          .object  = &udmaObjects[0],
205          .hwAttrs = &udmaHWAttrs[0]
206     },
207     {NULL, NULL}
208 };
209 /*
210  *  ============================= UDMA end =====================================
211  */
213 /*
214  *  ========================== SPI DMA begin ===================================
215  */
216 /* Place into subsections to allow the TI linker to remove items properly */
217 #if defined(__TI_COMPILER_VERSION__)
218 #pragma DATA_SECTION(SPI_config, ".const:SPI_config")
219 #pragma DATA_SECTION(spiCC26XXDMAHWAttrs, ".const:spiCC26XXDMAHWAttrs")
220 #endif
222 /* Include drivers */
223 #include <ti/drivers/spi/SPICC26XXDMA.h>
225 /* SPI objects */
226 SPICC26XXDMA_Object spiCC26XXDMAObjects[CC2650STK_SPICOUNT];
228 /* SPI configuration structure, describing which pins are to be used */
229 const SPICC26XXDMA_HWAttrsV1 spiCC26XXDMAHWAttrs[CC2650STK_SPICOUNT] = {
230     {
231         .baseAddr           = SSI0_BASE,
232         .intNum             = INT_SSI0_COMB,
233         .intPriority        = ~0,
234         .swiPriority        = 0,
235         .powerMngrId        = PowerCC26XX_PERIPH_SSI0,
236         .defaultTxBufValue  = 0,
237         .rxChannelBitMask   = 1<<UDMA_CHAN_SSI0_RX,
238         .txChannelBitMask   = 1<<UDMA_CHAN_SSI0_TX,
239         .mosiPin            = Board_SPI0_MOSI,
240         .misoPin            = Board_SPI0_MISO,
241         .clkPin             = Board_SPI0_CLK,
242         .csnPin             = Board_SPI0_CSN
243     },
244     {
245         .baseAddr           = SSI1_BASE,
246         .intNum             = INT_SSI1_COMB,
247         .intPriority        = ~0,
248         .swiPriority        = 0,
249         .powerMngrId        = PowerCC26XX_PERIPH_SSI1,
250         .defaultTxBufValue  = 0,
251         .rxChannelBitMask   = 1<<UDMA_CHAN_SSI1_RX,
252         .txChannelBitMask   = 1<<UDMA_CHAN_SSI1_TX,
253         .mosiPin            = Board_SPI1_MOSI,
254         .misoPin            = Board_SPI1_MISO,
255         .clkPin             = Board_SPI1_CLK,
256         .csnPin             = Board_SPI1_CSN
257     }
258 };
260 /* SPI configuration structure */
261 const SPI_Config SPI_config[] = {
262     {
263          .fxnTablePtr = &SPICC26XXDMA_fxnTable,
264          .object      = &spiCC26XXDMAObjects[0],
265          .hwAttrs     = &spiCC26XXDMAHWAttrs[0]
266     },
267     {
268          .fxnTablePtr = &SPICC26XXDMA_fxnTable,
269          .object      = &spiCC26XXDMAObjects[1],
270          .hwAttrs     = &spiCC26XXDMAHWAttrs[1]
271     },
272     {NULL, NULL, NULL}
273 };
274 /*
275  *  ========================== SPI DMA end =====================================
276 */
279 /*
280  *  ============================= I2C Begin=====================================
281 */
282 /* Place into subsections to allow the TI linker to remove items properly */
283 #if defined(__TI_COMPILER_VERSION__)
284 #pragma DATA_SECTION(I2C_config, ".const:I2C_config")
285 #pragma DATA_SECTION(i2cCC26xxHWAttrs, ".const:i2cCC26xxHWAttrs")
286 #endif
288 /* Include drivers */
289 #include <ti/drivers/i2c/I2CCC26XX.h>
291 /* I2C objects */
292 I2CCC26XX_Object i2cCC26xxObjects[CC2650STK_I2CCOUNT];
294 /* I2C configuration structure, describing which pins are to be used */
295 const I2CCC26XX_HWAttrsV1 i2cCC26xxHWAttrs[CC2650STK_I2CCOUNT] = {
296     {
297         .baseAddr = I2C0_BASE,
298         .powerMngrId = PowerCC26XX_PERIPH_I2C0,
299         .intNum = INT_I2C_IRQ,
300         .intPriority = ~0,
301         .swiPriority = 0,
302         .sdaPin = Board_I2C0_SDA0,
303         .sclPin = Board_I2C0_SCL0,
304     }
305 };
307 const I2C_Config I2C_config[] = {
308     {
309         .fxnTablePtr = &I2CCC26XX_fxnTable,
310         .object = &i2cCC26xxObjects[0],
311         .hwAttrs = &i2cCC26xxHWAttrs[0]
312     },
313     {NULL, NULL, NULL}
314 };
315 /*
316  *  ========================== I2C end =========================================
317  */
319 /*
320  *  ========================== Crypto begin ====================================
321  *  NOTE: The Crypto implementation should be considered experimental
322  *        and not validated!
323  */
324 /* Place into subsections to allow the TI linker to remove items properly */
325 #if defined(__TI_COMPILER_VERSION__)
326 #pragma DATA_SECTION(CryptoCC26XX_config, ".const:CryptoCC26XX_config")
327 #pragma DATA_SECTION(cryptoCC26XXHWAttrs, ".const:cryptoCC26XXHWAttrs")
328 #endif
330 /* Include drivers */
331 #include <ti/drivers/crypto/CryptoCC26XX.h>
333 /* Crypto objects */
334 CryptoCC26XX_Object cryptoCC26XXObjects[CC2650STK_CRYPTOCOUNT];
336 /* Crypto configuration structure, describing which pins are to be used */
337 const CryptoCC26XX_HWAttrs cryptoCC26XXHWAttrs[CC2650STK_CRYPTOCOUNT] = {
338     {
339         .baseAddr       = CRYPTO_BASE,
340         .powerMngrId    = PowerCC26XX_PERIPH_CRYPTO,
341         .intNum         = INT_CRYPTO_RESULT_AVAIL_IRQ,
342         .intPriority    = ~0,
343     }
344 };
346 /* Crypto configuration structure */
347 const CryptoCC26XX_Config CryptoCC26XX_config[] = {
348     {
349          .object  = &cryptoCC26XXObjects[0],
350          .hwAttrs = &cryptoCC26XXHWAttrs[0]
351     },
352     {NULL, NULL}
353 };
354 /*
355  *  ========================== Crypto end ======================================
356  */
357 /*
358  *  ========================= RF driver begin ==================================
359  */
360 /* Place into subsections to allow the TI linker to remove items properly */
361 #if defined(__TI_COMPILER_VERSION__)
362 #pragma DATA_SECTION(RFCC26XX_hwAttrs, ".const:RFCC26XX_hwAttrs")
363 #endif
365 /* Include drivers */
366 #include <ti/drivers/rf/RF.h>
368 /* RF hwi and swi priority */
369 const RFCC26XX_HWAttrs RFCC26XX_hwAttrs = {
370     .hwiCpe0Priority = ~0,
371     .hwiHwPriority   = ~0,
372     .swiCpe0Priority =  5,
373     .swiHwPriority   =  5,
374 };
376 /*
377  *  ========================== RF driver end ===================================
378  */
379 /*
380  *  ========================= TRNG begin ====================================
381  */
382 /* Place into subsections to allow the TI linker to remove items properly */
383 #if defined(__TI_COMPILER_VERSION__)
384 #pragma DATA_SECTION(TRNGCC26XX_config, ".const:TRNGCC26XX_config")
385 #pragma DATA_SECTION(TRNGCC26XXHWAttrs, ".const:TRNGCC26XXHWAttrs")
386 #endif
388 /* Include drivers */
389 #include <TRNGCC26XX.h>
391 /* TRNG objects */
392 TRNGCC26XX_Object trngCC26XXObjects[CC2650STK_TRNGCOUNT];
394 /* TRNG configuration structure, describing which pins are to be used */
395 const TRNGCC26XX_HWAttrs TRNGCC26XXHWAttrs[CC2650STK_TRNGCOUNT] = {
396     {
397         .powerMngrId    = PowerCC26XX_PERIPH_TRNG,
398     }
399 };
401 /* TRNG configuration structure */
402 const TRNGCC26XX_Config TRNGCC26XX_config[] = {
403     {
404          .object  = &trngCC26XXObjects[0],
405          .hwAttrs = &TRNGCC26XXHWAttrs[0]
406     },
407     {NULL, NULL}
408 };
410 /*
411  *  ========================= TRNG end ====================================
412  */