@@ -479,7 +479,7 @@ static inline void dma_channel_abort(uint channel) {
479
479
while (dma_hw -> abort & (1ul << channel )) tight_loop_contents ();
480
480
}
481
481
482
- /*! \brief Enable single DMA channel interrupt 0
482
+ /*! \brief Enable single DMA channel's interrupt via DMA_IRQ_0
483
483
* \ingroup hardware_dma
484
484
*
485
485
* \param channel DMA channel
@@ -494,7 +494,7 @@ static inline void dma_channel_set_irq0_enabled(uint channel, bool enabled) {
494
494
hw_clear_bits (& dma_hw -> inte0 , 1u << channel );
495
495
}
496
496
497
- /*! \brief Enable multiple DMA channels interrupt 0
497
+ /*! \brief Enable multiple DMA channels' interrupts via DMA_IRQ_0
498
498
* \ingroup hardware_dma
499
499
*
500
500
* \param channel_mask Bitmask of all the channels to enable/disable. Channel 0 = bit 0, channel 1 = bit 1 etc.
@@ -508,7 +508,7 @@ static inline void dma_set_irq0_channel_mask_enabled(uint32_t channel_mask, bool
508
508
}
509
509
}
510
510
511
- /*! \brief Enable single DMA channel interrupt 1
511
+ /*! \brief Enable single DMA channel's interrupt via DMA_IRQ_1
512
512
* \ingroup hardware_dma
513
513
*
514
514
* \param channel DMA channel
@@ -523,7 +523,7 @@ static inline void dma_channel_set_irq1_enabled(uint channel, bool enabled) {
523
523
hw_clear_bits (& dma_hw -> inte1 , 1u << channel );
524
524
}
525
525
526
- /*! \brief Enable multiple DMA channels interrupt 0
526
+ /*! \brief Enable multiple DMA channels' interrupts via DMA_IRQ_1
527
527
* \ingroup hardware_dma
528
528
*
529
529
* \param channel_mask Bitmask of all the channels to enable/disable. Channel 0 = bit 0, channel 1 = bit 1 etc.
@@ -537,6 +537,38 @@ static inline void dma_set_irq1_channel_mask_enabled(uint32_t channel_mask, bool
537
537
}
538
538
}
539
539
540
+ /*! \brief Enable single DMA channel interrupt on either DMA_IRQ_0 or DMA_IRQ_1
541
+ * \ingroup hardware_dma
542
+ *
543
+ * \param irq_index the IRQ index; either 0 or 1 for DMA_IRQ_0 or DMA_IRQ_1
544
+ * \param channel DMA channel
545
+ * \param enabled true to enable interrupt via irq_index for specified channel, false to disable.
546
+ */
547
+ static inline void dma_irqn_set_channel_enabled (uint irq_index , uint channel , bool enabled ) {
548
+ invalid_params_if (DMA , irq_index > 1 );
549
+ if (irq_index ) {
550
+ dma_channel_set_irq1_enabled (channel , enabled );
551
+ } else {
552
+ dma_channel_set_irq0_enabled (channel , enabled );
553
+ }
554
+ }
555
+
556
+ /*! \brief Enable multiple DMA channels' interrupt via either DMA_IRQ_0 or DMA_IRQ_1
557
+ * \ingroup hardware_dma
558
+ *
559
+ * \param irq_index the IRQ index; either 0 or 1 for DMA_IRQ_0 or DMA_IRQ_1
560
+ * \param channel_mask Bitmask of all the channels to enable/disable. Channel 0 = bit 0, channel 1 = bit 1 etc.
561
+ * \param enabled true to enable all the interrupts specified in the mask, false to disable all the interrupts specified in the mask.
562
+ */
563
+ static inline void dma_set_irqn_channel_mask_enabled (uint irq_index , uint32_t channel_mask , bool enabled ) {
564
+ invalid_params_if (DMA , irq_index > 1 );
565
+ if (irq_index ) {
566
+ dma_set_irq1_channel_mask_enabled (channel_mask , enabled );
567
+ } else {
568
+ dma_set_irq0_channel_mask_enabled (channel_mask , enabled );
569
+ }
570
+ }
571
+
540
572
/*! \brief Determine if a particular channel is a cause of DMA_IRQ_0
541
573
* \ingroup hardware_dma
542
574
*
@@ -556,7 +588,20 @@ static inline bool dma_channel_get_irq0_status(uint channel) {
556
588
*/
557
589
static inline bool dma_channel_get_irq1_status (uint channel ) {
558
590
check_dma_channel_param (channel );
559
- return dma_hw -> ints0 & (1u << channel );
591
+ return dma_hw -> ints1 & (1u << channel );
592
+ }
593
+
594
+ /*! \brief Determine if a particular channel is a cause of DMA_IRQ_N
595
+ * \ingroup hardware_dma
596
+ *
597
+ * \param irq_index the IRQ index; either 0 or 1 for DMA_IRQ_0 or DMA_IRQ_1
598
+ * \param channel DMA channel
599
+ * \return true if the channel is a cause of the DMA_IRQ_N, false otherwise
600
+ */
601
+ static inline bool dma_irqn_get_channel_status (uint irq_index , uint channel ) {
602
+ invalid_params_if (DMA , irq_index > 1 );
603
+ check_dma_channel_param (channel );
604
+ return (irq_index ? dma_hw -> ints1 : dma_hw -> ints0 ) & (1u << channel );
560
605
}
561
606
562
607
/*! \brief Acknowledge a channel IRQ, resetting it as the cause of DMA_IRQ_0
@@ -569,7 +614,7 @@ static inline void dma_channel_acknowledge_irq0(uint channel) {
569
614
hw_set_bits (& dma_hw -> ints0 , (1u << channel ));
570
615
}
571
616
572
- /*! \brief Acknowledge a channel IRQ, resetting it as the cause of DMA_IRQ_0
617
+ /*! \brief Acknowledge a channel IRQ, resetting it as the cause of DMA_IRQ_1
573
618
* \ingroup hardware_dma
574
619
*
575
620
* \param channel DMA channel
@@ -579,6 +624,18 @@ static inline void dma_channel_acknowledge_irq1(uint channel) {
579
624
hw_set_bits (& dma_hw -> ints1 , (1u << channel ));
580
625
}
581
626
627
+ /*! \brief Acknowledge a channel IRQ, resetting it as the cause of DMA_IRQ_N
628
+ * \ingroup hardware_dma
629
+ *
630
+ * \param irq_index the IRQ index; either 0 or 1 for DMA_IRQ_0 or DMA_IRQ_1
631
+ * \param channel DMA channel
632
+ */
633
+ static inline void dma_irqn_acknowledge_channel (uint irq_index , uint channel ) {
634
+ invalid_params_if (DMA , irq_index > 1 );
635
+ check_dma_channel_param (channel );
636
+ hw_set_bits (irq_index ? & dma_hw -> ints1 : & dma_hw -> ints0 , (1u << channel ));
637
+ }
638
+
582
639
/*! \brief Check if DMA channel is busy
583
640
* \ingroup hardware_dma
584
641
*
0 commit comments