sdasd

Dependencies:   BLE_API mbed nRF51822

Fork of MEDRON_SNIFFER_ABCD-KIMLIKLI-OLANLARI-TARAMA-YAPAR_30062016 by HAKAN AYDIN

Committer:
Adembay
Date:
Thu Sep 21 09:16:14 2017 +0000
Revision:
15:a88e0135e67e
sda

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Adembay 15:a88e0135e67e 1 /*
Adembay 15:a88e0135e67e 2
Adembay 15:a88e0135e67e 3 Copyright (c) 2012-2014 RedBearLab
Adembay 15:a88e0135e67e 4
Adembay 15:a88e0135e67e 5 Permission is hereby granted, free of charge, to any person obtaining a copy of this software
Adembay 15:a88e0135e67e 6 and associated documentation files (the "Software"), to deal in the Software without restriction,
Adembay 15:a88e0135e67e 7 including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense,
Adembay 15:a88e0135e67e 8 and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so,
Adembay 15:a88e0135e67e 9 subject to the following conditions:
Adembay 15:a88e0135e67e 10 The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
Adembay 15:a88e0135e67e 11
Adembay 15:a88e0135e67e 12 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
Adembay 15:a88e0135e67e 13 INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
Adembay 15:a88e0135e67e 14 PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE
Adembay 15:a88e0135e67e 15 FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
Adembay 15:a88e0135e67e 16 ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
Adembay 15:a88e0135e67e 17
Adembay 15:a88e0135e67e 18 */
Adembay 15:a88e0135e67e 19
Adembay 15:a88e0135e67e 20 #include "spi_master.h"
Adembay 15:a88e0135e67e 21
Adembay 15:a88e0135e67e 22 /**********************************************************************
Adembay 15:a88e0135e67e 23 name :
Adembay 15:a88e0135e67e 24 function :
Adembay 15:a88e0135e67e 25 **********************************************************************/
Adembay 15:a88e0135e67e 26 SPIClass::SPIClass(NRF_SPI_Type *_spi) : spi(_spi)
Adembay 15:a88e0135e67e 27 {
Adembay 15:a88e0135e67e 28 //do nothing
Adembay 15:a88e0135e67e 29 }
Adembay 15:a88e0135e67e 30
Adembay 15:a88e0135e67e 31 /**********************************************************************
Adembay 15:a88e0135e67e 32 name :
Adembay 15:a88e0135e67e 33 function :
Adembay 15:a88e0135e67e 34 **********************************************************************/
Adembay 15:a88e0135e67e 35 void SPIClass::setCPOL( bool active_low)
Adembay 15:a88e0135e67e 36 {
Adembay 15:a88e0135e67e 37 if(active_low)
Adembay 15:a88e0135e67e 38 {
Adembay 15:a88e0135e67e 39 spi->CONFIG |= (SPI_CONFIG_CPOL_ActiveLow << SPI_CONFIG_CPOL_Pos);
Adembay 15:a88e0135e67e 40 }
Adembay 15:a88e0135e67e 41 else
Adembay 15:a88e0135e67e 42 {
Adembay 15:a88e0135e67e 43 spi->CONFIG |= (SPI_CONFIG_CPOL_ActiveHigh << SPI_CONFIG_CPOL_Pos);
Adembay 15:a88e0135e67e 44 }
Adembay 15:a88e0135e67e 45 }
Adembay 15:a88e0135e67e 46
Adembay 15:a88e0135e67e 47 /**********************************************************************
Adembay 15:a88e0135e67e 48 name :
Adembay 15:a88e0135e67e 49 function :
Adembay 15:a88e0135e67e 50 **********************************************************************/
Adembay 15:a88e0135e67e 51 void SPIClass::setCPHA( bool trailing)
Adembay 15:a88e0135e67e 52 {
Adembay 15:a88e0135e67e 53 if(trailing)
Adembay 15:a88e0135e67e 54 {
Adembay 15:a88e0135e67e 55 spi->CONFIG |= (SPI_CONFIG_CPHA_Trailing << SPI_CONFIG_CPHA_Pos);
Adembay 15:a88e0135e67e 56 }
Adembay 15:a88e0135e67e 57 else
Adembay 15:a88e0135e67e 58 {
Adembay 15:a88e0135e67e 59 spi->CONFIG |= (SPI_CONFIG_CPHA_Leading << SPI_CONFIG_CPHA_Pos);
Adembay 15:a88e0135e67e 60 }
Adembay 15:a88e0135e67e 61
Adembay 15:a88e0135e67e 62 }
Adembay 15:a88e0135e67e 63
Adembay 15:a88e0135e67e 64 /**********************************************************************
Adembay 15:a88e0135e67e 65 name :
Adembay 15:a88e0135e67e 66 function : MSBFIRST, LSBFIRST
Adembay 15:a88e0135e67e 67 **********************************************************************/
Adembay 15:a88e0135e67e 68 void SPIClass::setBitORDER( BitOrder bit)
Adembay 15:a88e0135e67e 69 {
Adembay 15:a88e0135e67e 70 if(bit == MSBFIRST)
Adembay 15:a88e0135e67e 71 {
Adembay 15:a88e0135e67e 72 spi->CONFIG |= (SPI_CONFIG_ORDER_MsbFirst << SPI_CONFIG_ORDER_Pos);
Adembay 15:a88e0135e67e 73 }
Adembay 15:a88e0135e67e 74 else
Adembay 15:a88e0135e67e 75 {
Adembay 15:a88e0135e67e 76 spi->CONFIG |= (SPI_CONFIG_ORDER_LsbFirst << SPI_CONFIG_ORDER_Pos);
Adembay 15:a88e0135e67e 77 }
Adembay 15:a88e0135e67e 78 }
Adembay 15:a88e0135e67e 79
Adembay 15:a88e0135e67e 80 /**********************************************************************
Adembay 15:a88e0135e67e 81 name :
Adembay 15:a88e0135e67e 82 function :
Adembay 15:a88e0135e67e 83 **********************************************************************/
Adembay 15:a88e0135e67e 84 void SPIClass::setFrequency(uint8_t speed)
Adembay 15:a88e0135e67e 85 {
Adembay 15:a88e0135e67e 86 if (speed == 0)
Adembay 15:a88e0135e67e 87 {
Adembay 15:a88e0135e67e 88 spi->FREQUENCY = SPI_FREQUENCY_125K;
Adembay 15:a88e0135e67e 89 }
Adembay 15:a88e0135e67e 90 else if (speed == 1)
Adembay 15:a88e0135e67e 91 {
Adembay 15:a88e0135e67e 92 spi->FREQUENCY = SPI_FREQUENCY_250K;
Adembay 15:a88e0135e67e 93 }
Adembay 15:a88e0135e67e 94 else if (speed == 2)
Adembay 15:a88e0135e67e 95 {
Adembay 15:a88e0135e67e 96 spi->FREQUENCY = SPI_FREQUENCY_500K;
Adembay 15:a88e0135e67e 97 }
Adembay 15:a88e0135e67e 98 else if (speed == 3)
Adembay 15:a88e0135e67e 99 {
Adembay 15:a88e0135e67e 100 spi->FREQUENCY = SPI_FREQUENCY_1M;
Adembay 15:a88e0135e67e 101 }
Adembay 15:a88e0135e67e 102 else if (speed == 4)
Adembay 15:a88e0135e67e 103 {
Adembay 15:a88e0135e67e 104 spi->FREQUENCY = SPI_FREQUENCY_2M;
Adembay 15:a88e0135e67e 105 }
Adembay 15:a88e0135e67e 106 else if (speed == 5)
Adembay 15:a88e0135e67e 107 {
Adembay 15:a88e0135e67e 108 spi->FREQUENCY = SPI_FREQUENCY_4M;
Adembay 15:a88e0135e67e 109 }
Adembay 15:a88e0135e67e 110 else if (speed == 6)
Adembay 15:a88e0135e67e 111 {
Adembay 15:a88e0135e67e 112 spi->FREQUENCY = SPI_FREQUENCY_8M;
Adembay 15:a88e0135e67e 113 }
Adembay 15:a88e0135e67e 114 else
Adembay 15:a88e0135e67e 115 {
Adembay 15:a88e0135e67e 116 spi->FREQUENCY = SPI_FREQUENCY_4M;
Adembay 15:a88e0135e67e 117 }
Adembay 15:a88e0135e67e 118 }
Adembay 15:a88e0135e67e 119
Adembay 15:a88e0135e67e 120 /**********************************************************************
Adembay 15:a88e0135e67e 121 name :
Adembay 15:a88e0135e67e 122 function :
Adembay 15:a88e0135e67e 123 **********************************************************************/
Adembay 15:a88e0135e67e 124 void SPIClass::setSPIMode( uint8_t mode )
Adembay 15:a88e0135e67e 125 {
Adembay 15:a88e0135e67e 126 if (SPI_MODE0 == mode)
Adembay 15:a88e0135e67e 127 {
Adembay 15:a88e0135e67e 128 setCPOL(0);
Adembay 15:a88e0135e67e 129 setCPHA(0);
Adembay 15:a88e0135e67e 130 }
Adembay 15:a88e0135e67e 131 else if (mode == SPI_MODE1)
Adembay 15:a88e0135e67e 132 {
Adembay 15:a88e0135e67e 133 setCPOL(0);
Adembay 15:a88e0135e67e 134 setCPHA(1);
Adembay 15:a88e0135e67e 135 }
Adembay 15:a88e0135e67e 136 else if (mode == SPI_MODE2)
Adembay 15:a88e0135e67e 137 {
Adembay 15:a88e0135e67e 138 setCPOL(1);
Adembay 15:a88e0135e67e 139 setCPHA(0);
Adembay 15:a88e0135e67e 140 }
Adembay 15:a88e0135e67e 141 else if (mode == SPI_MODE3)
Adembay 15:a88e0135e67e 142 {
Adembay 15:a88e0135e67e 143 setCPOL(1);
Adembay 15:a88e0135e67e 144 setCPHA(1);
Adembay 15:a88e0135e67e 145 }
Adembay 15:a88e0135e67e 146 else
Adembay 15:a88e0135e67e 147 {
Adembay 15:a88e0135e67e 148 setCPOL(0);
Adembay 15:a88e0135e67e 149 setCPHA(0);
Adembay 15:a88e0135e67e 150 }
Adembay 15:a88e0135e67e 151 }
Adembay 15:a88e0135e67e 152
Adembay 15:a88e0135e67e 153 /**********************************************************************
Adembay 15:a88e0135e67e 154 name :
Adembay 15:a88e0135e67e 155 function :
Adembay 15:a88e0135e67e 156 **********************************************************************/
Adembay 15:a88e0135e67e 157 void SPIClass::begin(uint32_t sck, uint32_t mosi, uint32_t miso)
Adembay 15:a88e0135e67e 158 {
Adembay 15:a88e0135e67e 159
Adembay 15:a88e0135e67e 160 SCK_Pin = sck;
Adembay 15:a88e0135e67e 161 MOSI_Pin = mosi;
Adembay 15:a88e0135e67e 162 MISO_Pin = miso;
Adembay 15:a88e0135e67e 163
Adembay 15:a88e0135e67e 164 NRF_GPIO->PIN_CNF[SCK_Pin] = (GPIO_PIN_CNF_SENSE_Disabled << GPIO_PIN_CNF_SENSE_Pos)
Adembay 15:a88e0135e67e 165 | (GPIO_PIN_CNF_DRIVE_S0S1 << GPIO_PIN_CNF_DRIVE_Pos)
Adembay 15:a88e0135e67e 166 | (GPIO_PIN_CNF_PULL_Disabled << GPIO_PIN_CNF_PULL_Pos)
Adembay 15:a88e0135e67e 167 | (GPIO_PIN_CNF_INPUT_Connect << GPIO_PIN_CNF_INPUT_Pos)
Adembay 15:a88e0135e67e 168 | (GPIO_PIN_CNF_DIR_Output << GPIO_PIN_CNF_DIR_Pos);
Adembay 15:a88e0135e67e 169
Adembay 15:a88e0135e67e 170 NRF_GPIO->PIN_CNF[MOSI_Pin] = (GPIO_PIN_CNF_SENSE_Disabled << GPIO_PIN_CNF_SENSE_Pos)
Adembay 15:a88e0135e67e 171 | (GPIO_PIN_CNF_DRIVE_S0S1 << GPIO_PIN_CNF_DRIVE_Pos)
Adembay 15:a88e0135e67e 172 | (GPIO_PIN_CNF_PULL_Disabled << GPIO_PIN_CNF_PULL_Pos)
Adembay 15:a88e0135e67e 173 | (GPIO_PIN_CNF_INPUT_Connect << GPIO_PIN_CNF_INPUT_Pos)
Adembay 15:a88e0135e67e 174 | (GPIO_PIN_CNF_DIR_Output << GPIO_PIN_CNF_DIR_Pos);
Adembay 15:a88e0135e67e 175
Adembay 15:a88e0135e67e 176 NRF_GPIO->PIN_CNF[MISO_Pin] = (GPIO_PIN_CNF_SENSE_Disabled << GPIO_PIN_CNF_SENSE_Pos)
Adembay 15:a88e0135e67e 177 | (GPIO_PIN_CNF_DRIVE_S0S1 << GPIO_PIN_CNF_DRIVE_Pos)
Adembay 15:a88e0135e67e 178 | (GPIO_PIN_CNF_PULL_Disabled << GPIO_PIN_CNF_PULL_Pos)
Adembay 15:a88e0135e67e 179 | (GPIO_PIN_CNF_INPUT_Connect << GPIO_PIN_CNF_INPUT_Pos)
Adembay 15:a88e0135e67e 180 | (GPIO_PIN_CNF_DIR_Input << GPIO_PIN_CNF_DIR_Pos);
Adembay 15:a88e0135e67e 181 spi->PSELSCK = SCK_Pin;
Adembay 15:a88e0135e67e 182 spi->PSELMOSI = MOSI_Pin;
Adembay 15:a88e0135e67e 183 spi->PSELMISO = MISO_Pin;
Adembay 15:a88e0135e67e 184
Adembay 15:a88e0135e67e 185 setFrequency(SPI_2M);
Adembay 15:a88e0135e67e 186 setSPIMode(SPI_MODE0);
Adembay 15:a88e0135e67e 187 setBitORDER(MSBFIRST);
Adembay 15:a88e0135e67e 188
Adembay 15:a88e0135e67e 189 spi->EVENTS_READY = 0;
Adembay 15:a88e0135e67e 190 spi->ENABLE = (SPI_ENABLE_ENABLE_Enabled << SPI_ENABLE_ENABLE_Pos);
Adembay 15:a88e0135e67e 191
Adembay 15:a88e0135e67e 192 }
Adembay 15:a88e0135e67e 193
Adembay 15:a88e0135e67e 194 /**********************************************************************
Adembay 15:a88e0135e67e 195 name :
Adembay 15:a88e0135e67e 196 function :
Adembay 15:a88e0135e67e 197 **********************************************************************/
Adembay 15:a88e0135e67e 198 void SPIClass::begin()
Adembay 15:a88e0135e67e 199 {
Adembay 15:a88e0135e67e 200 begin(SCK, MOSI, MISO);
Adembay 15:a88e0135e67e 201 }
Adembay 15:a88e0135e67e 202
Adembay 15:a88e0135e67e 203 /**********************************************************************
Adembay 15:a88e0135e67e 204 name :
Adembay 15:a88e0135e67e 205 function :
Adembay 15:a88e0135e67e 206 **********************************************************************/
Adembay 15:a88e0135e67e 207 uint8_t SPIClass::transfer(uint8_t data)
Adembay 15:a88e0135e67e 208 {
Adembay 15:a88e0135e67e 209 while( spi->EVENTS_READY != 0U );
Adembay 15:a88e0135e67e 210
Adembay 15:a88e0135e67e 211 spi->TXD = (uint32_t)data;
Adembay 15:a88e0135e67e 212
Adembay 15:a88e0135e67e 213 while(spi->EVENTS_READY == 0);
Adembay 15:a88e0135e67e 214
Adembay 15:a88e0135e67e 215 data = (uint8_t)spi->RXD;
Adembay 15:a88e0135e67e 216
Adembay 15:a88e0135e67e 217 spi->EVENTS_READY = 0;
Adembay 15:a88e0135e67e 218
Adembay 15:a88e0135e67e 219 return data;
Adembay 15:a88e0135e67e 220 }
Adembay 15:a88e0135e67e 221
Adembay 15:a88e0135e67e 222 /**********************************************************************
Adembay 15:a88e0135e67e 223 name :
Adembay 15:a88e0135e67e 224 function :
Adembay 15:a88e0135e67e 225 **********************************************************************/
Adembay 15:a88e0135e67e 226 void SPIClass::endTransfer()
Adembay 15:a88e0135e67e 227 {
Adembay 15:a88e0135e67e 228 spi->ENABLE = (SPI_ENABLE_ENABLE_Disabled << SPI_ENABLE_ENABLE_Pos);
Adembay 15:a88e0135e67e 229 }
Adembay 15:a88e0135e67e 230
Adembay 15:a88e0135e67e 231 /**********************************************************************
Adembay 15:a88e0135e67e 232 name :
Adembay 15:a88e0135e67e 233 function :
Adembay 15:a88e0135e67e 234 **********************************************************************/
Adembay 15:a88e0135e67e 235
Adembay 15:a88e0135e67e 236 //SPIClass SPI(NRF_SPI1);