@@ -149,16 +149,18 @@ void serial_init(serial_t *obj, PinName tx, PinName rx) {
149
149
obj -> index = 0 ;
150
150
obj -> baseAddr = CC3220SF_UARTA0_BASE ;
151
151
obj -> powerMgrId = 12 ; /*!< Resource ID: UART 0 */
152
- obj -> intNum = INT_UARTA0 ;
152
+ obj -> intNum = INT_UARTA0_IRQn ;
153
153
obj -> peripheralId = PRCM_UARTA0 ;
154
+ MAP_PRCMPeripheralClkEnable (PRCM_UARTA0 , PRCM_RUN_MODE_CLK );
154
155
}
155
156
break ;
156
157
case UART_1 : {
157
158
obj -> index = 1 ;
158
159
obj -> baseAddr = CC3220SF_UARTA1_BASE ;
159
160
obj -> powerMgrId = 13 ; /*!< Resource ID: UART 1 */
160
- obj -> intNum = INT_UARTA1 ;
161
+ obj -> intNum = INT_UARTA1_IRQn ;
161
162
obj -> peripheralId = PRCM_UARTA1 ;
163
+ MAP_PRCMPeripheralClkEnable (PRCM_UARTA1 , PRCM_RUN_MODE_CLK );
162
164
}
163
165
break ;
164
166
}
@@ -247,6 +249,24 @@ void serial_format(serial_t *obj, int data_bits, SerialParity parity, int stop_b
247
249
/******************************************************************************
248
250
* INTERRUPTS HANDLING
249
251
******************************************************************************/
252
+ static inline void uart_irq (uint32_t iir , uint32_t index , CC3220SF_UART_TypeDef * puart ) {
253
+ SerialIrq irq_type ;
254
+ switch (iir ) {
255
+ case 1 : irq_type = TxIrq ; break ;
256
+ case 2 : irq_type = RxIrq ; break ;
257
+ default : return ;
258
+ }
259
+ }
260
+
261
+ void uart0_irq () {
262
+ int status = MAP_UARTIntStatus (CC3220SF_UARTA0_BASE , false);
263
+ uart_irq (status , 0 , (CC3220SF_UART_TypeDef * )CC3220SF_UART0 );
264
+ }
265
+ void uart1_irq () {
266
+ int status = MAP_UARTIntStatus (CC3220SF_UARTA1_BASE , false);
267
+ uart_irq (status , 1 , (CC3220SF_UART_TypeDef * )CC3220SF_UART1 );
268
+ }
269
+
250
270
void serial_irq_handler (serial_t * obj , uart_irq_handler handler , uint32_t id ) {
251
271
irq_handler = handler ;
252
272
uart_data [obj -> index ].serial_irq_id = id ;
@@ -255,14 +275,10 @@ void serial_irq_handler(serial_t *obj, uart_irq_handler handler, uint32_t id) {
255
275
static void serial_irq_set_internal (serial_t * obj , SerialIrq irq , uint32_t enable ) {
256
276
// TODO
257
277
IRQn_Type irq_n = (IRQn_Type )0 ;
258
- // uint32_t vector = 0;
278
+ uint32_t vector = 0 ;
259
279
switch ((int )obj -> uart ) {
260
- case UART_0 :
261
- irq_n = INT_UARTA0_IRQn ;
262
- break ;
263
- case UART_1 :
264
- irq_n = INT_UARTA1_IRQn ;
265
- break ;
280
+ case UART_0 : irq_n = INT_UARTA0_IRQn ; vector = (uint32_t )& uart0_irq ; break ;
281
+ case UART_1 : irq_n = INT_UARTA1_IRQn ; vector = (uint32_t )& uart1_irq ; break ;
266
282
}
267
283
}
268
284
@@ -322,6 +338,7 @@ void serial_set_flow_control(serial_t *obj, FlowControl type, PinName rxflow, Pi
322
338
// Check type(s) of flow control to use
323
339
UARTName uart_rts = (UARTName )pinmap_find_peripheral (rxflow , PinMap_UART_RTS );
324
340
UARTName uart_cts = (UARTName )pinmap_find_peripheral (txflow , PinMap_UART_CTS );
341
+ if (type != FlowControlNone ) MBED_ASSERT ((int )uart_rts != NC || (int )uart_cts != NC );
325
342
326
343
switch (type ) {
327
344
case FlowControlRTS :
0 commit comments