Alejandro Ungria Hirte / GA-Test

Dependencies:   mbed-dev

Committer:
aungriah
Date:
Wed Dec 06 21:42:54 2017 +0000
Revision:
0:3333b6066adf
asfaf

Who changed what in which revision?

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