Alejandro Ungria Hirte / GA-Test_copy

Dependencies:   mbed-dev

Committer:
aungriah
Date:
Wed Dec 06 21:35:45 2017 +0000
Revision:
0:a3b83d366423
test

Who changed what in which revision?

UserRevisionLine numberNew contents of line
aungriah 0:a3b83d366423 1 #include "SMConfig.h"
aungriah 0:a3b83d366423 2
aungriah 0:a3b83d366423 3 void SMsetconfig(uint8_t dr_mode, dwt_config_t *dw_config,
aungriah 0:a3b83d366423 4 dwt_txconfig_t *dw_configtx) {
aungriah 0:a3b83d366423 5
aungriah 0:a3b83d366423 6 dw_config->chan = chConfig[dr_mode].channel;
aungriah 0:a3b83d366423 7 dw_config->prf = chConfig[dr_mode].prf;
aungriah 0:a3b83d366423 8 dw_config->txPreambLength = chConfig[dr_mode].preambleLength;
aungriah 0:a3b83d366423 9 dw_config->rxPAC = chConfig[dr_mode].pacSize;
aungriah 0:a3b83d366423 10 dw_config->txCode = chConfig[dr_mode].preambleCode;
aungriah 0:a3b83d366423 11 dw_config->rxCode = chConfig[dr_mode].preambleCode;
aungriah 0:a3b83d366423 12 dw_config->nsSFD = chConfig[dr_mode].nsSFD;
aungriah 0:a3b83d366423 13 dw_config->dataRate = chConfig[dr_mode].datarate;
aungriah 0:a3b83d366423 14 dw_config->sfdTO = chConfig[dr_mode].sfdTO;
aungriah 0:a3b83d366423 15 dw_config->phrMode = DWT_PHRMODE_STD;
aungriah 0:a3b83d366423 16 //enable gating gain for 6.81Mbps data rate
aungriah 0:a3b83d366423 17 /*if (dw_config->dataRate == DWT_BR_6M8)
aungriah 0:a3b83d366423 18 dw_config->smartPowerEn = 1;
aungriah 0:a3b83d366423 19 else
aungriah 0:a3b83d366423 20 dw_config->smartPowerEn = 0;*/
aungriah 0:a3b83d366423 21
aungriah 0:a3b83d366423 22 //dwt_setsmarttxpower(0);
aungriah 0:a3b83d366423 23 dw_configtx->power = txSpectrumConfig[dw_config->chan].txPwr[dw_config->prf
aungriah 0:a3b83d366423 24 - DWT_PRF_16M];
aungriah 0:a3b83d366423 25 dw_configtx->PGdly = txSpectrumConfig[dw_config->chan].PGdelay;
aungriah 0:a3b83d366423 26
aungriah 0:a3b83d366423 27 }
aungriah 0:a3b83d366423 28
aungriah 0:a3b83d366423 29 uint8_t SMpower(float gain) {
aungriah 0:a3b83d366423 30 if (gain <= 0.0f) {
aungriah 0:a3b83d366423 31 return 0xc0;
aungriah 0:a3b83d366423 32 } else if (gain > 18.0f+15.5f) {
aungriah 0:a3b83d366423 33 return 0x1f;
aungriah 0:a3b83d366423 34 } else {
aungriah 0:a3b83d366423 35 int gain_coarse_3; // coarse gain in multiples of 3 dB
aungriah 0:a3b83d366423 36 int gain_fine_0_5; // gine gain in multiples of 0.5 dB
aungriah 0:a3b83d366423 37
aungriah 0:a3b83d366423 38 // set coarse gain first
aungriah 0:a3b83d366423 39 if (gain > 18) {
aungriah 0:a3b83d366423 40 gain_coarse_3 = 6;
aungriah 0:a3b83d366423 41 } else {
aungriah 0:a3b83d366423 42 gain_coarse_3 = (int)(gain/3);
aungriah 0:a3b83d366423 43 }
aungriah 0:a3b83d366423 44
aungriah 0:a3b83d366423 45 // then set the fine gain
aungriah 0:a3b83d366423 46 gain_fine_0_5 = 2*(gain - gain_coarse_3);
aungriah 0:a3b83d366423 47
aungriah 0:a3b83d366423 48 uint8_t result = ((6-gain_coarse_3)<<5) + gain_fine_0_5;
aungriah 0:a3b83d366423 49
aungriah 0:a3b83d366423 50 return result;
aungriah 0:a3b83d366423 51 }
aungriah 0:a3b83d366423 52 }
aungriah 0:a3b83d366423 53
aungriah 0:a3b83d366423 54
aungriah 0:a3b83d366423 55 float SMgain(uint8_t power) {
aungriah 0:a3b83d366423 56 float gain_coarse = 3.0*(6-(power>>5));
aungriah 0:a3b83d366423 57 float gain_fine = 0.5*(power & 0x1f);
aungriah 0:a3b83d366423 58 return gain_coarse + gain_fine;
aungriah 0:a3b83d366423 59 }
aungriah 0:a3b83d366423 60
aungriah 0:a3b83d366423 61
aungriah 0:a3b83d366423 62 const chConfig_t chConfig[NUM_CH_SUPPORTED] = {
aungriah 0:a3b83d366423 63 { 1, // channel // TKA was 2
aungriah 0:a3b83d366423 64 DWT_PRF_16M, // prf
aungriah 0:a3b83d366423 65 DWT_BR_110K, // datarate
aungriah 0:a3b83d366423 66 3, // preambleCode
aungriah 0:a3b83d366423 67 DWT_PLEN_1024, // preambleLength
aungriah 0:a3b83d366423 68 DWT_PAC32, // pacSize
aungriah 0:a3b83d366423 69 1, // non-standard SFD
aungriah 0:a3b83d366423 70 (1025 + 64 - 32) //SFD timeout
aungriah 0:a3b83d366423 71 },
aungriah 0:a3b83d366423 72 //mode 2
aungriah 0:a3b83d366423 73 { 2, // channel
aungriah 0:a3b83d366423 74 DWT_PRF_16M, // prf
aungriah 0:a3b83d366423 75 DWT_BR_6M8, // datarate
aungriah 0:a3b83d366423 76 3, // preambleCode
aungriah 0:a3b83d366423 77 DWT_PLEN_128, // preambleLength
aungriah 0:a3b83d366423 78 DWT_PAC8, // pacSize
aungriah 0:a3b83d366423 79 0, // non-standard SFD
aungriah 0:a3b83d366423 80 (129 + 8 - 8) //SFD timeout
aungriah 0:a3b83d366423 81 },
aungriah 0:a3b83d366423 82 //mode 3
aungriah 0:a3b83d366423 83 { 2, // channel
aungriah 0:a3b83d366423 84 DWT_PRF_64M, // prf
aungriah 0:a3b83d366423 85 DWT_BR_110K, // datarate
aungriah 0:a3b83d366423 86 9, // preambleCode
aungriah 0:a3b83d366423 87 DWT_PLEN_1024, // preambleLength
aungriah 0:a3b83d366423 88 DWT_PAC32, // pacSize
aungriah 0:a3b83d366423 89 1, // non-standard SFD
aungriah 0:a3b83d366423 90 (1025 + 64 - 32) //SFD timeout
aungriah 0:a3b83d366423 91 },
aungriah 0:a3b83d366423 92 //mode 4
aungriah 0:a3b83d366423 93 { 2, // channel
aungriah 0:a3b83d366423 94 DWT_PRF_64M, // prf
aungriah 0:a3b83d366423 95 DWT_BR_6M8, // datarate
aungriah 0:a3b83d366423 96 9, // preambleCode
aungriah 0:a3b83d366423 97 DWT_PLEN_128, // preambleLength
aungriah 0:a3b83d366423 98 DWT_PAC8, // pacSize
aungriah 0:a3b83d366423 99 0, // non-standard SFD
aungriah 0:a3b83d366423 100 (129 + 8 - 8) //SFD timeout
aungriah 0:a3b83d366423 101 },
aungriah 0:a3b83d366423 102 //mode 5
aungriah 0:a3b83d366423 103 { 5, // channel
aungriah 0:a3b83d366423 104 DWT_PRF_16M, // prf
aungriah 0:a3b83d366423 105 DWT_BR_110K, // datarate
aungriah 0:a3b83d366423 106 3, // preambleCode
aungriah 0:a3b83d366423 107 DWT_PLEN_1024, // preambleLength
aungriah 0:a3b83d366423 108 DWT_PAC32, // pacSize
aungriah 0:a3b83d366423 109 1, // non-standard SFD
aungriah 0:a3b83d366423 110 (1025 + 64 - 32) //SFD timeout
aungriah 0:a3b83d366423 111 },
aungriah 0:a3b83d366423 112 //mode 6
aungriah 0:a3b83d366423 113 { 5, // channel
aungriah 0:a3b83d366423 114 DWT_PRF_16M, // prf
aungriah 0:a3b83d366423 115 DWT_BR_6M8, // datarate
aungriah 0:a3b83d366423 116 3, // preambleCode
aungriah 0:a3b83d366423 117 DWT_PLEN_128, // preambleLength
aungriah 0:a3b83d366423 118 DWT_PAC8, // pacSize
aungriah 0:a3b83d366423 119 0, // non-standard SFD
aungriah 0:a3b83d366423 120 (129 + 8 - 8) //SFD timeout
aungriah 0:a3b83d366423 121 },
aungriah 0:a3b83d366423 122 //mode 6
aungriah 0:a3b83d366423 123 { 5, // channel
aungriah 0:a3b83d366423 124 DWT_PRF_64M, // prf
aungriah 0:a3b83d366423 125 DWT_BR_110K, // datarate
aungriah 0:a3b83d366423 126 9, // preambleCode
aungriah 0:a3b83d366423 127 DWT_PLEN_1024, // preambleLength
aungriah 0:a3b83d366423 128 DWT_PAC32, // pacSize
aungriah 0:a3b83d366423 129 1, // non-standard SFD
aungriah 0:a3b83d366423 130 (1025 + 64 - 32) //SFD timeout
aungriah 0:a3b83d366423 131 },
aungriah 0:a3b83d366423 132 //mode 7
aungriah 0:a3b83d366423 133 { 7, // channel
aungriah 0:a3b83d366423 134 DWT_PRF_64M, // prf
aungriah 0:a3b83d366423 135 DWT_BR_6M8, // datarate
aungriah 0:a3b83d366423 136 9, // preambleCode
aungriah 0:a3b83d366423 137 DWT_PLEN_128, // preambleLength
aungriah 0:a3b83d366423 138 DWT_PAC8, // pacSize
aungriah 0:a3b83d366423 139 0, // non-standard SFD
aungriah 0:a3b83d366423 140 (129 + 8 - 8) //SFD timeout
aungriah 0:a3b83d366423 141 } };
aungriah 0:a3b83d366423 142
aungriah 0:a3b83d366423 143 const float ChannelFrequency[NUM_CH_SUPPORTED] = { 0.0, 3.49944, 3.9936, 4.4928,
aungriah 0:a3b83d366423 144 3.9936, 6.4896, 0, 6.4986 };
aungriah 0:a3b83d366423 145 const float ChannelBandwidth[NUM_CH_SUPPORTED] = { 0.0, 0.4992, 0.4992, 0.4992,
aungriah 0:a3b83d366423 146 1.3312, 0.4992, 0, 1.0816 };
aungriah 0:a3b83d366423 147 const char* ChannelBitrate[3] = {"110 kbits/s", "850 kbits/s", "6.8 Mbits/s"};
aungriah 0:a3b83d366423 148 const char* ChannelPRF[3] = {"", "16 MHz", "64 MHz"};
aungriah 0:a3b83d366423 149 const uint8_t ChannelPAC[4] = {8, 16, 32, 64};
aungriah 0:a3b83d366423 150
aungriah 0:a3b83d366423 151 uint16_t ChannelPLEN(uint8_t PLEN) {
aungriah 0:a3b83d366423 152 switch (PLEN) {
aungriah 0:a3b83d366423 153 case DWT_PLEN_4096:
aungriah 0:a3b83d366423 154 return (uint16_t)4096;
aungriah 0:a3b83d366423 155
aungriah 0:a3b83d366423 156 case DWT_PLEN_2048:
aungriah 0:a3b83d366423 157 return (uint16_t)2048;
aungriah 0:a3b83d366423 158
aungriah 0:a3b83d366423 159 case DWT_PLEN_1536:
aungriah 0:a3b83d366423 160 return (uint16_t)1536;
aungriah 0:a3b83d366423 161
aungriah 0:a3b83d366423 162 case DWT_PLEN_1024:
aungriah 0:a3b83d366423 163 return (uint16_t)1024;
aungriah 0:a3b83d366423 164
aungriah 0:a3b83d366423 165 case DWT_PLEN_512:
aungriah 0:a3b83d366423 166 return (uint16_t)512;
aungriah 0:a3b83d366423 167
aungriah 0:a3b83d366423 168 case DWT_PLEN_256:
aungriah 0:a3b83d366423 169 return (uint16_t)256;
aungriah 0:a3b83d366423 170
aungriah 0:a3b83d366423 171 case DWT_PLEN_128:
aungriah 0:a3b83d366423 172 return (uint16_t)128;
aungriah 0:a3b83d366423 173
aungriah 0:a3b83d366423 174 case DWT_PLEN_64:
aungriah 0:a3b83d366423 175 return (uint16_t)64;
aungriah 0:a3b83d366423 176
aungriah 0:a3b83d366423 177 default:
aungriah 0:a3b83d366423 178 return 0;
aungriah 0:a3b83d366423 179 };
aungriah 0:a3b83d366423 180
aungriah 0:a3b83d366423 181 }
aungriah 0:a3b83d366423 182
aungriah 0:a3b83d366423 183
aungriah 0:a3b83d366423 184
aungriah 0:a3b83d366423 185
aungriah 0:a3b83d366423 186 //The table below specifies the default TX spectrum configuration parameters... this has been tuned for DW EVK hardware units
aungriah 0:a3b83d366423 187 //the table is set for smart power - see below in the instance_config function how this is used when not using smart power
aungriah 0:a3b83d366423 188 const tx_struct txSpectrumConfig[NUM_CH_SUPPORTED] = {
aungriah 0:a3b83d366423 189 //Channel 0 ----- this is just a place holder so the next array element is channel 1
aungriah 0:a3b83d366423 190 { 0x0, //0
aungriah 0:a3b83d366423 191 { 0x0, //0
aungriah 0:a3b83d366423 192 0x0 //0
aungriah 0:a3b83d366423 193 } },
aungriah 0:a3b83d366423 194 //Channel 1
aungriah 0:a3b83d366423 195 { 0xc9, //PG_DELAY
aungriah 0:a3b83d366423 196 { 0x15355575, //16M prf power
aungriah 0:a3b83d366423 197 0x07274767 //64M prf power
aungriah 0:a3b83d366423 198 }
aungriah 0:a3b83d366423 199
aungriah 0:a3b83d366423 200 },
aungriah 0:a3b83d366423 201 //Channel 2
aungriah 0:a3b83d366423 202 { 0xc2, //PG_DELAY
aungriah 0:a3b83d366423 203 { 0x15355575, //16M prf power
aungriah 0:a3b83d366423 204 0x07274767 //64M prf power
aungriah 0:a3b83d366423 205 } },
aungriah 0:a3b83d366423 206 //Channel 3
aungriah 0:a3b83d366423 207 { 0xc5, //PG_DELAY
aungriah 0:a3b83d366423 208 { 0x0f2f4f6f, //16M prf power
aungriah 0:a3b83d366423 209 0x2b4b6b8b //64M prf power
aungriah 0:a3b83d366423 210 } },
aungriah 0:a3b83d366423 211 //Channel 4
aungriah 0:a3b83d366423 212 { 0x95, //PG_DELAY
aungriah 0:a3b83d366423 213 { 0x1f1f3f5f, //16M prf power
aungriah 0:a3b83d366423 214 0x3a5a7a9a //64M prf power
aungriah 0:a3b83d366423 215 } },
aungriah 0:a3b83d366423 216 //Channel 5
aungriah 0:a3b83d366423 217 { 0xc0, //PG_DELAY
aungriah 0:a3b83d366423 218 { 0x0E082848, //16M prf power
aungriah 0:a3b83d366423 219 0x25456585 //64M prf power
aungriah 0:a3b83d366423 220 } },
aungriah 0:a3b83d366423 221 //Channel 6 ----- this is just a place holder so the next array element is channel 7
aungriah 0:a3b83d366423 222 { 0x0, //0
aungriah 0:a3b83d366423 223 { 0x0, //0
aungriah 0:a3b83d366423 224 0x0 //0
aungriah 0:a3b83d366423 225 } },
aungriah 0:a3b83d366423 226 //Channel 7
aungriah 0:a3b83d366423 227 { 0x93, //PG_DELAY
aungriah 0:a3b83d366423 228 { 0x32527292,//0x51515151, //0xc0c0c0c0,//0x1f1f1f1f,//0x32527292, //16M prf power
aungriah 0:a3b83d366423 229 0x1f1f1f1f//0x5171B1d1//0x51515151//0xc0c0c0c0//0x1f1f1f1f// 0x5171B1d1 //64M prf power
aungriah 0:a3b83d366423 230 } } };
aungriah 0:a3b83d366423 231
aungriah 0:a3b83d366423 232 //these are default antenna delays for EVB1000, these can be used if there is no calibration data in the DW1000,
aungriah 0:a3b83d366423 233 //or instead of the calibration data
aungriah 0:a3b83d366423 234 const uint16_t rfDelays[NUM_PRF] = { (uint16_t) ((DWT_PRF_16M_RFDLY / 2.0f)
aungriah 0:a3b83d366423 235 * 1.0e-9f / DWT_TIME_UNITS), //PRF 16
aungriah 0:a3b83d366423 236 (uint16_t) ((DWT_PRF_64M_RFDLY / 2.0f) * 1.0e-9f / DWT_TIME_UNITS) //PRF 64
aungriah 0:a3b83d366423 237 };
aungriah 0:a3b83d366423 238