@@ -67,6 +67,35 @@ static serial_t *objs[MXC_UART_INSTANCES];
6767
6868static void usurp_pin (PinName , int );
6969
70+ //******************************************************************************
71+ void uart_handler (serial_t * obj )
72+ {
73+ // clear interrupts
74+ volatile uint32_t flags = obj -> uart -> int_fl ;
75+
76+ if (flags & UART_ER_IE ) {
77+ // clear error flags
78+ obj -> uart -> int_fl = UART_ER_IE ;
79+ }
80+
81+ if (flags & UART_RX_IE ) {
82+ obj -> uart -> int_fl = UART_RX_IE ;
83+ if (obj && irq_handler ) {
84+ irq_handler (obj -> id , RxIrq );
85+ }
86+ }
87+
88+ if (flags & UART_TX_IE ) {
89+ obj -> uart -> int_fl = UART_TX_IE ;
90+ if (obj && irq_handler ) {
91+ irq_handler (obj -> id , TxIrq );
92+ }
93+ }
94+ }
95+
96+ void uart0_handler (void ) { uart_handler (objs [0 ]); }
97+ void uart1_handler (void ) { uart_handler (objs [1 ]); }
98+
7099//******************************************************************************
71100void serial_init (serial_t * obj , PinName tx , PinName rx )
72101{
@@ -106,6 +135,19 @@ void serial_init(serial_t *obj, PinName tx, PinName rx)
106135
107136 MXC_UART_Init (obj -> uart , DEFAULT_BAUD , obj -> map );
108137 //MBED_ASSERT(retval == E_NO_ERROR);
138+
139+ switch (obj -> index ) {
140+ case 0 :
141+ NVIC_SetVector (UART0_IRQn , (uint32_t )uart0_handler );
142+ NVIC_EnableIRQ (UART0_IRQn );
143+ break ;
144+ case 1 :
145+ NVIC_SetVector (UART1_IRQn , (uint32_t )uart1_handler );
146+ NVIC_EnableIRQ (UART1_IRQn );
147+ break ;
148+ }
149+
150+ return ;
109151}
110152
111153void serial_free (serial_t * obj )
@@ -158,35 +200,6 @@ void serial_format(serial_t *obj, int data_bits, SerialParity parity, int stop_b
158200 }
159201}
160202
161- //******************************************************************************
162- void uart_handler (serial_t * obj )
163- {
164- // clear interrupts
165- volatile uint32_t flags = obj -> uart -> int_fl ;
166-
167- if (flags & UART_ER_IE ) {
168- // clear error flags
169- obj -> uart -> int_fl = UART_ER_IE ;
170- }
171-
172- if (flags & UART_RX_IE ) {
173- obj -> uart -> int_fl = UART_RX_IE ;
174- if (obj && irq_handler ) {
175- irq_handler (obj -> id , RxIrq );
176- }
177- }
178-
179- if (flags & UART_TX_IE ) {
180- obj -> uart -> int_fl = UART_TX_IE ;
181- if (obj && irq_handler ) {
182- irq_handler (obj -> id , TxIrq );
183- }
184- }
185- }
186-
187- void uart0_handler (void ) { uart_handler (objs [0 ]); }
188- void uart1_handler (void ) { uart_handler (objs [1 ]); }
189-
190203//******************************************************************************
191204void serial_irq_handler (serial_t * obj , uart_irq_handler handler , uint32_t id )
192205{
@@ -200,19 +213,6 @@ void serial_irq_set(serial_t *obj, SerialIrq irq, uint32_t enable)
200213 MBED_ASSERT (obj -> index < MXC_UART_INSTANCES );
201214 objs [obj -> index ] = obj ;
202215
203- switch (obj -> index ) {
204- case 0 :
205- NVIC_SetVector (UART0_IRQn , (uint32_t )uart0_handler );
206- NVIC_EnableIRQ (UART0_IRQn );
207- break ;
208- case 1 :
209- NVIC_SetVector (UART1_IRQn , (uint32_t )uart1_handler );
210- NVIC_EnableIRQ (UART1_IRQn );
211- break ;
212- default :
213- MBED_ASSERT (0 );
214- }
215-
216216 // Set TX Almost Empty level to interrupt when empty
217217 obj -> uart -> ctrl1 = (MXC_F_UART_THRESH_CTRL_RX_FIFO_DEFAULT_THRESH_VAL | MXC_F_UART_THRESH_CTRL_TX_FIFO_DEFAULT_THRESH_VAL );
218218
0 commit comments