Пример кода BMA280 в Zephyr завершается неудачно на device_get_binding - PullRequest
0 голосов
/ 27 января 2020

Я вижу, что у нас есть поддержка BMA280 в zephyrproject/zephyr/drivers/sensor/bma280, но в папке Samples нет образца.

Итак, я попытался создать для него пример проекта.

Создал папку в образцах / датчик / bma280. Скопирован файл CMakeLists.txt из samples / sensor / bme280. Создан файл prj.conf со следующим содержимым:

CONFIG_STDOUT_CONSOLE=y
CONFIG_I2C=y
CONFIG_SENSOR=y
CONFIG_BMA280=y

Создан файл sam_e70_xplained.overlay со следующим содержимым:

&i2c0 {
  bma280@18 {
    label = "bma280";
    compatible = "bosch,bma280";
    #address-cells = <1>;
    #size-cells = <1>;
    reg = <0x18>;
  };
};

Создан sr Папка c и внутри нее main. c со следующим содержимым.

/*
 * Copyright (c) 2012-2014 Wind River Systems, Inc.
 *
 * SPDX-License-Identifier: Apache-2.0
 */

#include <zephyr.h>
#include <device.h>
#include <drivers/sensor.h>

void main(void)
{
    struct device *dev = device_get_binding(CONFIG_BMA280_NAME);
    printk("BMA280 Name:%s\n", CONFIG_BMA280_NAME);
    if (dev == NULL) {
        printk("Could not get BMA280 device\n");
        return;
    }

    printk("dev %p name %s\n", dev, dev->config->name);

    while (1) {
        static struct sensor_value accel_x, accel_y, accel_z;
        sensor_sample_fetch(dev);
        sensor_channel_get(dev, SENSOR_CHAN_ACCEL_X, &accel_x);
        sensor_channel_get(dev, SENSOR_CHAN_ACCEL_Y, &accel_y);
        sensor_channel_get(dev, SENSOR_CHAN_ACCEL_Z, &accel_z);


        printk("x:%u\t y:%u\t z:%u\n", accel_x.val1, accel_y.val1, accel_z.val1);

        k_sleep(K_MSEC(1000));
    }
}

Перепрограммирование программы и просмотр журналов консоли. он не работает с "Could not get BMA280 device" Я сделал глупую ошибку, не могли бы вы помочь мне в этом.

Обновление

Я получил его после вытягивания последний исходный код git и обновление оверлея дерева устройств

&i2c0 {
  bma280@18 {
    label = "bma280";
    compatible = "bosch,bma280";
    #address-cells = <1>;
    #size-cells = <1>;
    reg = <0x18>;
    status = "okay";
    is-bmc150; 
    int1-gpios = <&portb 3 0>;
  };
}

Я хочу использовать механизм прерываний, я не хочу непрерывно запрашивать данные, я добавил int1-gp ios в оверлее, все изменения, которые я должен сделать, чтобы переключиться на прерывание.

...