Hi,
I want to get the continuous adc data, and send through BLE every second.
So I try to use dma controller to move adc data from peripheral to memory. (reference the adc-dma sample code)
I haven't create task or event.
About the DMA api I use,
DMA_Init(DMA0); DMA_EnableChannel(DMA0, DEMO_ADC_DMA_CHANNEL); DMA_CreateHandle(&g_adcDmaHandle, DMA0, DEMO_ADC_DMA_CHANNEL); DMA_SetCallback(&g_adcDmaHandle, ADC_ConvertDMACallback, &transferDone); DMA_PrepareTransfer(&transferConfig, (void *)&DEMO_ADC_BASE->DATA, g_AdcConvResult, sizeof(uint32_t), sizeof(uint32_t)*250, kDMA_PeripheralToMemory, &Init_dma_Desc); DMA_SubmitTransfer(&g_adcDmaHandle, &transferConfig); transferConfig.xfercfg.intA = true; transferConfig.xfercfg.intB = true; DMA_CreateDescriptor(&g_pingpong_desc[1], &transferConfig.xfercfg, (void *)&DEMO_ADC_BASE->DATA, &g_AdcConvResult[250], &g_pingpong_desc[0]); DMA_CreateDescriptor(&g_pingpong_desc[0], &transferConfig.xfercfg, (void *)&DEMO_ADC_BASE->DATA, &g_AdcConvResult[0], &g_pingpong_desc[1]); DMA_CreateDescriptor(&Init_dma_Desc, &transferConfig.xfercfg, (void *)&DEMO_ADC_BASE->DATA, &g_AdcConvResult[0], &g_pingpong_desc[1]); DMA_StartTransfer(&g_adcDmaHandle);
I first tried to put them in private_profile_server.c as a function.
And it didn't work.
Is it OK to create a task for DMA, like
OSA_TASK_DEFINE(startup_task, gMainThreadPriority_c, 1, gMainThreadStackSize_c, 0);
and use OSA_Mutex to control these two tasks?