cyg_bool altera_avalon_jtag_uart_diag_getc_nonblock(void* __ch_data, cyg_uint8* ch) { cyg_uint8* port = (cyg_uint8*) __ch_data; cyg_uint32 status; cyg_uint32 data; data = IORD_ALTERA_AVALON_JTAG_UART_DATA(port); if (data & ALTERA_AVALON_JTAG_UART_DATA_RVALID_MSK) { *ch = (data & ALTERA_AVALON_JTAG_UART_DATA_DATA_MSK) >> ALTERA_AVALON_JTAG_UART_DATA_DATA_OFST; return true; }
static unsigned char altera_avalon_jtag_uart_getc(serial_channel *chan) { altera_avalon_jtag_uart_dev *jtag_uart_chan = (altera_avalon_jtag_uart_dev *)chan->dev_priv; cyg_addrword_t port = jtag_uart_chan->base; cyg_uint32 data; do { data = IORD_ALTERA_AVALON_JTAG_UART_DATA(port); } while (!(data & ALTERA_AVALON_JTAG_UART_DATA_RVALID_MSK)); return (data & ALTERA_AVALON_JTAG_UART_DATA_DATA_MSK) >> ALTERA_AVALON_JTAG_UART_DATA_DATA_OFST; }
int altera_avalon_jtag_uart_read(altera_avalon_jtag_uart_state* sp, char* buffer, int space, int flags) { unsigned int base = sp->base; char * ptr = buffer; char * end = buffer + space; while (ptr < end) { unsigned int data = IORD_ALTERA_AVALON_JTAG_UART_DATA(base); if (data & ALTERA_AVALON_JTAG_UART_DATA_RVALID_MSK) *ptr++ = (data & ALTERA_AVALON_JTAG_UART_DATA_DATA_MSK) >> ALTERA_AVALON_JTAG_UART_DATA_DATA_OFST; else if (ptr != buffer) break; else if(flags & O_NONBLOCK) break; }