Hi All,

        I'am porting eCos/RedBoot to Versatile/ARM926EJ-S with 
Integrator/ARM966E as baseline. Thanks to this Saturday. It's the first time my 
HyperTerminal got characters came from RedBoot. They were showed belowing. 

        RedBoot(tm)
                
    Only 12 characters! I debug it and found that it got into a loop in 
hal_diag.c:cyg_hal_plf_serial_putc().
 
        After transmit the first 12 characters, the value of AMBA_UARTFR 
register changed from 0x18 to 0x38.
So it cann't get out of the loop.
        
        The Release version of UART is PL011 r1p3. The flowing is the relevant 
code. 

--------------------------------------------------------
        #define AMBA_UARTFR_TXFF                0x20
        #define AMBA_UARTFR_RXFE                0x10
        #define AMBA_UARTFR_BUSY                0x08

        // AMBA uart access macros
        #define GET_STATUS(p)           (IO_READ((p) + AMBA_UARTFR))
        #define TX_READY(s)             (((s) & AMBA_UARTFR_TXFF) == 0)

        void
        cyg_hal_plf_serial_putc(void *__ch_data, char c)
        {
        ...

        do {
        status = GET_STATUS(base);
        } while (!TX_READY(status));    // wait until ready
    
                PUT_CHAR(base, c);
                ...
        }
--------------------------------------------------------

        Any help about this?
        
Best regards,
Tim     
        

Reply via email to