@@ -314,8 +314,10 @@ void spi_master_transfer(spi_t *obj, const void *tx, size_t tx_length, void *rx,
314
314
MBED_ASSERT (modinit != NULL );
315
315
MBED_ASSERT (modinit -> modname == obj -> spi .spi );
316
316
317
+ PDMA_T * pdma_base = dma_modbase ();
318
+
317
319
// Configure tx DMA
318
- PDMA -> CHCTL |= 1 << obj -> spi .dma_chn_id_tx ; // Enable this DMA channel
320
+ pdma_base -> CHCTL |= 1 << obj -> spi .dma_chn_id_tx ; // Enable this DMA channel
319
321
PDMA_SetTransferMode (obj -> spi .dma_chn_id_tx ,
320
322
((struct nu_spi_var * ) modinit -> var )-> pdma_perp_tx , // Peripheral connected to this PDMA
321
323
0 , // Scatter-gather disabled
@@ -339,7 +341,7 @@ void spi_master_transfer(spi_t *obj, const void *tx, size_t tx_length, void *rx,
339
341
dma_set_handler (obj -> spi .dma_chn_id_tx , (uint32_t ) spi_dma_handler_tx , (uint32_t ) obj , DMA_EVENT_ALL );
340
342
341
343
// Configure rx DMA
342
- PDMA -> CHCTL |= 1 << obj -> spi .dma_chn_id_rx ; // Enable this DMA channel
344
+ pdma_base -> CHCTL |= 1 << obj -> spi .dma_chn_id_rx ; // Enable this DMA channel
343
345
PDMA_SetTransferMode (obj -> spi .dma_chn_id_rx ,
344
346
((struct nu_spi_var * ) modinit -> var )-> pdma_perp_rx , // Peripheral connected to this PDMA
345
347
0 , // Scatter-gather disabled
@@ -380,6 +382,7 @@ void spi_master_transfer(spi_t *obj, const void *tx, size_t tx_length, void *rx,
380
382
void spi_abort_asynch (spi_t * obj )
381
383
{
382
384
SPI_T * spi_base = (SPI_T * ) NU_MODBASE (obj -> spi .spi );
385
+ PDMA_T * pdma_base = dma_modbase ();
383
386
384
387
if (obj -> spi .dma_usage != DMA_USAGE_NEVER ) {
385
388
// Receive FIFO Overrun in case of tx length > rx length on DMA way
@@ -388,18 +391,18 @@ void spi_abort_asynch(spi_t *obj)
388
391
}
389
392
390
393
if (obj -> spi .dma_chn_id_tx != DMA_ERROR_OUT_OF_CHANNELS ) {
391
- PDMA_DisableInt (obj -> spi .dma_chn_id_tx , 0 );
394
+ PDMA_DisableInt (obj -> spi .dma_chn_id_tx , PDMA_INT_TRANS_DONE );
392
395
// FIXME: On NUC472, next PDMA transfer will fail with PDMA_STOP() called. Cause is unknown.
393
396
//PDMA_STOP(obj->spi.dma_chn_id_tx);
394
- PDMA -> CHCTL &= ~(1 << obj -> spi .dma_chn_id_tx );
397
+ pdma_base -> CHCTL &= ~(1 << obj -> spi .dma_chn_id_tx );
395
398
}
396
399
SPI_DISABLE_TX_PDMA (((SPI_T * ) NU_MODBASE (obj -> spi .spi )));
397
400
398
401
if (obj -> spi .dma_chn_id_rx != DMA_ERROR_OUT_OF_CHANNELS ) {
399
- PDMA_DisableInt (obj -> spi .dma_chn_id_rx , 0 );
402
+ PDMA_DisableInt (obj -> spi .dma_chn_id_rx , PDMA_INT_TRANS_DONE );
400
403
// FIXME: On NUC472, next PDMA transfer will fail with PDMA_STOP() called. Cause is unknown.
401
404
//PDMA_STOP(obj->spi.dma_chn_id_rx);
402
- PDMA -> CHCTL &= ~(1 << obj -> spi .dma_chn_id_rx );
405
+ pdma_base -> CHCTL &= ~(1 << obj -> spi .dma_chn_id_rx );
403
406
}
404
407
SPI_DISABLE_RX_PDMA (((SPI_T * ) NU_MODBASE (obj -> spi .spi )));
405
408
}
0 commit comments