Пример #1
0
esp_err_t spi_init(spi_host_t host, spi_config_t *config)
{
    SPI_CHECK(host < SPI_NUM_MAX, "host num error", ESP_ERR_INVALID_ARG);
    SPI_CHECK(host > CSPI_HOST, "CSPI_HOST can't support now", ESP_FAIL);
    SPI_CHECK(NULL == spi_object[host], "spi has been initialized", ESP_FAIL);

    spi_object[host] = (spi_object_t *)malloc(sizeof(spi_object_t));
    SPI_CHECK(spi_object[host], "malloc fail", ESP_ERR_NO_MEM);
    spi_object[host]->trans_mux = xSemaphoreCreateMutex();
    if (NULL == spi_object[host]->trans_mux) {
        spi_deinit(host);
        SPI_CHECK(false, "Semaphore create fail", ESP_ERR_NO_MEM);
    }
    uint16_t dummy_bitlen = 0;
    
    spi_set_event_callback(host, &config->event_cb);
    spi_set_mode(host, &config->mode);
    spi_set_interface(host, &config->interface);
    spi_set_clk_div(host, &config->clk_div);
    spi_set_dummy(host, &dummy_bitlen);
    spi_set_intr_enable(host, &config->intr_enable);
    spi_intr_register(spi_intr, NULL);
    spi_intr_enable();

    if (spi_object[host]->event_cb) {
        spi_object[host]->event_cb(SPI_INIT_EVENT, NULL);
    }

    return ESP_OK;
}
Пример #2
0
Файл: spi.c Проект: z80/bt-board
int spi_init(void)
{
    LOG(DEBUG, "spi_nrefs=%d, spi_dev_open=%d", spi_nrefs, spi_dev_open);

    spi_nrefs++;

    if (spi_nrefs > 1) {
        LOG(WARN, "Superfluos call to spi_init()");
        return 0;
    }

    LOG(ALL, "csr-spi-ftdi " VERSION ", git rev " GIT_REVISION "\n");

    if (ftdi_init(&ftdic) < 0) {
        SPI_ERR("FTDI: init failed");
        spi_nrefs = 0;
        return -1;
    }

    if (spi_enumerate_ports() < 0) {
        spi_deinit();
        return -1;
    }

    return 0;
}