Contiki-NG
Loading...
Searching...
No Matches
CC26X2R1_LAUNCHXL_fxns.c
1/*
2 * Copyright (c) 2018-2019, 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 */
32
33/*
34 * =================== CC26X2R1_LAUNCHXL_fxns.c ============================
35 * This file contains the board-specific initialization functions.
36 */
37
38#include <stdbool.h>
39#include <stddef.h>
40#include <stdint.h>
41
42#include <ti/devices/DeviceFamily.h>
43#include DeviceFamily_constructPath(driverlib/ioc.h)
44#include DeviceFamily_constructPath(driverlib/cpu.h)
45
46#include <ti/drivers/pin/PINCC26XX.h>
47
48#include <ti/drivers/Board.h>
49
50#include "Board.h"
51
52
53/*
54 * ======== CC26X2R1_LAUNCHXL_sendExtFlashByte ========
55 */
56void CC26X2R1_LAUNCHXL_sendExtFlashByte(PIN_Handle pinHandle, uint8_t byte)
57{
58 uint8_t i;
59
60 /* SPI Flash CS */
61 PIN_setOutputValue(pinHandle, IOID_20, 0);
62
63 for (i = 0; i < 8; i++) {
64 PIN_setOutputValue(pinHandle, IOID_10, 0); /* SPI Flash CLK */
65
66 /* SPI Flash MOSI */
67 PIN_setOutputValue(pinHandle, IOID_9, (byte >> (7 - i)) & 0x01);
68 PIN_setOutputValue(pinHandle, IOID_10, 1); /* SPI Flash CLK */
69
70 /*
71 * Waste a few cycles to keep the CLK high for at
72 * least 45% of the period.
73 * 3 cycles per loop: 8 loops @ 48 Mhz = 0.5 us.
74 */
75 CPUdelay(8);
76 }
77
78 PIN_setOutputValue(pinHandle, IOID_10, 0); /* CLK */
79 PIN_setOutputValue(pinHandle, IOID_20, 1); /* CS */
80
81 /*
82 * Keep CS high at least 40 us
83 * 3 cycles per loop: 700 loops @ 48 Mhz ~= 44 us
84 */
85 CPUdelay(700);
86}
87
88/*
89 * ======== CC26X2R1_LAUNCHXL_wakeUpExtFlash ========
90 */
92{
93 PIN_Config extFlashPinTable[] = {
94 /* SPI Flash CS */
95 IOID_20 | PIN_GPIO_OUTPUT_EN | PIN_GPIO_HIGH | PIN_PUSHPULL |
96 PIN_INPUT_DIS | PIN_DRVSTR_MED,
97 PIN_TERMINATE
98 };
99 PIN_State extFlashPinState;
100 PIN_Handle extFlashPinHandle = PIN_open(&extFlashPinState, extFlashPinTable);
101
102 /*
103 * To wake up we need to toggle the chip select at
104 * least 20 ns and ten wait at least 35 us.
105 */
106
107 /* Toggle chip select for ~20ns to wake ext. flash */
108 PIN_setOutputValue(extFlashPinHandle, IOID_20, 0);
109 /* 3 cycles per loop: 1 loop @ 48 Mhz ~= 62 ns */
110 CPUdelay(1);
111 PIN_setOutputValue(extFlashPinHandle, IOID_20, 1);
112 /* 3 cycles per loop: 560 loops @ 48 Mhz ~= 35 us */
113 CPUdelay(560);
114
115 PIN_close(extFlashPinHandle);
116}
117
118/*
119 * ======== CC26X2R1_LAUNCHXL_shutDownExtFlash ========
120 */
122{
123 /*
124 * To be sure we are putting the flash into sleep and not waking it,
125 * we first have to make a wake up call
126 */
128
129 PIN_Config extFlashPinTable[] = {
130 /* SPI Flash CS*/
131 IOID_20 | PIN_GPIO_OUTPUT_EN | PIN_GPIO_HIGH | PIN_PUSHPULL |
132 PIN_INPUT_DIS | PIN_DRVSTR_MED,
133 /* SPI Flash CLK */
134 IOID_10 | PIN_GPIO_OUTPUT_EN | PIN_GPIO_LOW | PIN_PUSHPULL |
135 PIN_INPUT_DIS | PIN_DRVSTR_MED,
136 /* SPI Flash MOSI */
137 IOID_9 | PIN_GPIO_OUTPUT_EN | PIN_GPIO_LOW | PIN_PUSHPULL |
138 PIN_INPUT_DIS | PIN_DRVSTR_MED,
139 /* SPI Flash MISO */
140 IOID_8 | PIN_INPUT_EN | PIN_PULLDOWN,
141 PIN_TERMINATE
142 };
143 PIN_State extFlashPinState;
144 PIN_Handle extFlashPinHandle = PIN_open(&extFlashPinState, extFlashPinTable);
145
146 uint8_t extFlashShutdown = 0xB9;
147
148 CC26X2R1_LAUNCHXL_sendExtFlashByte(extFlashPinHandle, extFlashShutdown);
149
150 PIN_close(extFlashPinHandle);
151}
152
153/*
154 * ======== Board_initHook ========
155 * Called by Board_init() to perform board-specific initialization.
156 */
157void Board_initHook()
158{
160}
void CC26X2R1_LAUNCHXL_shutDownExtFlash(void)
Shut down the external flash present on the board files.
void CC26X2R1_LAUNCHXL_wakeUpExtFlash(void)
Wake up the external flash present on the board files.