40 #include <xdc/runtime/System.h>
41 #include <ti/drivers/edma/edma.h>
44 #define MAX(x,y) ((x) > (y) ? (x) : (y))
47 uint16_t shadowParamId, EDMA_paramSetConfig_t *config,
48 EDMA_transferCompletionCallbackFxn_t transferCompletionCallbackFxn,
49 uintptr_t transferCompletionCallbackFxnArg);
52 uint16_t shadowParamId, EDMA_paramSetConfig_t *config,
53 EDMA_transferCompletionCallbackFxn_t transferCompletionCallbackFxn,
54 uintptr_t transferCompletionCallbackFxnArg)
56 EDMA_paramConfig_t paramConfig;
57 int32_t errorCode = EDMA_NO_ERROR;
58 paramConfig.paramSetConfig = *config;
59 paramConfig.transferCompletionCallbackFxn = transferCompletionCallbackFxn;
60 paramConfig.transferCompletionCallbackFxnArg = transferCompletionCallbackFxnArg;
61 if ((errorCode = EDMA_configParamSet(handle,
62 shadowParamId, ¶mConfig)) != EDMA_NO_ERROR)
68 if ((errorCode = EDMA_linkParamSets(handle,
69 (uint16_t) chId, shadowParamId)) != EDMA_NO_ERROR)
75 if ((errorCode = EDMA_linkParamSets(handle,
76 shadowParamId, shadowParamId)) != EDMA_NO_ERROR)
90 bool isEventTriggered,
91 uint16_t shadowParamId,
97 EDMA_transferCompletionCallbackFxn_t transferCompletionCallbackFxn,
98 uintptr_t transferCompletionCallbackFxnArg)
100 EDMA_channelConfig_t config;
101 int32_t errorCode = EDMA_NO_ERROR;
103 config.channelId = chId;
104 config.channelType = (uint8_t)EDMA3_CHANNEL_TYPE_DMA;
105 config.paramId = chId;
106 config.eventQueueId = eventQueueId;
108 config.paramSetConfig.sourceAddress = (uint32_t) srcBuff;
109 config.paramSetConfig.destinationAddress = (uint32_t) dstBuff;
111 config.paramSetConfig.aCount = aCount;
112 config.paramSetConfig.bCount = bCount;
113 config.paramSetConfig.cCount = 1U;
114 config.paramSetConfig.bCountReload = 0U;
116 config.paramSetConfig.sourceBindex = srcBIdx;
117 config.paramSetConfig.destinationBindex = dstBIdx;
119 config.paramSetConfig.sourceCindex = 0U;
120 config.paramSetConfig.destinationCindex = 0U;
122 config.paramSetConfig.linkAddress = EDMA_NULL_LINK_ADDRESS;
123 config.paramSetConfig.transferType = (uint8_t)EDMA3_SYNC_A;
124 config.paramSetConfig.transferCompletionCode = chId;
125 config.paramSetConfig.sourceAddressingMode = (uint8_t) EDMA3_ADDRESSING_MODE_LINEAR;
126 config.paramSetConfig.destinationAddressingMode = (uint8_t) EDMA3_ADDRESSING_MODE_LINEAR;
129 config.paramSetConfig.fifoWidth = (uint8_t) EDMA3_FIFO_WIDTH_8BIT;
131 config.paramSetConfig.isStaticSet =
false;
132 config.paramSetConfig.isEarlyCompletion =
false;
133 config.paramSetConfig.isFinalTransferInterruptEnabled =
true;
134 config.paramSetConfig.isIntermediateTransferInterruptEnabled =
true;
135 config.paramSetConfig.isFinalChainingEnabled =
false;
136 config.paramSetConfig.isIntermediateChainingEnabled =
false;
137 config.transferCompletionCallbackFxn = transferCompletionCallbackFxn;
138 config.transferCompletionCallbackFxnArg = transferCompletionCallbackFxnArg;
140 if ((errorCode = EDMA_configChannel(handle, &config, isEventTriggered)) != EDMA_NO_ERROR)
147 &config.paramSetConfig, config.transferCompletionCallbackFxn, transferCompletionCallbackFxnArg);
157 bool isEventTriggered,
158 uint16_t shadowParamId,
159 uint16_t sampleLenInBytes,
160 uint16_t numRangeBins,
163 uint16_t numDopplerBins,
164 uint8_t eventQueueId,
165 EDMA_transferCompletionCallbackFxn_t transferCompletionCallbackFxn,
166 uintptr_t transferCompletionCallbackFxnArg)
168 EDMA_channelConfig_t config;
169 int32_t errorCode = EDMA_NO_ERROR;
171 config.channelId = chId;
172 config.channelType = (uint8_t)EDMA3_CHANNEL_TYPE_DMA;
173 config.paramId = chId;
174 config.eventQueueId = eventQueueId;
176 config.paramSetConfig.sourceAddress = (uint32_t) srcBuff;
177 config.paramSetConfig.destinationAddress = (uint32_t) dstBuff;
179 config.paramSetConfig.aCount = sampleLenInBytes;
180 config.paramSetConfig.bCount = numRangeBins;
181 config.paramSetConfig.cCount = (uint16_t) numRxAnt;
182 config.paramSetConfig.bCountReload = 0U;
184 config.paramSetConfig.sourceBindex = (int16_t) sampleLenInBytes;
185 config.paramSetConfig.destinationBindex = (int16_t)(numDopplerBins * numTxAnt * numRxAnt * sampleLenInBytes);
187 config.paramSetConfig.sourceCindex = (int16_t)(numRangeBins * sampleLenInBytes);
188 config.paramSetConfig.destinationCindex = (int16_t)(numDopplerBins * sampleLenInBytes);
190 config.paramSetConfig.linkAddress = EDMA_NULL_LINK_ADDRESS;
191 config.paramSetConfig.transferType = (uint8_t)EDMA3_SYNC_AB;
192 config.paramSetConfig.transferCompletionCode = chId;
193 config.paramSetConfig.sourceAddressingMode = (uint8_t) EDMA3_ADDRESSING_MODE_LINEAR;
194 config.paramSetConfig.destinationAddressingMode = (uint8_t) EDMA3_ADDRESSING_MODE_LINEAR;
197 config.paramSetConfig.fifoWidth = (uint8_t) EDMA3_FIFO_WIDTH_8BIT;
198 config.paramSetConfig.isStaticSet =
false;
199 config.paramSetConfig.isEarlyCompletion =
false;
200 config.paramSetConfig.isFinalTransferInterruptEnabled =
true;
201 config.paramSetConfig.isIntermediateTransferInterruptEnabled =
false;
202 config.paramSetConfig.isFinalChainingEnabled =
false;
203 config.paramSetConfig.isIntermediateChainingEnabled =
true;
204 config.transferCompletionCallbackFxn = transferCompletionCallbackFxn;
205 config.transferCompletionCallbackFxnArg = transferCompletionCallbackFxnArg;
207 if ((errorCode = EDMA_configChannel(handle, &config, isEventTriggered)) != EDMA_NO_ERROR)
214 &config.paramSetConfig, config.transferCompletionCallbackFxn, transferCompletionCallbackFxnArg);
224 bool isEventTriggered,
225 uint16_t shadowParamId,
226 uint16_t sampleLenInBytes,
227 uint16_t numRangeBins,
230 uint16_t numDopplerBins,
231 uint8_t eventQueueId,
232 EDMA_transferCompletionCallbackFxn_t transferCompletionCallbackFxn,
233 uintptr_t transferCompletionCallbackFxnArg)
235 EDMA_channelConfig_t config;
236 int32_t errorCode = EDMA_NO_ERROR;
238 config.channelId = chId;
239 config.channelType = (uint8_t)EDMA3_CHANNEL_TYPE_DMA;
240 config.paramId = chId;
241 config.eventQueueId = eventQueueId;
243 config.paramSetConfig.sourceAddress = (uint32_t) srcBuff;
244 config.paramSetConfig.destinationAddress = (uint32_t) dstBuff;
246 config.paramSetConfig.aCount = sampleLenInBytes;
247 config.paramSetConfig.bCount = numDopplerBins;
248 config.paramSetConfig.cCount = (uint16_t)
MAX((numTxAnt * numRxAnt / 2),1);
249 config.paramSetConfig.bCountReload = 0U;
251 config.paramSetConfig.sourceBindex = (int16_t) (numRxAnt * numRangeBins *
253 config.paramSetConfig.destinationBindex = (int16_t)sampleLenInBytes;
257 config.paramSetConfig.sourceCindex = (int16_t)(numRangeBins * sampleLenInBytes);
261 config.paramSetConfig.sourceCindex = (int16_t)(numRangeBins * sampleLenInBytes * 2);
264 config.paramSetConfig.destinationCindex = 0;
266 config.paramSetConfig.linkAddress = EDMA_NULL_LINK_ADDRESS;
267 config.paramSetConfig.transferType = (uint8_t)EDMA3_SYNC_AB;
268 config.paramSetConfig.transferCompletionCode = chId;
269 config.paramSetConfig.sourceAddressingMode = (uint8_t) EDMA3_ADDRESSING_MODE_LINEAR;
270 config.paramSetConfig.destinationAddressingMode = (uint8_t) EDMA3_ADDRESSING_MODE_LINEAR;
273 config.paramSetConfig.fifoWidth = (uint8_t) EDMA3_FIFO_WIDTH_8BIT;
274 config.paramSetConfig.isStaticSet =
false;
275 config.paramSetConfig.isEarlyCompletion =
false;
276 config.paramSetConfig.isFinalTransferInterruptEnabled =
true;
277 config.paramSetConfig.isIntermediateTransferInterruptEnabled =
true;
278 config.paramSetConfig.isFinalChainingEnabled =
false;
279 config.paramSetConfig.isIntermediateChainingEnabled =
false;
280 config.transferCompletionCallbackFxn = transferCompletionCallbackFxn;
281 config.transferCompletionCallbackFxnArg = transferCompletionCallbackFxnArg;
283 if ((errorCode = EDMA_configChannel(handle, &config, isEventTriggered)) != EDMA_NO_ERROR)
290 &config.paramSetConfig, config.transferCompletionCallbackFxn, transferCompletionCallbackFxnArg);
301 bool isEventTriggered,
302 uint16_t shadowParamId,
307 uint8_t eventQueueId,
308 EDMA_transferCompletionCallbackFxn_t transferCompletionCallbackFxn,
309 uintptr_t transferCompletionCallbackFxnArg)
311 EDMA_channelConfig_t config;
312 int32_t errorCode = EDMA_NO_ERROR;
314 config.channelId = chId;
315 config.channelType = (uint8_t)EDMA3_CHANNEL_TYPE_DMA;
316 config.paramId = chId;
317 config.eventQueueId = eventQueueId;
319 config.paramSetConfig.sourceAddress = (uint32_t) srcBuff;
320 config.paramSetConfig.destinationAddress = (uint32_t) dstBuff;
322 config.paramSetConfig.aCount = aCount;
323 config.paramSetConfig.bCount = bCount;
324 config.paramSetConfig.cCount = 1U;
325 config.paramSetConfig.bCountReload = 0U;
327 config.paramSetConfig.sourceBindex = srcBIdx;
328 config.paramSetConfig.destinationBindex = destBIdx;
330 config.paramSetConfig.sourceCindex = 0U;
331 config.paramSetConfig.destinationCindex = 0U;
333 config.paramSetConfig.linkAddress = EDMA_NULL_LINK_ADDRESS;
334 config.paramSetConfig.transferType = (uint8_t)EDMA3_SYNC_AB;
335 config.paramSetConfig.transferCompletionCode = chId;
336 config.paramSetConfig.sourceAddressingMode = (uint8_t) EDMA3_ADDRESSING_MODE_LINEAR;
337 config.paramSetConfig.destinationAddressingMode = (uint8_t) EDMA3_ADDRESSING_MODE_LINEAR;
340 config.paramSetConfig.fifoWidth = (uint8_t) EDMA3_FIFO_WIDTH_8BIT;
342 config.paramSetConfig.isStaticSet =
false;
343 config.paramSetConfig.isEarlyCompletion =
false;
344 config.paramSetConfig.isFinalTransferInterruptEnabled =
true;
345 config.paramSetConfig.isIntermediateTransferInterruptEnabled =
false;
346 config.paramSetConfig.isFinalChainingEnabled =
false;
347 config.paramSetConfig.isIntermediateChainingEnabled =
false;
348 config.transferCompletionCallbackFxn = transferCompletionCallbackFxn;
349 config.transferCompletionCallbackFxnArg = transferCompletionCallbackFxnArg;
351 if ((errorCode = EDMA_configChannel(handle, &config, isEventTriggered)) != EDMA_NO_ERROR)
358 &config.paramSetConfig, config.transferCompletionCallbackFxn, transferCompletionCallbackFxnArg);
368 uint8_t triggerEnabled)
370 int32_t errorCode = EDMA_NO_ERROR;
374 if ((errorCode = EDMA_setSourceAddress(handle, (uint16_t) chId,
375 (uint32_t) srcBuff)) != EDMA_NO_ERROR)
384 if ((errorCode = EDMA_setDestinationAddress(handle, (uint16_t) chId,
385 (uint32_t) dstBuff)) != EDMA_NO_ERROR)
394 if ((errorCode = EDMA_startDmaTransfer(handle, chId)) != EDMA_NO_ERROR)