Exemple #1
0
static void imapx200_serial_stop_tx(struct uart_port *port)
{
	struct imapx200_uart_port *ourport = to_ourport(port);

	if (tx_enabled(port))
	{
		uart_disable_irq(port, UART_THRE_INT);
		uart_disable_irq(port, UART_TX_INT);
		tx_enabled(port) = 0;
		if (port->flags & UPF_CONS_FLOW)
			imapx200_serial_rx_enable(port);
	}
}
Exemple #2
0
static void imapx200_serial_stop_rx(struct uart_port *port)
{
	struct imapx200_uart_port *ourport = to_ourport(port);

	if (rx_enabled(port))
	{
		dbg("imapx200_serial_stop_rx: port=%p\n", port);
		disable_irq_nosync(ourport->rx_irq);
#if 1
		uart_disable_irq(port, UART_RX_INT);
		uart_disable_irq(port, UART_ERR_INT);
#endif	
		rx_enabled(port) = 0;
	}
}
Exemple #3
0
void rt_fh_uart_handler(int vector, void *param)
{
    int status;
    unsigned int ret;
    struct fh_uart *uart;
    unsigned int reg_status;
    rt_device_t dev = (rt_device_t)param;
    uart = (struct fh_uart *)dev->user_data;
    status = uart_get_iir_status(uart->uart_port);
    if (status & UART_IIR_NOINT)
    {
        return;
    }
    if(status & UART_IIR_THREMPTY) {
        //first close tx isr
        uart_disable_irq(uart->uart_port,UART_IER_ETBEI);

        rt_hw_serial_isr((struct rt_serial_device *)dev, RT_SERIAL_EVENT_TX_DONE);
    }
    else if((status & UART_IIR_CHRTOUT)==UART_IIR_CHRTOUT) {
        //bug....
        //if no data in rx fifo
        reg_status = uart_get_status(uart->uart_port);
        if((reg_status & 1<<3) == 0)
            ret = uart_getc(uart->uart_port);
    }
    else {
        rt_interrupt_enter();
        rt_hw_serial_isr((struct rt_serial_device *)dev, RT_SERIAL_EVENT_RX_IND);
        rt_interrupt_leave();
    }
}
Exemple #4
0
static void s3c_serial_stop_rx(struct uart_port *port)
{
	if (rx_enabled(port)) {
#ifdef UART_HAS_INTMSK
		uart_disable_irq(port, UART_RX_INT);
#else
		disable_irq(RX_IRQ(port));
#endif
		rx_enabled(port) = 0;
	}
}
Exemple #5
0
static void s3c_serial_stop_tx(struct uart_port *port)
{
	if (tx_enabled(port)) {
#ifdef UART_HAS_INTMSK
		uart_disable_irq(port, UART_TX_INT);
#else
		disable_irq(TX_IRQ(port));
#endif
		tx_enabled(port) = 0;
		if (port->flags & UPF_CONS_FLOW)
			s3c_serial_rx_enable(port);
	}
}
Exemple #6
0
static rt_err_t fh_uart_control(struct rt_serial_device *serial,
                                int cmd, void *arg)
{
    struct fh_uart* uart;

    RT_ASSERT(serial != RT_NULL);
    uart = (struct fh_uart *)serial->parent.user_data;

    switch (cmd)
    {
    case RT_DEVICE_CTRL_CLR_INT:
        /* disable rx irq */
        rt_hw_interrupt_mask(uart->irq);
        uart_disable_irq(uart->uart_port,UART_IER_ERBFI);
        break;
    case RT_DEVICE_CTRL_SET_INT:
        /* enable rx irq */
        rt_hw_interrupt_umask(uart->irq);
        uart_enable_irq(uart->uart_port,UART_IER_ERBFI);
        break;
    }

    return RT_EOK;
}
Exemple #7
0
/**
* UART device in RT-Thread
*/
static rt_err_t fh_uart_configure(struct rt_serial_device *serial,
                                  struct serial_configure *cfg)
{
    int div;
    enum data_bits data_mode;
    enum stop_bits stop_mode;
    enum parity parity_mode;
    struct fh_uart *uart;

    RT_ASSERT(serial != RT_NULL);
    RT_ASSERT(cfg != RT_NULL);
    uart = (struct fh_uart *)serial->parent.user_data;

    switch (cfg->data_bits)
    {
    case DATA_BITS_8:
        data_mode = UART_DATA_BIT8;
        break;
    case DATA_BITS_7:
        data_mode = UART_DATA_BIT7;
        break;
    case DATA_BITS_6:
        data_mode = UART_DATA_BIT6;
        break;
    case DATA_BITS_5:
        data_mode = UART_DATA_BIT5;
        break;
    default:
        data_mode = UART_DATA_BIT8;
        break;
    }

    switch (cfg->stop_bits)
    {
    case STOP_BITS_2:
        stop_mode = UART_STOP_BIT2;
        break;
    case STOP_BITS_1:
    default:
        stop_mode = UART_STOP_BIT1;
        break;
    }

    switch (cfg->parity)
    {
    case PARITY_ODD:
        parity_mode = UART_PARITY_ODD;
        break;
    case PARITY_EVEN:
        parity_mode = UART_PARITY_EVEN;
        break;
    case PARITY_NONE:
    default:
        parity_mode = UART_PARITY_NONE;
        break;
    }

    uart_disable_irq(uart->uart_port, UART_IER_ERBFI);

    uart_configure(uart->uart_port, data_mode,
                   stop_mode, parity_mode,
                   cfg->baud_rate, UART_CLOCK_FREQ);

    uart_enable_irq(uart->uart_port, UART_IER_ERBFI);

    return RT_EOK;
}