RTC auf true

Committer:
kevman
Date:
Wed Mar 13 11:03:24 2019 +0000
Revision:
2:7aab896b1a3b
2019-03-13

Who changed what in which revision?

UserRevisionLine numberNew contents of line
kevman 2:7aab896b1a3b 1 /*!
kevman 2:7aab896b1a3b 2 * Copyright (c) 2015, Freescale Semiconductor, Inc.
kevman 2:7aab896b1a3b 3 * All rights reserved.
kevman 2:7aab896b1a3b 4 *
kevman 2:7aab896b1a3b 5 * \file MCR20Drv.c
kevman 2:7aab896b1a3b 6 *
kevman 2:7aab896b1a3b 7 * Redistribution and use in source and binary forms, with or without modification,
kevman 2:7aab896b1a3b 8 * are permitted provided that the following conditions are met:
kevman 2:7aab896b1a3b 9 *
kevman 2:7aab896b1a3b 10 * o Redistributions of source code must retain the above copyright notice, this list
kevman 2:7aab896b1a3b 11 * of conditions and the following disclaimer.
kevman 2:7aab896b1a3b 12 *
kevman 2:7aab896b1a3b 13 * o Redistributions in binary form must reproduce the above copyright notice, this
kevman 2:7aab896b1a3b 14 * list of conditions and the following disclaimer in the documentation and/or
kevman 2:7aab896b1a3b 15 * other materials provided with the distribution.
kevman 2:7aab896b1a3b 16 *
kevman 2:7aab896b1a3b 17 * o Neither the name of Freescale Semiconductor, Inc. nor the names of its
kevman 2:7aab896b1a3b 18 * contributors may be used to endorse or promote products derived from this
kevman 2:7aab896b1a3b 19 * software without specific prior written permission.
kevman 2:7aab896b1a3b 20 *
kevman 2:7aab896b1a3b 21 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
kevman 2:7aab896b1a3b 22 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
kevman 2:7aab896b1a3b 23 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
kevman 2:7aab896b1a3b 24 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
kevman 2:7aab896b1a3b 25 * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
kevman 2:7aab896b1a3b 26 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
kevman 2:7aab896b1a3b 27 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
kevman 2:7aab896b1a3b 28 * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
kevman 2:7aab896b1a3b 29 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
kevman 2:7aab896b1a3b 30 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
kevman 2:7aab896b1a3b 31 */
kevman 2:7aab896b1a3b 32
kevman 2:7aab896b1a3b 33
kevman 2:7aab896b1a3b 34 /*****************************************************************************
kevman 2:7aab896b1a3b 35 * INCLUDED HEADERS *
kevman 2:7aab896b1a3b 36 *---------------------------------------------------------------------------*
kevman 2:7aab896b1a3b 37 * Add to this section all the headers that this module needs to include. *
kevman 2:7aab896b1a3b 38 *---------------------------------------------------------------------------*
kevman 2:7aab896b1a3b 39 *****************************************************************************/
kevman 2:7aab896b1a3b 40
kevman 2:7aab896b1a3b 41 #include "MCR20Drv.h"
kevman 2:7aab896b1a3b 42 #include "MCR20Reg.h"
kevman 2:7aab896b1a3b 43 #include "XcvrSpi.h"
kevman 2:7aab896b1a3b 44
kevman 2:7aab896b1a3b 45 #if defined(MBED_CONF_NANOSTACK_CONFIGURATION) && DEVICE_SPI
kevman 2:7aab896b1a3b 46
kevman 2:7aab896b1a3b 47 #include "platform/mbed_critical.h"
kevman 2:7aab896b1a3b 48
kevman 2:7aab896b1a3b 49 /*****************************************************************************
kevman 2:7aab896b1a3b 50 * PRIVATE VARIABLES *
kevman 2:7aab896b1a3b 51 *---------------------------------------------------------------------------*
kevman 2:7aab896b1a3b 52 * Add to this section all the variables and constants that have local *
kevman 2:7aab896b1a3b 53 * (file) scope. *
kevman 2:7aab896b1a3b 54 * Each of this declarations shall be preceded by the 'static' keyword. *
kevman 2:7aab896b1a3b 55 * These variables / constants cannot be accessed outside this module. *
kevman 2:7aab896b1a3b 56 *---------------------------------------------------------------------------*
kevman 2:7aab896b1a3b 57 *****************************************************************************/
kevman 2:7aab896b1a3b 58 uint32_t mPhyIrqDisableCnt = 1;
kevman 2:7aab896b1a3b 59
kevman 2:7aab896b1a3b 60 /*****************************************************************************
kevman 2:7aab896b1a3b 61 * PUBLIC VARIABLES *
kevman 2:7aab896b1a3b 62 *---------------------------------------------------------------------------*
kevman 2:7aab896b1a3b 63 * Add to this section all the variables and constants that have global *
kevman 2:7aab896b1a3b 64 * (project) scope. *
kevman 2:7aab896b1a3b 65 * These variables / constants can be accessed outside this module. *
kevman 2:7aab896b1a3b 66 * These variables / constants shall be preceded by the 'extern' keyword in *
kevman 2:7aab896b1a3b 67 * the interface header. *
kevman 2:7aab896b1a3b 68 *---------------------------------------------------------------------------*
kevman 2:7aab896b1a3b 69 *****************************************************************************/
kevman 2:7aab896b1a3b 70
kevman 2:7aab896b1a3b 71 /*****************************************************************************
kevman 2:7aab896b1a3b 72 * PRIVATE FUNCTIONS PROTOTYPES *
kevman 2:7aab896b1a3b 73 *---------------------------------------------------------------------------*
kevman 2:7aab896b1a3b 74 * Add to this section all the functions prototypes that have local (file) *
kevman 2:7aab896b1a3b 75 * scope. *
kevman 2:7aab896b1a3b 76 * These functions cannot be accessed outside this module. *
kevman 2:7aab896b1a3b 77 * These declarations shall be preceded by the 'static' keyword. *
kevman 2:7aab896b1a3b 78 *---------------------------------------------------------------------------*
kevman 2:7aab896b1a3b 79 *****************************************************************************/
kevman 2:7aab896b1a3b 80
kevman 2:7aab896b1a3b 81 /*****************************************************************************
kevman 2:7aab896b1a3b 82 * PRIVATE FUNCTIONS *
kevman 2:7aab896b1a3b 83 *---------------------------------------------------------------------------*
kevman 2:7aab896b1a3b 84 * Add to this section all the functions that have local (file) scope. *
kevman 2:7aab896b1a3b 85 * These functions cannot be accessed outside this module. *
kevman 2:7aab896b1a3b 86 * These definitions shall be preceded by the 'static' keyword. *
kevman 2:7aab896b1a3b 87 *---------------------------------------------------------------------------*
kevman 2:7aab896b1a3b 88 *****************************************************************************/
kevman 2:7aab896b1a3b 89
kevman 2:7aab896b1a3b 90
kevman 2:7aab896b1a3b 91 /*****************************************************************************
kevman 2:7aab896b1a3b 92 * PUBLIC FUNCTIONS *
kevman 2:7aab896b1a3b 93 *---------------------------------------------------------------------------*
kevman 2:7aab896b1a3b 94 * Add to this section all the functions that have global (project) scope. *
kevman 2:7aab896b1a3b 95 * These functions can be accessed outside this module. *
kevman 2:7aab896b1a3b 96 * These functions shall have their declarations (prototypes) within the *
kevman 2:7aab896b1a3b 97 * interface header file and shall be preceded by the 'extern' keyword. *
kevman 2:7aab896b1a3b 98 *---------------------------------------------------------------------------*
kevman 2:7aab896b1a3b 99 *****************************************************************************/
kevman 2:7aab896b1a3b 100
kevman 2:7aab896b1a3b 101 /*---------------------------------------------------------------------------
kevman 2:7aab896b1a3b 102 * Name: MCR20Drv_Init
kevman 2:7aab896b1a3b 103 * Description: -
kevman 2:7aab896b1a3b 104 * Parameters: -
kevman 2:7aab896b1a3b 105 * Return: -
kevman 2:7aab896b1a3b 106 *---------------------------------------------------------------------------*/
kevman 2:7aab896b1a3b 107 void MCR20Drv_Init
kevman 2:7aab896b1a3b 108 (
kevman 2:7aab896b1a3b 109 void
kevman 2:7aab896b1a3b 110 )
kevman 2:7aab896b1a3b 111 {
kevman 2:7aab896b1a3b 112 xcvr_spi_init(gXcvrSpiInstance_c);
kevman 2:7aab896b1a3b 113 xcvr_spi_configure_speed(gXcvrSpiInstance_c, 8000000);
kevman 2:7aab896b1a3b 114
kevman 2:7aab896b1a3b 115 gXcvrDeassertCS_d();
kevman 2:7aab896b1a3b 116 #if !defined(TARGET_KW24D)
kevman 2:7aab896b1a3b 117 MCR20Drv_RST_B_Deassert();
kevman 2:7aab896b1a3b 118 #endif
kevman 2:7aab896b1a3b 119 RF_IRQ_Init();
kevman 2:7aab896b1a3b 120 RF_IRQ_Disable();
kevman 2:7aab896b1a3b 121 mPhyIrqDisableCnt = 1;
kevman 2:7aab896b1a3b 122 }
kevman 2:7aab896b1a3b 123
kevman 2:7aab896b1a3b 124 /*---------------------------------------------------------------------------
kevman 2:7aab896b1a3b 125 * Name: MCR20Drv_DirectAccessSPIWrite
kevman 2:7aab896b1a3b 126 * Description: -
kevman 2:7aab896b1a3b 127 * Parameters: -
kevman 2:7aab896b1a3b 128 * Return: -
kevman 2:7aab896b1a3b 129 *---------------------------------------------------------------------------*/
kevman 2:7aab896b1a3b 130 void MCR20Drv_DirectAccessSPIWrite
kevman 2:7aab896b1a3b 131 (
kevman 2:7aab896b1a3b 132 uint8_t address,
kevman 2:7aab896b1a3b 133 uint8_t value
kevman 2:7aab896b1a3b 134 )
kevman 2:7aab896b1a3b 135 {
kevman 2:7aab896b1a3b 136 uint16_t txData;
kevman 2:7aab896b1a3b 137
kevman 2:7aab896b1a3b 138 ProtectFromMCR20Interrupt();
kevman 2:7aab896b1a3b 139
kevman 2:7aab896b1a3b 140 xcvr_spi_configure_speed(gXcvrSpiInstance_c, 16000000);
kevman 2:7aab896b1a3b 141
kevman 2:7aab896b1a3b 142 gXcvrAssertCS_d();
kevman 2:7aab896b1a3b 143
kevman 2:7aab896b1a3b 144 txData = (address & TransceiverSPI_DirectRegisterAddressMask);
kevman 2:7aab896b1a3b 145 txData |= value << 8;
kevman 2:7aab896b1a3b 146
kevman 2:7aab896b1a3b 147 xcvr_spi_transfer(gXcvrSpiInstance_c, (uint8_t *)&txData, 0, sizeof(txData));
kevman 2:7aab896b1a3b 148
kevman 2:7aab896b1a3b 149 gXcvrDeassertCS_d();
kevman 2:7aab896b1a3b 150 UnprotectFromMCR20Interrupt();
kevman 2:7aab896b1a3b 151 }
kevman 2:7aab896b1a3b 152
kevman 2:7aab896b1a3b 153 /*---------------------------------------------------------------------------
kevman 2:7aab896b1a3b 154 * Name: MCR20Drv_DirectAccessSPIMultiByteWrite
kevman 2:7aab896b1a3b 155 * Description: -
kevman 2:7aab896b1a3b 156 * Parameters: -
kevman 2:7aab896b1a3b 157 * Return: -
kevman 2:7aab896b1a3b 158 *---------------------------------------------------------------------------*/
kevman 2:7aab896b1a3b 159 void MCR20Drv_DirectAccessSPIMultiByteWrite
kevman 2:7aab896b1a3b 160 (
kevman 2:7aab896b1a3b 161 uint8_t startAddress,
kevman 2:7aab896b1a3b 162 uint8_t * byteArray,
kevman 2:7aab896b1a3b 163 uint8_t numOfBytes
kevman 2:7aab896b1a3b 164 )
kevman 2:7aab896b1a3b 165 {
kevman 2:7aab896b1a3b 166 uint8_t txData;
kevman 2:7aab896b1a3b 167
kevman 2:7aab896b1a3b 168 if( (numOfBytes == 0) || (byteArray == 0) )
kevman 2:7aab896b1a3b 169 {
kevman 2:7aab896b1a3b 170 return;
kevman 2:7aab896b1a3b 171 }
kevman 2:7aab896b1a3b 172
kevman 2:7aab896b1a3b 173 ProtectFromMCR20Interrupt();
kevman 2:7aab896b1a3b 174
kevman 2:7aab896b1a3b 175 xcvr_spi_configure_speed(gXcvrSpiInstance_c, 16000000);
kevman 2:7aab896b1a3b 176
kevman 2:7aab896b1a3b 177 gXcvrAssertCS_d();
kevman 2:7aab896b1a3b 178
kevman 2:7aab896b1a3b 179 txData = (startAddress & TransceiverSPI_DirectRegisterAddressMask);
kevman 2:7aab896b1a3b 180
kevman 2:7aab896b1a3b 181 xcvr_spi_transfer(gXcvrSpiInstance_c, &txData, 0, sizeof(txData));
kevman 2:7aab896b1a3b 182 xcvr_spi_transfer(gXcvrSpiInstance_c, byteArray, 0, numOfBytes);
kevman 2:7aab896b1a3b 183
kevman 2:7aab896b1a3b 184 gXcvrDeassertCS_d();
kevman 2:7aab896b1a3b 185 UnprotectFromMCR20Interrupt();
kevman 2:7aab896b1a3b 186 }
kevman 2:7aab896b1a3b 187
kevman 2:7aab896b1a3b 188 /*---------------------------------------------------------------------------
kevman 2:7aab896b1a3b 189 * Name: MCR20Drv_PB_SPIByteWrite
kevman 2:7aab896b1a3b 190 * Description: -
kevman 2:7aab896b1a3b 191 * Parameters: -
kevman 2:7aab896b1a3b 192 * Return: -
kevman 2:7aab896b1a3b 193 *---------------------------------------------------------------------------*/
kevman 2:7aab896b1a3b 194 void MCR20Drv_PB_SPIByteWrite
kevman 2:7aab896b1a3b 195 (
kevman 2:7aab896b1a3b 196 uint8_t address,
kevman 2:7aab896b1a3b 197 uint8_t value
kevman 2:7aab896b1a3b 198 )
kevman 2:7aab896b1a3b 199 {
kevman 2:7aab896b1a3b 200 uint32_t txData;
kevman 2:7aab896b1a3b 201
kevman 2:7aab896b1a3b 202 ProtectFromMCR20Interrupt();
kevman 2:7aab896b1a3b 203
kevman 2:7aab896b1a3b 204 xcvr_spi_configure_speed(gXcvrSpiInstance_c, 16000000);
kevman 2:7aab896b1a3b 205
kevman 2:7aab896b1a3b 206 gXcvrAssertCS_d();
kevman 2:7aab896b1a3b 207
kevman 2:7aab896b1a3b 208 txData = TransceiverSPI_WriteSelect |
kevman 2:7aab896b1a3b 209 TransceiverSPI_PacketBuffAccessSelect |
kevman 2:7aab896b1a3b 210 TransceiverSPI_PacketBuffByteModeSelect;
kevman 2:7aab896b1a3b 211 txData |= (address) << 8;
kevman 2:7aab896b1a3b 212 txData |= (value) << 16;
kevman 2:7aab896b1a3b 213
kevman 2:7aab896b1a3b 214 xcvr_spi_transfer(gXcvrSpiInstance_c, (uint8_t*)&txData, 0, 3);
kevman 2:7aab896b1a3b 215
kevman 2:7aab896b1a3b 216 gXcvrDeassertCS_d();
kevman 2:7aab896b1a3b 217 UnprotectFromMCR20Interrupt();
kevman 2:7aab896b1a3b 218 }
kevman 2:7aab896b1a3b 219
kevman 2:7aab896b1a3b 220 /*---------------------------------------------------------------------------
kevman 2:7aab896b1a3b 221 * Name: MCR20Drv_PB_SPIBurstWrite
kevman 2:7aab896b1a3b 222 * Description: -
kevman 2:7aab896b1a3b 223 * Parameters: -
kevman 2:7aab896b1a3b 224 * Return: -
kevman 2:7aab896b1a3b 225 *---------------------------------------------------------------------------*/
kevman 2:7aab896b1a3b 226 void MCR20Drv_PB_SPIBurstWrite
kevman 2:7aab896b1a3b 227 (
kevman 2:7aab896b1a3b 228 uint8_t * byteArray,
kevman 2:7aab896b1a3b 229 uint8_t numOfBytes
kevman 2:7aab896b1a3b 230 )
kevman 2:7aab896b1a3b 231 {
kevman 2:7aab896b1a3b 232 uint8_t txData;
kevman 2:7aab896b1a3b 233
kevman 2:7aab896b1a3b 234 if( (numOfBytes == 0) || (byteArray == 0) )
kevman 2:7aab896b1a3b 235 {
kevman 2:7aab896b1a3b 236 return;
kevman 2:7aab896b1a3b 237 }
kevman 2:7aab896b1a3b 238
kevman 2:7aab896b1a3b 239 ProtectFromMCR20Interrupt();
kevman 2:7aab896b1a3b 240
kevman 2:7aab896b1a3b 241 xcvr_spi_configure_speed(gXcvrSpiInstance_c, 16000000);
kevman 2:7aab896b1a3b 242
kevman 2:7aab896b1a3b 243 gXcvrAssertCS_d();
kevman 2:7aab896b1a3b 244
kevman 2:7aab896b1a3b 245 txData = TransceiverSPI_WriteSelect |
kevman 2:7aab896b1a3b 246 TransceiverSPI_PacketBuffAccessSelect |
kevman 2:7aab896b1a3b 247 TransceiverSPI_PacketBuffBurstModeSelect;
kevman 2:7aab896b1a3b 248
kevman 2:7aab896b1a3b 249 xcvr_spi_transfer(gXcvrSpiInstance_c, &txData, 0, 1);
kevman 2:7aab896b1a3b 250 xcvr_spi_transfer(gXcvrSpiInstance_c, byteArray, 0, numOfBytes);
kevman 2:7aab896b1a3b 251
kevman 2:7aab896b1a3b 252 gXcvrDeassertCS_d();
kevman 2:7aab896b1a3b 253 UnprotectFromMCR20Interrupt();
kevman 2:7aab896b1a3b 254 }
kevman 2:7aab896b1a3b 255
kevman 2:7aab896b1a3b 256 /*---------------------------------------------------------------------------
kevman 2:7aab896b1a3b 257 * Name: MCR20Drv_DirectAccessSPIRead
kevman 2:7aab896b1a3b 258 * Description: -
kevman 2:7aab896b1a3b 259 * Parameters: -
kevman 2:7aab896b1a3b 260 * Return: -
kevman 2:7aab896b1a3b 261 *---------------------------------------------------------------------------*/
kevman 2:7aab896b1a3b 262
kevman 2:7aab896b1a3b 263 uint8_t MCR20Drv_DirectAccessSPIRead
kevman 2:7aab896b1a3b 264 (
kevman 2:7aab896b1a3b 265 uint8_t address
kevman 2:7aab896b1a3b 266 )
kevman 2:7aab896b1a3b 267 {
kevman 2:7aab896b1a3b 268 uint8_t txData;
kevman 2:7aab896b1a3b 269 uint8_t rxData;
kevman 2:7aab896b1a3b 270
kevman 2:7aab896b1a3b 271 ProtectFromMCR20Interrupt();
kevman 2:7aab896b1a3b 272
kevman 2:7aab896b1a3b 273 xcvr_spi_configure_speed(gXcvrSpiInstance_c, 8000000);
kevman 2:7aab896b1a3b 274
kevman 2:7aab896b1a3b 275 gXcvrAssertCS_d();
kevman 2:7aab896b1a3b 276
kevman 2:7aab896b1a3b 277 txData = (address & TransceiverSPI_DirectRegisterAddressMask) |
kevman 2:7aab896b1a3b 278 TransceiverSPI_ReadSelect;
kevman 2:7aab896b1a3b 279
kevman 2:7aab896b1a3b 280 xcvr_spi_transfer(gXcvrSpiInstance_c, &txData, 0, sizeof(txData));
kevman 2:7aab896b1a3b 281 xcvr_spi_transfer(gXcvrSpiInstance_c, 0, &rxData, sizeof(rxData));
kevman 2:7aab896b1a3b 282
kevman 2:7aab896b1a3b 283 gXcvrDeassertCS_d();
kevman 2:7aab896b1a3b 284 UnprotectFromMCR20Interrupt();
kevman 2:7aab896b1a3b 285
kevman 2:7aab896b1a3b 286 return rxData;
kevman 2:7aab896b1a3b 287
kevman 2:7aab896b1a3b 288 }
kevman 2:7aab896b1a3b 289
kevman 2:7aab896b1a3b 290 /*---------------------------------------------------------------------------
kevman 2:7aab896b1a3b 291 * Name: MCR20Drv_DirectAccessSPIMultyByteRead
kevman 2:7aab896b1a3b 292 * Description: -
kevman 2:7aab896b1a3b 293 * Parameters: -
kevman 2:7aab896b1a3b 294 * Return: -
kevman 2:7aab896b1a3b 295 *---------------------------------------------------------------------------*/
kevman 2:7aab896b1a3b 296 uint8_t MCR20Drv_DirectAccessSPIMultiByteRead
kevman 2:7aab896b1a3b 297 (
kevman 2:7aab896b1a3b 298 uint8_t startAddress,
kevman 2:7aab896b1a3b 299 uint8_t * byteArray,
kevman 2:7aab896b1a3b 300 uint8_t numOfBytes
kevman 2:7aab896b1a3b 301 )
kevman 2:7aab896b1a3b 302 {
kevman 2:7aab896b1a3b 303 uint8_t txData;
kevman 2:7aab896b1a3b 304 uint8_t phyIRQSTS1;
kevman 2:7aab896b1a3b 305
kevman 2:7aab896b1a3b 306 if( (numOfBytes == 0) || (byteArray == 0) )
kevman 2:7aab896b1a3b 307 {
kevman 2:7aab896b1a3b 308 return 0;
kevman 2:7aab896b1a3b 309 }
kevman 2:7aab896b1a3b 310
kevman 2:7aab896b1a3b 311 ProtectFromMCR20Interrupt();
kevman 2:7aab896b1a3b 312
kevman 2:7aab896b1a3b 313 xcvr_spi_configure_speed(gXcvrSpiInstance_c, 8000000);
kevman 2:7aab896b1a3b 314
kevman 2:7aab896b1a3b 315 gXcvrAssertCS_d();
kevman 2:7aab896b1a3b 316
kevman 2:7aab896b1a3b 317 txData = (startAddress & TransceiverSPI_DirectRegisterAddressMask) |
kevman 2:7aab896b1a3b 318 TransceiverSPI_ReadSelect;
kevman 2:7aab896b1a3b 319
kevman 2:7aab896b1a3b 320 xcvr_spi_transfer(gXcvrSpiInstance_c, &txData, &phyIRQSTS1, sizeof(txData));
kevman 2:7aab896b1a3b 321 xcvr_spi_transfer(gXcvrSpiInstance_c, 0, byteArray, numOfBytes);
kevman 2:7aab896b1a3b 322
kevman 2:7aab896b1a3b 323 gXcvrDeassertCS_d();
kevman 2:7aab896b1a3b 324 UnprotectFromMCR20Interrupt();
kevman 2:7aab896b1a3b 325
kevman 2:7aab896b1a3b 326 return phyIRQSTS1;
kevman 2:7aab896b1a3b 327 }
kevman 2:7aab896b1a3b 328
kevman 2:7aab896b1a3b 329 /*---------------------------------------------------------------------------
kevman 2:7aab896b1a3b 330 * Name: MCR20Drv_PB_SPIBurstRead
kevman 2:7aab896b1a3b 331 * Description: -
kevman 2:7aab896b1a3b 332 * Parameters: -
kevman 2:7aab896b1a3b 333 * Return: -
kevman 2:7aab896b1a3b 334 *---------------------------------------------------------------------------*/
kevman 2:7aab896b1a3b 335 uint8_t MCR20Drv_PB_SPIBurstRead
kevman 2:7aab896b1a3b 336 (
kevman 2:7aab896b1a3b 337 uint8_t * byteArray,
kevman 2:7aab896b1a3b 338 uint8_t numOfBytes
kevman 2:7aab896b1a3b 339 )
kevman 2:7aab896b1a3b 340 {
kevman 2:7aab896b1a3b 341 uint8_t txData;
kevman 2:7aab896b1a3b 342 uint8_t phyIRQSTS1;
kevman 2:7aab896b1a3b 343
kevman 2:7aab896b1a3b 344 if( (numOfBytes == 0) || (byteArray == 0) )
kevman 2:7aab896b1a3b 345 {
kevman 2:7aab896b1a3b 346 return 0;
kevman 2:7aab896b1a3b 347 }
kevman 2:7aab896b1a3b 348
kevman 2:7aab896b1a3b 349 ProtectFromMCR20Interrupt();
kevman 2:7aab896b1a3b 350
kevman 2:7aab896b1a3b 351 xcvr_spi_configure_speed(gXcvrSpiInstance_c, 8000000);
kevman 2:7aab896b1a3b 352
kevman 2:7aab896b1a3b 353 gXcvrAssertCS_d();
kevman 2:7aab896b1a3b 354
kevman 2:7aab896b1a3b 355 txData = TransceiverSPI_ReadSelect |
kevman 2:7aab896b1a3b 356 TransceiverSPI_PacketBuffAccessSelect |
kevman 2:7aab896b1a3b 357 TransceiverSPI_PacketBuffBurstModeSelect;
kevman 2:7aab896b1a3b 358
kevman 2:7aab896b1a3b 359 xcvr_spi_transfer(gXcvrSpiInstance_c, &txData, &phyIRQSTS1, sizeof(txData));
kevman 2:7aab896b1a3b 360 xcvr_spi_transfer(gXcvrSpiInstance_c, 0, byteArray, numOfBytes);
kevman 2:7aab896b1a3b 361
kevman 2:7aab896b1a3b 362 gXcvrDeassertCS_d();
kevman 2:7aab896b1a3b 363 UnprotectFromMCR20Interrupt();
kevman 2:7aab896b1a3b 364
kevman 2:7aab896b1a3b 365 return phyIRQSTS1;
kevman 2:7aab896b1a3b 366 }
kevman 2:7aab896b1a3b 367
kevman 2:7aab896b1a3b 368 /*---------------------------------------------------------------------------
kevman 2:7aab896b1a3b 369 * Name: MCR20Drv_IndirectAccessSPIWrite
kevman 2:7aab896b1a3b 370 * Description: -
kevman 2:7aab896b1a3b 371 * Parameters: -
kevman 2:7aab896b1a3b 372 * Return: -
kevman 2:7aab896b1a3b 373 *---------------------------------------------------------------------------*/
kevman 2:7aab896b1a3b 374 void MCR20Drv_IndirectAccessSPIWrite
kevman 2:7aab896b1a3b 375 (
kevman 2:7aab896b1a3b 376 uint8_t address,
kevman 2:7aab896b1a3b 377 uint8_t value
kevman 2:7aab896b1a3b 378 )
kevman 2:7aab896b1a3b 379 {
kevman 2:7aab896b1a3b 380 uint32_t txData;
kevman 2:7aab896b1a3b 381
kevman 2:7aab896b1a3b 382 ProtectFromMCR20Interrupt();
kevman 2:7aab896b1a3b 383
kevman 2:7aab896b1a3b 384 xcvr_spi_configure_speed(gXcvrSpiInstance_c, 16000000);
kevman 2:7aab896b1a3b 385
kevman 2:7aab896b1a3b 386 gXcvrAssertCS_d();
kevman 2:7aab896b1a3b 387
kevman 2:7aab896b1a3b 388 txData = TransceiverSPI_IARIndexReg;
kevman 2:7aab896b1a3b 389 txData |= (address) << 8;
kevman 2:7aab896b1a3b 390 txData |= (value) << 16;
kevman 2:7aab896b1a3b 391
kevman 2:7aab896b1a3b 392 xcvr_spi_transfer(gXcvrSpiInstance_c, (uint8_t*)&txData, 0, 3);
kevman 2:7aab896b1a3b 393
kevman 2:7aab896b1a3b 394 gXcvrDeassertCS_d();
kevman 2:7aab896b1a3b 395 UnprotectFromMCR20Interrupt();
kevman 2:7aab896b1a3b 396 }
kevman 2:7aab896b1a3b 397
kevman 2:7aab896b1a3b 398 /*---------------------------------------------------------------------------
kevman 2:7aab896b1a3b 399 * Name: MCR20Drv_IndirectAccessSPIMultiByteWrite
kevman 2:7aab896b1a3b 400 * Description: -
kevman 2:7aab896b1a3b 401 * Parameters: -
kevman 2:7aab896b1a3b 402 * Return: -
kevman 2:7aab896b1a3b 403 *---------------------------------------------------------------------------*/
kevman 2:7aab896b1a3b 404 void MCR20Drv_IndirectAccessSPIMultiByteWrite
kevman 2:7aab896b1a3b 405 (
kevman 2:7aab896b1a3b 406 uint8_t startAddress,
kevman 2:7aab896b1a3b 407 uint8_t * byteArray,
kevman 2:7aab896b1a3b 408 uint8_t numOfBytes
kevman 2:7aab896b1a3b 409 )
kevman 2:7aab896b1a3b 410 {
kevman 2:7aab896b1a3b 411 uint16_t txData;
kevman 2:7aab896b1a3b 412
kevman 2:7aab896b1a3b 413 if( (numOfBytes == 0) || (byteArray == 0) )
kevman 2:7aab896b1a3b 414 {
kevman 2:7aab896b1a3b 415 return;
kevman 2:7aab896b1a3b 416 }
kevman 2:7aab896b1a3b 417
kevman 2:7aab896b1a3b 418 ProtectFromMCR20Interrupt();
kevman 2:7aab896b1a3b 419
kevman 2:7aab896b1a3b 420 xcvr_spi_configure_speed(gXcvrSpiInstance_c, 16000000);
kevman 2:7aab896b1a3b 421
kevman 2:7aab896b1a3b 422 gXcvrAssertCS_d();
kevman 2:7aab896b1a3b 423
kevman 2:7aab896b1a3b 424 txData = TransceiverSPI_IARIndexReg;
kevman 2:7aab896b1a3b 425 txData |= (startAddress) << 8;
kevman 2:7aab896b1a3b 426
kevman 2:7aab896b1a3b 427 xcvr_spi_transfer(gXcvrSpiInstance_c, (uint8_t*)&txData, 0, sizeof(txData));
kevman 2:7aab896b1a3b 428 xcvr_spi_transfer(gXcvrSpiInstance_c, (uint8_t*)byteArray, 0, numOfBytes);
kevman 2:7aab896b1a3b 429
kevman 2:7aab896b1a3b 430 gXcvrDeassertCS_d();
kevman 2:7aab896b1a3b 431 UnprotectFromMCR20Interrupt();
kevman 2:7aab896b1a3b 432 }
kevman 2:7aab896b1a3b 433
kevman 2:7aab896b1a3b 434 /*---------------------------------------------------------------------------
kevman 2:7aab896b1a3b 435 * Name: MCR20Drv_IndirectAccessSPIRead
kevman 2:7aab896b1a3b 436 * Description: -
kevman 2:7aab896b1a3b 437 * Parameters: -
kevman 2:7aab896b1a3b 438 * Return: -
kevman 2:7aab896b1a3b 439 *---------------------------------------------------------------------------*/
kevman 2:7aab896b1a3b 440 uint8_t MCR20Drv_IndirectAccessSPIRead
kevman 2:7aab896b1a3b 441 (
kevman 2:7aab896b1a3b 442 uint8_t address
kevman 2:7aab896b1a3b 443 )
kevman 2:7aab896b1a3b 444 {
kevman 2:7aab896b1a3b 445 uint16_t txData;
kevman 2:7aab896b1a3b 446 uint8_t rxData;
kevman 2:7aab896b1a3b 447
kevman 2:7aab896b1a3b 448 ProtectFromMCR20Interrupt();
kevman 2:7aab896b1a3b 449
kevman 2:7aab896b1a3b 450 xcvr_spi_configure_speed(gXcvrSpiInstance_c, 8000000);
kevman 2:7aab896b1a3b 451
kevman 2:7aab896b1a3b 452 gXcvrAssertCS_d();
kevman 2:7aab896b1a3b 453
kevman 2:7aab896b1a3b 454 txData = TransceiverSPI_IARIndexReg | TransceiverSPI_ReadSelect;
kevman 2:7aab896b1a3b 455 txData |= (address) << 8;
kevman 2:7aab896b1a3b 456
kevman 2:7aab896b1a3b 457 xcvr_spi_transfer(gXcvrSpiInstance_c, (uint8_t*)&txData, 0, sizeof(txData));
kevman 2:7aab896b1a3b 458 xcvr_spi_transfer(gXcvrSpiInstance_c, 0, &rxData, sizeof(rxData));
kevman 2:7aab896b1a3b 459
kevman 2:7aab896b1a3b 460 gXcvrDeassertCS_d();
kevman 2:7aab896b1a3b 461 UnprotectFromMCR20Interrupt();
kevman 2:7aab896b1a3b 462
kevman 2:7aab896b1a3b 463 return rxData;
kevman 2:7aab896b1a3b 464 }
kevman 2:7aab896b1a3b 465
kevman 2:7aab896b1a3b 466 /*---------------------------------------------------------------------------
kevman 2:7aab896b1a3b 467 * Name: MCR20Drv_IndirectAccessSPIMultiByteRead
kevman 2:7aab896b1a3b 468 * Description: -
kevman 2:7aab896b1a3b 469 * Parameters: -
kevman 2:7aab896b1a3b 470 * Return: -
kevman 2:7aab896b1a3b 471 *---------------------------------------------------------------------------*/
kevman 2:7aab896b1a3b 472 void MCR20Drv_IndirectAccessSPIMultiByteRead
kevman 2:7aab896b1a3b 473 (
kevman 2:7aab896b1a3b 474 uint8_t startAddress,
kevman 2:7aab896b1a3b 475 uint8_t * byteArray,
kevman 2:7aab896b1a3b 476 uint8_t numOfBytes
kevman 2:7aab896b1a3b 477 )
kevman 2:7aab896b1a3b 478 {
kevman 2:7aab896b1a3b 479 uint16_t txData;
kevman 2:7aab896b1a3b 480
kevman 2:7aab896b1a3b 481 if( (numOfBytes == 0) || (byteArray == 0) )
kevman 2:7aab896b1a3b 482 {
kevman 2:7aab896b1a3b 483 return;
kevman 2:7aab896b1a3b 484 }
kevman 2:7aab896b1a3b 485
kevman 2:7aab896b1a3b 486 ProtectFromMCR20Interrupt();
kevman 2:7aab896b1a3b 487
kevman 2:7aab896b1a3b 488 xcvr_spi_configure_speed(gXcvrSpiInstance_c, 8000000);
kevman 2:7aab896b1a3b 489
kevman 2:7aab896b1a3b 490 gXcvrAssertCS_d();
kevman 2:7aab896b1a3b 491
kevman 2:7aab896b1a3b 492 txData = (TransceiverSPI_IARIndexReg | TransceiverSPI_ReadSelect);
kevman 2:7aab896b1a3b 493 txData |= (startAddress) << 8;
kevman 2:7aab896b1a3b 494
kevman 2:7aab896b1a3b 495 xcvr_spi_transfer(gXcvrSpiInstance_c, (uint8_t*)&txData, 0, sizeof(txData));
kevman 2:7aab896b1a3b 496 xcvr_spi_transfer(gXcvrSpiInstance_c, 0, byteArray, numOfBytes);
kevman 2:7aab896b1a3b 497
kevman 2:7aab896b1a3b 498 gXcvrDeassertCS_d();
kevman 2:7aab896b1a3b 499 UnprotectFromMCR20Interrupt();
kevman 2:7aab896b1a3b 500 }
kevman 2:7aab896b1a3b 501
kevman 2:7aab896b1a3b 502 /*---------------------------------------------------------------------------
kevman 2:7aab896b1a3b 503 * Name: MCR20Drv_IsIrqPending
kevman 2:7aab896b1a3b 504 * Description: -
kevman 2:7aab896b1a3b 505 * Parameters: -
kevman 2:7aab896b1a3b 506 * Return: -
kevman 2:7aab896b1a3b 507 *---------------------------------------------------------------------------*/
kevman 2:7aab896b1a3b 508 uint32_t MCR20Drv_IsIrqPending
kevman 2:7aab896b1a3b 509 (
kevman 2:7aab896b1a3b 510 void
kevman 2:7aab896b1a3b 511 )
kevman 2:7aab896b1a3b 512 {
kevman 2:7aab896b1a3b 513 return RF_isIRQ_Pending();
kevman 2:7aab896b1a3b 514 }
kevman 2:7aab896b1a3b 515
kevman 2:7aab896b1a3b 516 /*---------------------------------------------------------------------------
kevman 2:7aab896b1a3b 517 * Name: MCR20Drv_IRQ_Disable
kevman 2:7aab896b1a3b 518 * Description: -
kevman 2:7aab896b1a3b 519 * Parameters: -
kevman 2:7aab896b1a3b 520 * Return: -
kevman 2:7aab896b1a3b 521 *---------------------------------------------------------------------------*/
kevman 2:7aab896b1a3b 522 void MCR20Drv_IRQ_Disable
kevman 2:7aab896b1a3b 523 (
kevman 2:7aab896b1a3b 524 void
kevman 2:7aab896b1a3b 525 )
kevman 2:7aab896b1a3b 526 {
kevman 2:7aab896b1a3b 527 core_util_critical_section_enter();
kevman 2:7aab896b1a3b 528
kevman 2:7aab896b1a3b 529 if( mPhyIrqDisableCnt == 0 )
kevman 2:7aab896b1a3b 530 {
kevman 2:7aab896b1a3b 531 RF_IRQ_Disable();
kevman 2:7aab896b1a3b 532 }
kevman 2:7aab896b1a3b 533
kevman 2:7aab896b1a3b 534 mPhyIrqDisableCnt++;
kevman 2:7aab896b1a3b 535
kevman 2:7aab896b1a3b 536 core_util_critical_section_exit();
kevman 2:7aab896b1a3b 537 }
kevman 2:7aab896b1a3b 538
kevman 2:7aab896b1a3b 539 /*---------------------------------------------------------------------------
kevman 2:7aab896b1a3b 540 * Name: MCR20Drv_IRQ_Enable
kevman 2:7aab896b1a3b 541 * Description: -
kevman 2:7aab896b1a3b 542 * Parameters: -
kevman 2:7aab896b1a3b 543 * Return: -
kevman 2:7aab896b1a3b 544 *---------------------------------------------------------------------------*/
kevman 2:7aab896b1a3b 545 void MCR20Drv_IRQ_Enable
kevman 2:7aab896b1a3b 546 (
kevman 2:7aab896b1a3b 547 void
kevman 2:7aab896b1a3b 548 )
kevman 2:7aab896b1a3b 549 {
kevman 2:7aab896b1a3b 550 core_util_critical_section_enter();
kevman 2:7aab896b1a3b 551
kevman 2:7aab896b1a3b 552 if( mPhyIrqDisableCnt )
kevman 2:7aab896b1a3b 553 {
kevman 2:7aab896b1a3b 554 mPhyIrqDisableCnt--;
kevman 2:7aab896b1a3b 555
kevman 2:7aab896b1a3b 556 if( mPhyIrqDisableCnt == 0 )
kevman 2:7aab896b1a3b 557 {
kevman 2:7aab896b1a3b 558 RF_IRQ_Enable();
kevman 2:7aab896b1a3b 559 }
kevman 2:7aab896b1a3b 560 }
kevman 2:7aab896b1a3b 561
kevman 2:7aab896b1a3b 562 core_util_critical_section_exit();
kevman 2:7aab896b1a3b 563 }
kevman 2:7aab896b1a3b 564
kevman 2:7aab896b1a3b 565 /*---------------------------------------------------------------------------
kevman 2:7aab896b1a3b 566 * Name: MCR20Drv_RST_Assert
kevman 2:7aab896b1a3b 567 * Description: -
kevman 2:7aab896b1a3b 568 * Parameters: -
kevman 2:7aab896b1a3b 569 * Return: -
kevman 2:7aab896b1a3b 570 *---------------------------------------------------------------------------*/
kevman 2:7aab896b1a3b 571 void MCR20Drv_RST_B_Assert
kevman 2:7aab896b1a3b 572 (
kevman 2:7aab896b1a3b 573 void
kevman 2:7aab896b1a3b 574 )
kevman 2:7aab896b1a3b 575 {
kevman 2:7aab896b1a3b 576 RF_RST_Set(0);
kevman 2:7aab896b1a3b 577 }
kevman 2:7aab896b1a3b 578
kevman 2:7aab896b1a3b 579 /*---------------------------------------------------------------------------
kevman 2:7aab896b1a3b 580 * Name: MCR20Drv_RST_Deassert
kevman 2:7aab896b1a3b 581 * Description: -
kevman 2:7aab896b1a3b 582 * Parameters: -
kevman 2:7aab896b1a3b 583 * Return: -
kevman 2:7aab896b1a3b 584 *---------------------------------------------------------------------------*/
kevman 2:7aab896b1a3b 585 void MCR20Drv_RST_B_Deassert
kevman 2:7aab896b1a3b 586 (
kevman 2:7aab896b1a3b 587 void
kevman 2:7aab896b1a3b 588 )
kevman 2:7aab896b1a3b 589 {
kevman 2:7aab896b1a3b 590 RF_RST_Set(1);
kevman 2:7aab896b1a3b 591 }
kevman 2:7aab896b1a3b 592
kevman 2:7aab896b1a3b 593 /*---------------------------------------------------------------------------
kevman 2:7aab896b1a3b 594 * Name: MCR20Drv_SoftRST_Assert
kevman 2:7aab896b1a3b 595 * Description: -
kevman 2:7aab896b1a3b 596 * Parameters: -
kevman 2:7aab896b1a3b 597 * Return: -
kevman 2:7aab896b1a3b 598 *---------------------------------------------------------------------------*/
kevman 2:7aab896b1a3b 599 void MCR20Drv_SoftRST_Assert
kevman 2:7aab896b1a3b 600 (
kevman 2:7aab896b1a3b 601 void
kevman 2:7aab896b1a3b 602 )
kevman 2:7aab896b1a3b 603 {
kevman 2:7aab896b1a3b 604 MCR20Drv_IndirectAccessSPIWrite(SOFT_RESET, (0x80));
kevman 2:7aab896b1a3b 605 }
kevman 2:7aab896b1a3b 606
kevman 2:7aab896b1a3b 607 /*---------------------------------------------------------------------------
kevman 2:7aab896b1a3b 608 * Name: MCR20Drv_SoftRST_Deassert
kevman 2:7aab896b1a3b 609 * Description: -
kevman 2:7aab896b1a3b 610 * Parameters: -
kevman 2:7aab896b1a3b 611 * Return: -
kevman 2:7aab896b1a3b 612 *---------------------------------------------------------------------------*/
kevman 2:7aab896b1a3b 613 void MCR20Drv_SoftRST_Deassert
kevman 2:7aab896b1a3b 614 (
kevman 2:7aab896b1a3b 615 void
kevman 2:7aab896b1a3b 616 )
kevman 2:7aab896b1a3b 617 {
kevman 2:7aab896b1a3b 618 MCR20Drv_IndirectAccessSPIWrite(SOFT_RESET, (0x00));
kevman 2:7aab896b1a3b 619 }
kevman 2:7aab896b1a3b 620
kevman 2:7aab896b1a3b 621 /*---------------------------------------------------------------------------
kevman 2:7aab896b1a3b 622 * Name: MCR20Drv_Soft_RESET
kevman 2:7aab896b1a3b 623 * Description: -
kevman 2:7aab896b1a3b 624 * Parameters: -
kevman 2:7aab896b1a3b 625 * Return: -
kevman 2:7aab896b1a3b 626 *---------------------------------------------------------------------------*/
kevman 2:7aab896b1a3b 627 void MCR20Drv_Soft_RESET
kevman 2:7aab896b1a3b 628 (
kevman 2:7aab896b1a3b 629 void
kevman 2:7aab896b1a3b 630 )
kevman 2:7aab896b1a3b 631 {
kevman 2:7aab896b1a3b 632 //assert SOG_RST
kevman 2:7aab896b1a3b 633 MCR20Drv_IndirectAccessSPIWrite(SOFT_RESET, (0x80));
kevman 2:7aab896b1a3b 634
kevman 2:7aab896b1a3b 635 //deassert SOG_RST
kevman 2:7aab896b1a3b 636 MCR20Drv_IndirectAccessSPIWrite(SOFT_RESET, (0x00));
kevman 2:7aab896b1a3b 637 }
kevman 2:7aab896b1a3b 638
kevman 2:7aab896b1a3b 639 /*---------------------------------------------------------------------------
kevman 2:7aab896b1a3b 640 * Name: MCR20Drv_RESET
kevman 2:7aab896b1a3b 641 * Description: -
kevman 2:7aab896b1a3b 642 * Parameters: -
kevman 2:7aab896b1a3b 643 * Return: -
kevman 2:7aab896b1a3b 644 *---------------------------------------------------------------------------*/
kevman 2:7aab896b1a3b 645 void MCR20Drv_RESET
kevman 2:7aab896b1a3b 646 (
kevman 2:7aab896b1a3b 647 void
kevman 2:7aab896b1a3b 648 )
kevman 2:7aab896b1a3b 649 {
kevman 2:7aab896b1a3b 650 #if !defined(TARGET_KW24D)
kevman 2:7aab896b1a3b 651 volatile uint32_t delay = 1000;
kevman 2:7aab896b1a3b 652 //assert RST_B
kevman 2:7aab896b1a3b 653 MCR20Drv_RST_B_Assert();
kevman 2:7aab896b1a3b 654
kevman 2:7aab896b1a3b 655 while(delay--);
kevman 2:7aab896b1a3b 656
kevman 2:7aab896b1a3b 657 //deassert RST_B
kevman 2:7aab896b1a3b 658 MCR20Drv_RST_B_Deassert();
kevman 2:7aab896b1a3b 659 #endif
kevman 2:7aab896b1a3b 660 }
kevman 2:7aab896b1a3b 661
kevman 2:7aab896b1a3b 662 /*---------------------------------------------------------------------------
kevman 2:7aab896b1a3b 663 * Name: MCR20Drv_Set_CLK_OUT_Freq
kevman 2:7aab896b1a3b 664 * Description: -
kevman 2:7aab896b1a3b 665 * Parameters: -
kevman 2:7aab896b1a3b 666 * Return: -
kevman 2:7aab896b1a3b 667 *---------------------------------------------------------------------------*/
kevman 2:7aab896b1a3b 668 void MCR20Drv_Set_CLK_OUT_Freq
kevman 2:7aab896b1a3b 669 (
kevman 2:7aab896b1a3b 670 uint8_t freqDiv
kevman 2:7aab896b1a3b 671 )
kevman 2:7aab896b1a3b 672 {
kevman 2:7aab896b1a3b 673 uint8_t clkOutCtrlReg = (freqDiv & cCLK_OUT_DIV_Mask) | cCLK_OUT_EN | cCLK_OUT_EXTEND;
kevman 2:7aab896b1a3b 674
kevman 2:7aab896b1a3b 675 if(freqDiv == gCLK_OUT_FREQ_DISABLE)
kevman 2:7aab896b1a3b 676 {
kevman 2:7aab896b1a3b 677 clkOutCtrlReg = (cCLK_OUT_EXTEND | gCLK_OUT_FREQ_4_MHz); //reset value with clock out disabled
kevman 2:7aab896b1a3b 678 }
kevman 2:7aab896b1a3b 679
kevman 2:7aab896b1a3b 680 MCR20Drv_DirectAccessSPIWrite((uint8_t) CLK_OUT_CTRL, clkOutCtrlReg);
kevman 2:7aab896b1a3b 681 }
kevman 2:7aab896b1a3b 682
kevman 2:7aab896b1a3b 683 #endif /* MBED_CONF_NANOSTACK_CONFIGURATION */