@@ -149,16 +149,18 @@ void serial_init(serial_t *obj, PinName tx, PinName rx) {
149149 obj -> index = 0 ;
150150 obj -> baseAddr = CC3220SF_UARTA0_BASE ;
151151 obj -> powerMgrId = 12 ; /*!< Resource ID: UART 0 */
152- obj -> intNum = INT_UARTA0 ;
152+ obj -> intNum = INT_UARTA0_IRQn ;
153153 obj -> peripheralId = PRCM_UARTA0 ;
154+ MAP_PRCMPeripheralClkEnable (PRCM_UARTA0 , PRCM_RUN_MODE_CLK );
154155 }
155156 break ;
156157 case UART_1 : {
157158 obj -> index = 1 ;
158159 obj -> baseAddr = CC3220SF_UARTA1_BASE ;
159160 obj -> powerMgrId = 13 ; /*!< Resource ID: UART 1 */
160- obj -> intNum = INT_UARTA1 ;
161+ obj -> intNum = INT_UARTA1_IRQn ;
161162 obj -> peripheralId = PRCM_UARTA1 ;
163+ MAP_PRCMPeripheralClkEnable (PRCM_UARTA1 , PRCM_RUN_MODE_CLK );
162164 }
163165 break ;
164166 }
@@ -247,6 +249,24 @@ void serial_format(serial_t *obj, int data_bits, SerialParity parity, int stop_b
247249/******************************************************************************
248250 * INTERRUPTS HANDLING
249251 ******************************************************************************/
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+
250270void serial_irq_handler (serial_t * obj , uart_irq_handler handler , uint32_t id ) {
251271 irq_handler = handler ;
252272 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) {
255275static void serial_irq_set_internal (serial_t * obj , SerialIrq irq , uint32_t enable ) {
256276 // TODO
257277 IRQn_Type irq_n = (IRQn_Type )0 ;
258- // uint32_t vector = 0;
278+ uint32_t vector = 0 ;
259279 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 ;
266282 }
267283}
268284
@@ -322,6 +338,7 @@ void serial_set_flow_control(serial_t *obj, FlowControl type, PinName rxflow, Pi
322338 // Check type(s) of flow control to use
323339 UARTName uart_rts = (UARTName )pinmap_find_peripheral (rxflow , PinMap_UART_RTS );
324340 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 );
325342
326343 switch (type ) {
327344 case FlowControlRTS :
0 commit comments