From 05b7ee744d28059ba5fbfd6af7282571edd7d0ab Mon Sep 17 00:00:00 2001 From: "Israel B. Sant'Anna" <ibsa14@inf.ufpr.br> Date: Tue, 2 Jun 2015 23:50:03 -0300 Subject: [PATCH] =?UTF-8?q?Implementadas=20fun=C3=A7=C3=B5es=20proberx=20e?= =?UTF-8?q?=20probetx?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Israel B. Sant'Anna <ibsa14@inf.ufpr.br> --- cMIPS/tests/uart.c | 42 +++++++++++++++++++++++++----------------- 1 file changed, 25 insertions(+), 17 deletions(-) diff --git a/cMIPS/tests/uart.c b/cMIPS/tests/uart.c index 0c6023e..03f9a93 100644 --- a/cMIPS/tests/uart.c +++ b/cMIPS/tests/uart.c @@ -23,7 +23,6 @@ typedef struct status { // status register fields (uses only ls byte) #define RXfull 0x00000020 #define TXempty 0x00000040 - typedef union ctlStat { // control + status on same address Tcontrol ctl; // write-only Tstatus stat; // read-only @@ -40,27 +39,28 @@ typedef struct serial { } Tserial; typedef struct{ - char rx_queue[16]; // reception queue and pointers - int rx_hd; - int rx_tl; - char tx_queue[16]; // transmission queue and pointers - int tx_hd; - int tx_tl; + char rx_q[16]; // reception queue + int rx_hd; // reception queue head index + int rx_tl; // reception queue tail index + char tx_q[16]; // transmission queue + int tx_hd; // transmission queue head index + int tx_tl; // transmission queue tail index int nrx; // characters in RX_queue int ntx; // spaces left in TX_queue -} UartControl; +} UARTDriver; + +#define EOF -1 int proberx(void); // retorna nrx int probetx(void); // retorna ntx int iostat(void); // retorna inteiro com status no byte menos sign void ioctl(int); // escreve byte menos sign no reg de controle char getc(void); // retorna caractere na fila, decrementa nrx -int uart_putc(char); // insere caractere na fila, decrementa ntx -int wrtc(char); // escreve caractere diretamente em txreg +int Putc(char); // insere caractere na fila, decrementa ntx -extern UartControl Ud; +extern UARTDriver Ud; -int main(void){ +int main(){ int i; volatile int state; // tell GCC not to optimize away code volatile Tserial *uart; @@ -77,7 +77,7 @@ int main(void){ char c; while((c=getc())!='\0') - uart_putc(c); + Putc(c); return 0; } @@ -85,21 +85,21 @@ int main(void){ char getc(){ char c; if(Ud.nrx > 0){ - c = Ud.rx_queue[Ud.rx_hd]; + c = Ud.rx_q[Ud.rx_hd]; Ud.rx_hd = (Ud.rx_hd+1)%16; disableInterr(); Ud.nrx--; enableInterr(); }else{ - c = -1; + c = EOF; } return c; } -int uart_putc(char c){ +int Putc(char c){ int sent; if(Ud.ntx > 0){ - Ud.tx_queue[Ud.tx_tl] = c; + Ud.tx_q[Ud.tx_tl] = c; Ud.tx_tl = (Ud.tx_tl+1)%16; disableInterr(); Ud.ntx--; @@ -109,4 +109,12 @@ int uart_putc(char c){ sent = 0; } return sent; +} + +int proberx(){ + return Ud.nrx; +} + +int probetx(){ + return Ud.ntx; } \ No newline at end of file -- GitLab