]> git.kernelconcepts.de Git - karo-tx-redboot.git/blobdiff - packages/hal/arm/lpc2xxx/var/v2_0/src/hal_diag.c
unified MX27, MX25, MX37 trees
[karo-tx-redboot.git] / packages / hal / arm / lpc2xxx / var / v2_0 / src / hal_diag.c
index 72a222049df34372adefeafd4aa50a9963342997..5b1d95c34f2c38749b192b9abd564de3be4419a8 100644 (file)
@@ -242,16 +242,21 @@ cyg_hal_plf_serial_isr(void *__ch_data, int* __ctrlc,
     int res = 0;
     channel_data_t* chan = (channel_data_t*)__ch_data;
     cyg_uint8 c;
-    cyg_uint8 stat;
+    cyg_uint8 iir;
+    
     CYGARC_HAL_SAVE_GP();
 
     *__ctrlc = 0;
-    HAL_READ_UINT32(chan->base+CYGARC_HAL_LPC2XXX_REG_UxLSR, stat);
-    if ( (stat & CYGARC_HAL_LPC2XXX_REG_UxLSR_RDR) != 0 ) {
 
+       HAL_READ_UINT32(chan->base + CYGARC_HAL_LPC2XXX_REG_UxIIR, iir);
+       
+       if((iir & (CYGARC_HAL_LPC2XXX_REG_UxIIR_IIR0 | CYGARC_HAL_LPC2XXX_REG_UxIIR_IIR1 | 
+               CYGARC_HAL_LPC2XXX_REG_UxIIR_IIR2)) == CYGARC_HAL_LPC2XXX_REG_UxIIR_IIR2)
+       {
+               // Rx data available or character timeout
+               // Read data in order to clear interrupt
         HAL_READ_UINT32(chan->base+CYGARC_HAL_LPC2XXX_REG_UxRBR, c);
-        if( cyg_hal_is_break( &c , 1 ) )
-            *__ctrlc = 1;
+        if( cyg_hal_is_break( &c , 1 ) ) *__ctrlc = 1;
 
         res = CYG_ISR_HANDLED;
     }