23
23
#include "cmsis.h"
24
24
#include "pinmap.h"
25
25
#include "gpio_api.h"
26
+ #include "mbed_critical.h"
26
27
27
28
#include "scif_iodefine.h"
28
29
#include "cpg_iodefine.h"
@@ -570,21 +571,14 @@ static void serial_flow_irq_set(serial_t *obj, uint32_t enable) {
570
571
int serial_getc (serial_t * obj ) {
571
572
uint16_t err_read ;
572
573
int data ;
573
- int was_masked ;
574
574
575
- #if defined ( __ICCARM__ )
576
- was_masked = __disable_irq_iar ();
577
- #else
578
- was_masked = __disable_irq ();
579
- #endif /* __ICCARM__ */
575
+ core_util_critical_section_enter ();
580
576
if (obj -> uart -> SCFSR & 0x93 ) {
581
577
err_read = obj -> uart -> SCFSR ;
582
578
obj -> uart -> SCFSR = (err_read & ~0x93 );
583
579
}
584
580
obj -> uart -> SCSCR |= 0x0040 ; // Set RIE
585
- if (!was_masked ) {
586
- __enable_irq ();
587
- }
581
+ core_util_critical_section_exit ();
588
582
589
583
if (obj -> uart -> SCLSR & 0x0001 ) {
590
584
obj -> uart -> SCLSR = 0u ; // ORER clear
@@ -593,16 +587,12 @@ int serial_getc(serial_t *obj) {
593
587
while (!serial_readable (obj ));
594
588
data = obj -> uart -> SCFRDR & 0xff ;
595
589
596
- #if defined ( __ICCARM__ )
597
- was_masked = __disable_irq_iar ();
598
- #else
599
- was_masked = __disable_irq ();
600
- #endif /* __ICCARM__ */
590
+ core_util_critical_section_enter ();
591
+
601
592
err_read = obj -> uart -> SCFSR ;
602
593
obj -> uart -> SCFSR = (err_read & 0xfffD ); // Clear RDF
603
- if (!was_masked ) {
604
- __enable_irq ();
605
- }
594
+
595
+ core_util_critical_section_exit ();
606
596
607
597
if (err_read & 0x80 ) {
608
598
data = -1 ; //err
@@ -612,29 +602,16 @@ int serial_getc(serial_t *obj) {
612
602
613
603
void serial_putc (serial_t * obj , int c ) {
614
604
uint16_t dummy_read ;
615
- int was_masked ;
616
605
617
- #if defined ( __ICCARM__ )
618
- was_masked = __disable_irq_iar ();
619
- #else
620
- was_masked = __disable_irq ();
621
- #endif /* __ICCARM__ */
606
+ core_util_critical_section_enter ();
622
607
obj -> uart -> SCSCR |= 0x0080 ; // Set TIE
623
- if (!was_masked ) {
624
- __enable_irq ();
625
- }
608
+ core_util_critical_section_exit ();
626
609
while (!serial_writable (obj ));
627
610
obj -> uart -> SCFTDR = c ;
628
- #if defined ( __ICCARM__ )
629
- was_masked = __disable_irq_iar ();
630
- #else
631
- was_masked = __disable_irq ();
632
- #endif /* __ICCARM__ */
611
+ core_util_critical_section_enter ();
633
612
dummy_read = obj -> uart -> SCFSR ;
634
613
obj -> uart -> SCFSR = (dummy_read & 0xff9f ); // Clear TEND/TDFE
635
- if (!was_masked ) {
636
- __enable_irq ();
637
- }
614
+ core_util_critical_section_exit ();
638
615
uart_data [obj -> index ].count ++ ;
639
616
}
640
617
@@ -647,83 +624,46 @@ int serial_writable(serial_t *obj) {
647
624
}
648
625
649
626
void serial_clear (serial_t * obj ) {
650
- int was_masked ;
651
- #if defined ( __ICCARM__ )
652
- was_masked = __disable_irq_iar ();
653
- #else
654
- was_masked = __disable_irq ();
655
- #endif /* __ICCARM__ */
656
-
627
+ core_util_critical_section_enter ();
657
628
obj -> uart -> SCFCR |= 0x06 ; // TFRST = 1, RFRST = 1
658
629
obj -> uart -> SCFCR &= ~0x06 ; // TFRST = 0, RFRST = 0
659
630
obj -> uart -> SCFSR &= ~0x0093u ; // ER, BRK, RDF, DR = 0
660
-
661
- if (!was_masked ) {
662
- __enable_irq ();
663
- }
631
+ core_util_critical_section_exit ();
664
632
}
665
633
666
634
void serial_pinout_tx (PinName tx ) {
667
635
pinmap_pinout (tx , PinMap_UART_TX );
668
636
}
669
637
670
638
void serial_break_set (serial_t * obj ) {
671
- int was_masked ;
672
- #if defined ( __ICCARM__ )
673
- was_masked = __disable_irq_iar ();
674
- #else
675
- was_masked = __disable_irq ();
676
- #endif /* __ICCARM__ */
639
+ core_util_critical_section_enter ();
677
640
// TxD Output(L)
678
641
obj -> uart -> SCSPTR &= ~0x0001u ; // SPB2DT = 0
679
642
obj -> uart -> SCSCR &= ~0x0020u ; // TE = 0 (Output disable)
680
- if (!was_masked ) {
681
- __enable_irq ();
682
- }
643
+ core_util_critical_section_exit ();
683
644
}
684
645
685
646
void serial_break_clear (serial_t * obj ) {
686
- int was_masked ;
687
- #if defined ( __ICCARM__ )
688
- was_masked = __disable_irq_iar ();
689
- #else
690
- was_masked = __disable_irq ();
691
- #endif /* __ICCARM__ */
647
+ core_util_critical_section_enter ();
692
648
obj -> uart -> SCSCR |= 0x0020u ; // TE = 1 (Output enable)
693
649
obj -> uart -> SCSPTR |= 0x0001u ; // SPB2DT = 1
694
- if (!was_masked ) {
695
- __enable_irq ();
696
- }
650
+ core_util_critical_section_exit ();
697
651
}
698
652
699
653
void serial_set_flow_control (serial_t * obj , FlowControl type , PinName rxflow , PinName txflow ) {
700
654
// determine the UART to use
701
- int was_masked ;
702
-
703
655
serial_flow_irq_set (obj , 0 );
704
656
705
657
if (type == FlowControlRTSCTS ) {
706
- #if defined ( __ICCARM__ )
707
- was_masked = __disable_irq_iar ();
708
- #else
709
- was_masked = __disable_irq ();
710
- #endif /* __ICCARM__ */
658
+ core_util_critical_section_enter ();
711
659
obj -> uart -> SCFCR = 0x0008u ; // CTS/RTS enable
712
- if (!was_masked ) {
713
- __enable_irq ();
714
- }
660
+ core_util_critical_section_exit ();
715
661
pinmap_pinout (rxflow , PinMap_UART_RTS );
716
662
pinmap_pinout (txflow , PinMap_UART_CTS );
717
663
} else {
718
- #if defined ( __ICCARM__ )
719
- was_masked = __disable_irq_iar ();
720
- #else
721
- was_masked = __disable_irq ();
722
- #endif /* __ICCARM__ */
664
+ core_util_critical_section_enter ();
723
665
obj -> uart -> SCFCR = 0x0000u ; // CTS/RTS diable
724
- if (!was_masked ) {
725
- __enable_irq ();
726
- }
666
+ core_util_critical_section_exit ();
727
667
}
728
668
}
729
669
0 commit comments