@@ -82,6 +82,7 @@ static void adc_dma_callback(const struct device *dma_dev, void *callback_arg,
82
82
struct mcux_adc16_data * data = dev -> data ;
83
83
84
84
LOG_DBG ("DMA done" );
85
+ data -> buffer ++ ;
85
86
adc_context_on_sampling_done (& data -> ctx , dev );
86
87
}
87
88
#endif
@@ -196,6 +197,19 @@ static int start_read(const struct device *dev,
196
197
}
197
198
ADC16_SetHardwareAverage (config -> base , mode );
198
199
200
+ if (sequence -> buffer_size < 2 ) {
201
+ LOG_ERR ("sequence buffer size too small %d < 2" , sequence -> buffer_size );
202
+ return - EINVAL ;
203
+ }
204
+
205
+ if (sequence -> options ) {
206
+ if (sequence -> buffer_size <
207
+ 2 * (sequence -> options -> extra_samplings + 1 )) {
208
+ LOG_ERR ("sequence buffer size too small < 2 * extra + 2" );
209
+ return - EINVAL ;
210
+ }
211
+ }
212
+
199
213
data -> buffer = sequence -> buffer ;
200
214
201
215
adc_context_start_read (& data -> ctx , sequence );
@@ -271,8 +285,7 @@ static void adc_context_start_sampling(struct adc_context *ctx)
271
285
272
286
#ifdef CONFIG_ADC_MCUX_ADC16_ENABLE_EDMA
273
287
LOG_DBG ("config dma" );
274
- data -> buffer = ctx -> sequence .buffer ;
275
- data -> adc_dma_config .dma_block .block_size = ctx -> sequence .buffer_size ;
288
+ data -> adc_dma_config .dma_block .block_size = 2 ;
276
289
data -> adc_dma_config .dma_block .dest_address = (uint32_t )data -> buffer ;
277
290
data -> adc_dma_config .dma_cfg .head_block =
278
291
& (data -> adc_dma_config .dma_block );
@@ -380,21 +393,19 @@ static int mcux_adc16_init(const struct device *dev)
380
393
#ifdef CONFIG_ADC_MCUX_ADC16_ENABLE_EDMA
381
394
/* Enable DMA. */
382
395
ADC16_EnableDMA (base , true);
383
-
384
396
data -> adc_dma_config .dma_cfg .block_count = 1U ;
385
397
data -> adc_dma_config .dma_cfg .dma_slot = config -> dma_slot ;
386
398
data -> adc_dma_config .dma_cfg .channel_direction = PERIPHERAL_TO_MEMORY ;
387
- data -> adc_dma_config .dma_cfg .source_burst_length = 4U ;
388
- data -> adc_dma_config .dma_cfg .dest_burst_length = 4U ;
399
+ data -> adc_dma_config .dma_cfg .source_burst_length = 2U ;
400
+ data -> adc_dma_config .dma_cfg .dest_burst_length = 2U ;
389
401
data -> adc_dma_config .dma_cfg .channel_priority = 0U ;
390
402
data -> adc_dma_config .dma_cfg .dma_callback = adc_dma_callback ;
391
403
data -> adc_dma_config .dma_cfg .user_data = (void * )dev ;
392
404
393
- data -> adc_dma_config .dma_cfg .source_data_size = 4U ;
394
- data -> adc_dma_config .dma_cfg .dest_data_size = 4U ;
405
+ data -> adc_dma_config .dma_cfg .source_data_size = 2U ;
406
+ data -> adc_dma_config .dma_cfg .dest_data_size = 2U ;
395
407
data -> adc_dma_config .dma_block .source_address = (uint32_t )& base -> R [0 ];
396
408
397
-
398
409
if (data -> dev_dma == NULL || !device_is_ready (data -> dev_dma )) {
399
410
LOG_ERR ("dma binding fail" );
400
411
return - EINVAL ;
0 commit comments