Line 38... |
Line 38... |
//
|
//
|
// #define UARTLEN 8681 // Minimum ticks per character, 115200 Baud
|
// #define UARTLEN 8681 // Minimum ticks per character, 115200 Baud
|
//
|
//
|
// At 4MBaud, each bit takes 25 clocks. 10 bits would thus take 250 clocks
|
// At 4MBaud, each bit takes 25 clocks. 10 bits would thus take 250 clocks
|
//
|
//
|
#define UARTLEN 250 // Minimum ticks per character, 4M Baud
|
// #define UARTLEN 250 // Minimum ticks per character, 4M Baud
|
|
// #define UARTLEN 1000 // Minimum ticks per character, 1M Hz
|
// #define UARTLEN 8 // Minimum ticks per character
|
// #define UARTLEN 8 // Minimum ticks per character
|
|
#define UARTLEN 4096 //
|
|
|
template <class VA> class PIPECMDR : public TESTB<VA> {
|
template <class VA> class PIPECMDR : public TESTB<VA> {
|
void setup_listener(const int port) {
|
void setup_listener(const int port) {
|
struct sockaddr_in my_addr;
|
struct sockaddr_in my_addr;
|
|
|
Line 82... |
Line 84... |
}
|
}
|
|
|
public:
|
public:
|
int m_skt, m_con;
|
int m_skt, m_con;
|
char m_txbuf[PIPEBUFLEN], m_rxbuf[PIPEBUFLEN];
|
char m_txbuf[PIPEBUFLEN], m_rxbuf[PIPEBUFLEN];
|
int m_ilen, m_rxpos, m_txpos, m_uart_wait;
|
int m_ilen, m_rxpos, m_txpos, m_uart_wait, m_tx_busy;
|
bool m_started_flag;
|
bool m_started_flag;
|
|
|
PIPECMDR(const int port) : TESTB<VA>() {
|
PIPECMDR(const int port) : TESTB<VA>() {
|
m_con = m_skt = -1;
|
m_con = m_skt = -1;
|
setup_listener(port);
|
setup_listener(port);
|
m_rxpos = m_txpos = m_ilen = 0;
|
m_rxpos = m_txpos = m_ilen = 0;
|
m_started_flag = false;
|
m_started_flag = false;
|
m_uart_wait = 0;
|
m_uart_wait = 0; // Flow control into the FPGA
|
|
m_tx_busy = 0; // Flow control out of the FPGA
|
}
|
}
|
|
|
virtual void kill(void) {
|
virtual void kill(void) {
|
// Close any active connection
|
// Close any active connection
|
if (m_con >= 0) close(m_con);
|
if (m_con >= 0) close(m_con);
|
Line 172... |
Line 175... |
fflush(stdout);
|
fflush(stdout);
|
}
|
}
|
*/
|
*/
|
TESTB<VA>::tick();
|
TESTB<VA>::tick();
|
|
|
|
bool tx_accepted = false;
|
|
if (m_tx_busy == 0) {
|
if ((TESTB<VA>::m_core->o_tx_stb)&&(m_con > 0)) {
|
if ((TESTB<VA>::m_core->o_tx_stb)&&(m_con > 0)) {
|
m_txbuf[m_txpos++] = TESTB<VA>::m_core->o_tx_data;
|
m_txbuf[m_txpos++] = TESTB<VA>::m_core->o_tx_data;
|
|
tx_accepted = true;
|
if ((TESTB<VA>::m_core->o_tx_data == '\n')||(m_txpos >= sizeof(m_txbuf))) {
|
if ((TESTB<VA>::m_core->o_tx_data == '\n')||(m_txpos >= sizeof(m_txbuf))) {
|
int snt = 0;
|
int snt = 0;
|
snt = send(m_con, m_txbuf, m_txpos, 0);
|
snt = send(m_con, m_txbuf, m_txpos, 0);
|
|
|
m_txbuf[m_txpos] = '\0';
|
m_txbuf[m_txpos] = '\0';
|
Line 187... |
Line 193... |
snt);
|
snt);
|
}
|
}
|
m_txpos = 0;
|
m_txpos = 0;
|
}
|
}
|
}
|
}
|
|
} else
|
|
m_tx_busy--;
|
|
|
|
if ((TESTB<VA>::m_core->o_tx_stb)&&(TESTB<VA>::m_core->i_tx_busy==0))
|
|
m_tx_busy = UARTLEN;
|
|
TESTB<VA>::m_core->i_tx_busy = (m_tx_busy != 0);
|
|
|
|
if (0) {
|
|
if ((m_tx_busy!=0)||(TESTB<VA>::m_core->i_tx_busy)
|
|
||(TESTB<VA>::m_core->o_tx_stb)
|
|
||(tx_accepted))
|
|
printf("%4d %d %d %02x %s\n",
|
|
m_tx_busy,
|
|
TESTB<VA>::m_core->i_tx_busy,
|
|
TESTB<VA>::m_core->o_tx_stb,
|
|
TESTB<VA>::m_core->o_tx_data,
|
|
(tx_accepted)?"READ!":"");
|
|
}
|
|
|
|
|
/*
|
/*
|
if((TESTB<VA>::m_core->o_wb_cyc)||(TESTB<VA>::m_core->o_wb_stb)){
|
if((TESTB<VA>::m_core->o_wb_cyc)||(TESTB<VA>::m_core->o_wb_stb)){
|
printf("BUS: %d,%d,%d %8x %8x\n",
|
printf("BUS: %d,%d,%d %8x %8x\n",
|
TESTB<VA>::m_core->o_wb_cyc,
|
TESTB<VA>::m_core->o_wb_cyc,
|