Example #1
0
void
usbserial_init(void)
{
    // configure usb clock
    enable_pclock(USB_GCLK_ID, 0);
    // configure USBD+ and USBD- pins
    gpio_peripheral('A', 24, 'G', 0);
    gpio_peripheral('A', 25, 'G', 0);
    uint16_t trim = (readl((void*)USB_FUSES_TRIM_ADDR)
                     & USB_FUSES_TRIM_Msk) >> USB_FUSES_TRIM_Pos;
    uint16_t transp = (readl((void*)USB_FUSES_TRANSP_ADDR)
                       & USB_FUSES_TRANSP_Msk) >> USB_FUSES_TRANSP_Pos;
    uint16_t transn = (readl((void*)USB_FUSES_TRANSN_ADDR)
                       & USB_FUSES_TRANSN_Msk) >> USB_FUSES_TRANSN_Pos;
    USB->DEVICE.PADCAL.reg = (USB_PADCAL_TRIM(trim) | USB_PADCAL_TRANSP(transp)
                              | USB_PADCAL_TRANSN(transn));
    // Enable USB in device mode
    USB->DEVICE.CTRLA.reg = USB_CTRLA_ENABLE;
    USB->DEVICE.DESCADD.reg = (uint32_t)usb_desc;
    EP0.EPCFG.reg = USB_DEVICE_EPCFG_EPTYPE0(1) | USB_DEVICE_EPCFG_EPTYPE1(1);
    EP_ACM.EPCFG.reg = USB_DEVICE_EPCFG_EPTYPE1(4);
    USB->DEVICE.CTRLB.reg = 0;
    // enable irqs
    USB->DEVICE.INTENSET.reg = USB_DEVICE_INTENSET_EORST;
    NVIC_SetPriority(USB_IRQn, 1);
    NVIC_EnableIRQ(USB_IRQn);
}
Example #2
0
struct gpio_adc
gpio_adc_setup(uint8_t pin)
{
    // Find pin in adc_pins table
    int chan;
    for (chan=0; ; chan++) {
        if (chan >= ARRAY_SIZE(adc_pins))
            shutdown("Not a valid ADC pin");
        if (adc_pins[chan] == pin)
            break;
    }

    if (!is_enabled_pclock(PCLK_ADC)) {
        // Power up ADC
        enable_pclock(PCLK_ADC);
        uint32_t prescal = DIV_ROUND_UP(CONFIG_CLOCK_FREQ*4, ADC_FREQ_MAX) - 1;
        LPC_ADC->ADCR = adc_status.adcr = (1<<21) | ((prescal & 0xff) << 8);
        LPC_ADC->ADINTEN = 0xff;
        adc_status.chan = ADC_DONE;
        NVIC_SetPriority(ADC_IRQn, 0);
        NVIC_EnableIRQ(ADC_IRQn);
    }

    gpio_peripheral(pin, adc_pin_funcs[chan], 0);

    return (struct gpio_adc){ .chan = chan };
}