@@ -502,7 +502,9 @@ int serial_tx_asynch(serial_t *obj, const void *tx, size_t tx_length, uint8_t tx
502
502
MBED_ASSERT (modinit != NULL );
503
503
MBED_ASSERT (modinit -> modname == obj -> serial .uart );
504
504
505
- PDMA -> CHCTL |= 1 << obj -> serial .dma_chn_id_tx ; // Enable this DMA channel
505
+ PDMA_T * pdma_base = dma_modbase ();
506
+
507
+ pdma_base -> CHCTL |= 1 << obj -> serial .dma_chn_id_tx ; // Enable this DMA channel
506
508
PDMA_SetTransferMode (obj -> serial .dma_chn_id_tx ,
507
509
((struct nu_uart_var * ) modinit -> var )-> pdma_perp_tx , // Peripheral connected to this PDMA
508
510
0 , // Scatter-gather disabled
@@ -563,7 +565,9 @@ void serial_rx_asynch(serial_t *obj, void *rx, size_t rx_length, uint8_t rx_widt
563
565
MBED_ASSERT (modinit != NULL );
564
566
MBED_ASSERT (modinit -> modname == obj -> serial .uart );
565
567
566
- PDMA -> CHCTL |= 1 << obj -> serial .dma_chn_id_rx ; // Enable this DMA channel
568
+ PDMA_T * pdma_base = dma_modbase ();
569
+
570
+ pdma_base -> CHCTL |= 1 << obj -> serial .dma_chn_id_rx ; // Enable this DMA channel
567
571
PDMA_SetTransferMode (obj -> serial .dma_chn_id_rx ,
568
572
((struct nu_uart_var * ) modinit -> var )-> pdma_perp_rx , // Peripheral connected to this PDMA
569
573
0 , // Scatter-gather disabled
@@ -596,11 +600,13 @@ void serial_tx_abort_asynch(serial_t *obj)
596
600
while (! UART_IS_TX_EMPTY (((UART_T * ) NU_MODBASE (obj -> serial .uart ))));
597
601
598
602
if (obj -> serial .dma_usage_tx != DMA_USAGE_NEVER ) {
603
+ PDMA_T * pdma_base = dma_modbase ();
604
+
599
605
if (obj -> serial .dma_chn_id_tx != DMA_ERROR_OUT_OF_CHANNELS ) {
600
606
PDMA_DisableInt (obj -> serial .dma_chn_id_tx , PDMA_INT_TRANS_DONE );
601
607
// FIXME: On NUC472, next PDMA transfer will fail with PDMA_STOP() called. Cause is unknown.
602
608
//PDMA_STOP(obj->serial.dma_chn_id_tx);
603
- PDMA -> CHCTL &= ~(1 << obj -> serial .dma_chn_id_tx );
609
+ pdma_base -> CHCTL &= ~(1 << obj -> serial .dma_chn_id_tx );
604
610
}
605
611
UART_DISABLE_INT (((UART_T * ) NU_MODBASE (obj -> serial .uart )), UART_INTEN_TXPDMAEN_Msk );
606
612
}
@@ -615,11 +621,13 @@ void serial_tx_abort_asynch(serial_t *obj)
615
621
void serial_rx_abort_asynch (serial_t * obj )
616
622
{
617
623
if (obj -> serial .dma_usage_rx != DMA_USAGE_NEVER ) {
624
+ PDMA_T * pdma_base = dma_modbase ();
625
+
618
626
if (obj -> serial .dma_chn_id_rx != DMA_ERROR_OUT_OF_CHANNELS ) {
619
627
PDMA_DisableInt (obj -> serial .dma_chn_id_rx , PDMA_INT_TRANS_DONE );
620
628
// FIXME: On NUC472, next PDMA transfer will fail with PDMA_STOP() called. Cause is unknown.
621
629
//PDMA_STOP(obj->serial.dma_chn_id_rx);
622
- PDMA -> CHCTL &= ~(1 << obj -> serial .dma_chn_id_rx );
630
+ pdma_base -> CHCTL &= ~(1 << obj -> serial .dma_chn_id_rx );
623
631
}
624
632
UART_DISABLE_INT (((UART_T * ) NU_MODBASE (obj -> serial .uart )), UART_INTEN_RXPDMAEN_Msk );
625
633
}
0 commit comments