xvcv

Dependencies:   BLE_API mbed nRF51822

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

Committer:
Adembay
Date:
Mon Sep 11 14:18:29 2017 +0000
Revision:
15:d824140299d9
c cx

Who changed what in which revision?

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