Beispiel #1
0
void dev_pic32_uart_cb (void *opaque)
{
    struct pic32_uart_data *d = (struct pic32_uart_data *) opaque;

    d->output = 0;
    if (d->mode & PIC32_UMODE_ON) {
        /* UART enabled. */
        if ((d->sta & PIC32_USTA_URXEN) && vtty_is_char_avail (d->vtty)) {
            /* Receive data available */
            d->sta |= PIC32_USTA_URXDA;

            /* Activate receive interrupt. */
            d->vm->set_irq (d->vm, d->irq + IRQ_RX);
            vp_mod_timer (d->uart_timer,
                vp_get_clock (rt_clock) + UART_TIME_OUT);
            return;
        }
        if ((d->sta & PIC32_USTA_UTXEN) && (d->output == 0)) {
            /* Activate transmit interrupt. */
            d->output = TRUE;
            d->vm->set_irq (d->vm, d->irq + IRQ_TX);
            vp_mod_timer (d->uart_timer,
                vp_get_clock (rt_clock) + UART_TIME_OUT);
            return;
        }
    }
    vp_mod_timer (d->uart_timer, vp_get_clock (rt_clock) + UART_TIME_OUT);
}
Beispiel #2
0
int dev_pic32_uart_init (vm_instance_t *vm, char *name, unsigned paddr,
    unsigned irq, vtty_t *vtty)
{
    struct pic32_uart_data *d;

    /* allocate the private data structure */
    d = malloc (sizeof (*d));
    if (!d) {
        fprintf (stderr, "PIC32 UART: unable to create device.\n");
        return (-1);
    }
    memset (d, 0, sizeof (*d));
    d->dev = dev_create (name);
    if (!d->dev) {
        free (d);
        return (-1);
    }
    d->dev->priv_data = d;
    d->dev->phys_addr = paddr;
    d->dev->phys_len = UART_REG_SIZE;
    d->dev->flags = VDEVICE_FLAG_NO_MTS_MMAP;
    d->vm = vm;
    (*d).vtty = vtty;
    d->irq = irq;
    vtty->priv_data = d;
    d->dev->handler = dev_pic32_uart_access;
    d->dev->reset_handler = dev_pic32_uart_reset;
    (*d).vtty->read_notifier = pic32_tty_con_input;
    d->uart_timer = vp_new_timer (rt_clock, dev_pic32_uart_cb, d);

    vp_mod_timer (d->uart_timer, vp_get_clock (rt_clock) + UART_TIME_OUT);

    vm_bind_device (vm, d->dev);
    return (0);
}
void dev_jz4740_active_ts(struct jz4740_ts_data *d)
{
   vp_mod_timer(d->ts_timer, vp_get_clock(rt_clock) + TS_TIMEOUT);
}