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.
Fork of GA-Test_copy by
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 | 
