Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
DecaWave/SMConfig.cpp@0:a3b83d366423, 2017-12-06 (annotated)
- Committer:
- aungriah
- Date:
- Wed Dec 06 21:35:45 2017 +0000
- Revision:
- 0:a3b83d366423
test
Who changed what in which revision?
User | Revision | Line number | New 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 |