26
26
27
27
#include "scif_iodefine.h"
28
28
#include "cpg_iodefine.h"
29
+ #include "mbed_critical.h"
29
30
30
31
/******************************************************************************
31
32
* INITIALIZATION
@@ -510,7 +511,7 @@ static void uart_rx_irq(IRQn_Type irq_num, uint32_t index) {
510
511
511
512
static void uart_err_irq (IRQn_Type irq_num , uint32_t index ) {
512
513
serial_t * obj = uart_data [index ].receiving_obj ;
513
- int was_masked , err_read ;
514
+ int err_read ;
514
515
515
516
if (obj ) {
516
517
serial_irq_err_set (obj , 0 );
@@ -525,21 +526,15 @@ static void uart_err_irq(IRQn_Type irq_num, uint32_t index) {
525
526
}
526
527
serial_rx_abort_asynch (obj );
527
528
528
- #if defined ( __ICCARM__ )
529
- was_masked = __disable_irq_iar ();
530
- #else
531
- was_masked = __disable_irq ();
532
- #endif /* __ICCARM__ */
529
+ core_util_critical_section_enter ();
533
530
if (obj -> serial .uart -> SCFSR & 0x93 ) {
534
531
err_read = obj -> serial .uart -> SCFSR ;
535
532
obj -> serial .uart -> SCFSR = (err_read & ~0x93 );
536
533
}
537
534
if (obj -> serial .uart -> SCLSR & 1 ) {
538
535
obj -> serial .uart -> SCLSR = 0 ;
539
536
}
540
- if (!was_masked ) {
541
- __enable_irq ();
542
- }
537
+ core_util_critical_section_exit ();
543
538
}
544
539
}
545
540
@@ -679,21 +674,14 @@ static void serial_flow_irq_set(serial_t *obj, uint32_t enable) {
679
674
int serial_getc (serial_t * obj ) {
680
675
uint16_t err_read ;
681
676
int data ;
682
- int was_masked ;
683
677
684
- #if defined ( __ICCARM__ )
685
- was_masked = __disable_irq_iar ();
686
- #else
687
- was_masked = __disable_irq ();
688
- #endif /* __ICCARM__ */
678
+ core_util_critical_section_enter ();
689
679
if (obj -> serial .uart -> SCFSR & 0x93 ) {
690
680
err_read = obj -> serial .uart -> SCFSR ;
691
681
obj -> serial .uart -> SCFSR = (err_read & ~0x93 );
692
682
}
693
683
obj -> serial .uart -> SCSCR |= 0x0040 ; // Set RIE
694
- if (!was_masked ) {
695
- __enable_irq ();
696
- }
684
+ core_util_critical_section_exit ();
697
685
698
686
if (obj -> serial .uart -> SCLSR & 0x0001 ) {
699
687
obj -> serial .uart -> SCLSR = 0u ; // ORER clear
@@ -702,16 +690,10 @@ int serial_getc(serial_t *obj) {
702
690
while (!serial_readable (obj ));
703
691
data = obj -> serial .uart -> SCFRDR & 0xff ;
704
692
705
- #if defined ( __ICCARM__ )
706
- was_masked = __disable_irq_iar ();
707
- #else
708
- was_masked = __disable_irq ();
709
- #endif /* __ICCARM__ */
693
+ core_util_critical_section_enter ();
710
694
err_read = obj -> serial .uart -> SCFSR ;
711
695
obj -> serial .uart -> SCFSR = (err_read & 0xfffD ); // Clear RDF
712
- if (!was_masked ) {
713
- __enable_irq ();
714
- }
696
+ core_util_critical_section_exit ();
715
697
716
698
if (err_read & 0x80 ) {
717
699
data = -1 ; //err
@@ -727,20 +709,13 @@ void serial_putc(serial_t *obj, int c) {
727
709
728
710
static void serial_put_done (serial_t * obj )
729
711
{
730
- int was_masked ;
731
712
volatile uint16_t dummy_read ;
732
-
733
- #if defined ( __ICCARM__ )
734
- was_masked = __disable_irq_iar ();
735
- #else
736
- was_masked = __disable_irq ();
737
- #endif /* __ICCARM__ */
713
+
714
+ core_util_critical_section_enter ();
738
715
dummy_read = obj -> serial .uart -> SCFSR ;
739
716
obj -> serial .uart -> SCFSR = (dummy_read & 0xff9f ); // Clear TEND/TDFE
740
717
obj -> serial .uart -> SCSCR |= 0x0080 ; // Set TIE
741
- if (!was_masked ) {
742
- __enable_irq ();
743
- }
718
+ core_util_critical_section_exit ();
744
719
}
745
720
746
721
int serial_readable (serial_t * obj ) {
@@ -752,83 +727,49 @@ int serial_writable(serial_t *obj) {
752
727
}
753
728
754
729
void serial_clear (serial_t * obj ) {
755
- int was_masked ;
756
- #if defined ( __ICCARM__ )
757
- was_masked = __disable_irq_iar ();
758
- #else
759
- was_masked = __disable_irq ();
760
- #endif /* __ICCARM__ */
730
+ core_util_critical_section_enter ();
761
731
762
732
obj -> serial .uart -> SCFCR |= 0x06 ; // TFRST = 1, RFRST = 1
763
733
obj -> serial .uart -> SCFCR &= ~0x06 ; // TFRST = 0, RFRST = 0
764
734
obj -> serial .uart -> SCFSR &= ~0x0093u ; // ER, BRK, RDF, DR = 0
765
735
766
- if (!was_masked ) {
767
- __enable_irq ();
768
- }
736
+ core_util_critical_section_exit ();
769
737
}
770
738
771
739
void serial_pinout_tx (PinName tx ) {
772
740
pinmap_pinout (tx , PinMap_UART_TX );
773
741
}
774
742
775
743
void serial_break_set (serial_t * obj ) {
776
- int was_masked ;
777
- #if defined ( __ICCARM__ )
778
- was_masked = __disable_irq_iar ();
779
- #else
780
- was_masked = __disable_irq ();
781
- #endif /* __ICCARM__ */
744
+ core_util_critical_section_enter ();
782
745
// TxD Output(L)
783
746
obj -> serial .uart -> SCSPTR &= ~0x0001u ; // SPB2DT = 0
784
747
obj -> serial .uart -> SCSCR &= ~0x0020u ; // TE = 0 (Output disable)
785
- if (!was_masked ) {
786
- __enable_irq ();
787
- }
748
+ core_util_critical_section_exit ();
788
749
}
789
750
790
751
void serial_break_clear (serial_t * obj ) {
791
- int was_masked ;
792
- #if defined ( __ICCARM__ )
793
- was_masked = __disable_irq_iar ();
794
- #else
795
- was_masked = __disable_irq ();
796
- #endif /* __ICCARM__ */
752
+ core_util_critical_section_enter ();
797
753
obj -> serial .uart -> SCSCR |= 0x0020u ; // TE = 1 (Output enable)
798
754
obj -> serial .uart -> SCSPTR |= 0x0001u ; // SPB2DT = 1
799
- if (!was_masked ) {
800
- __enable_irq ();
801
- }
755
+ core_util_critical_section_exit ();
802
756
}
803
757
804
758
void serial_set_flow_control (serial_t * obj , FlowControl type , PinName rxflow , PinName txflow ) {
805
759
// determine the UART to use
806
- int was_masked ;
807
760
808
761
serial_flow_irq_set (obj , 0 );
809
762
810
763
if (type == FlowControlRTSCTS ) {
811
- #if defined ( __ICCARM__ )
812
- was_masked = __disable_irq_iar ();
813
- #else
814
- was_masked = __disable_irq ();
815
- #endif /* __ICCARM__ */
764
+ core_util_critical_section_enter ();
816
765
obj -> serial .uart -> SCFCR = 0x0008u ; // CTS/RTS enable
817
- if (!was_masked ) {
818
- __enable_irq ();
819
- }
766
+ core_util_critical_section_exit ();
820
767
pinmap_pinout (rxflow , PinMap_UART_RTS );
821
768
pinmap_pinout (txflow , PinMap_UART_CTS );
822
769
} else {
823
- #if defined ( __ICCARM__ )
824
- was_masked = __disable_irq_iar ();
825
- #else
826
- was_masked = __disable_irq ();
827
- #endif /* __ICCARM__ */
770
+ core_util_critical_section_enter ();
828
771
obj -> serial .uart -> SCFCR = 0x0000u ; // CTS/RTS diable
829
- if (!was_masked ) {
830
- __enable_irq ();
831
- }
772
+ core_util_critical_section_exit ();
832
773
}
833
774
}
834
775
0 commit comments