Exemplo n.º 1
0
Arquivo: uart.c Projeto: RP7/misoc
void uart_isr(void)
{
	unsigned int stat;
	
	stat = uart_ev_pending_read();

	if(stat & UART_EV_RX) {
		rx_buf[rx_produce] = uart_rxtx_read();
		rx_produce = (rx_produce + 1) & UART_RINGBUFFER_MASK_RX;
		uart_ev_pending_write(UART_EV_RX);
	}

	if(stat & UART_EV_TX) {
		uart_ev_pending_write(UART_EV_TX);
		if(tx_level > 0) {
			uart_rxtx_write(tx_buf[tx_consume]);
			tx_consume = (tx_consume + 1) & UART_RINGBUFFER_MASK_TX;
			tx_level--;
		} else
			tx_cts = 1;
	}
}
Exemplo n.º 2
0
void uart_init(void)
{
	unsigned int mask;
	
	rx_produce = 0;
	rx_consume = 0;
	
	tx_produce = 0;
	tx_consume = 0;
	tx_cts = 1;
	tx_level = 0;

	uart_ev_pending_write(uart_ev_pending_read());
	uart_ev_enable_write(UART_EV_TX | UART_EV_RX);
	mask = irq_getmask();
	mask |= 1 << UART_INTERRUPT;
	irq_setmask(mask);
}