Я вижу, что у нас есть поддержка 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 в оверлее, все изменения, которые я должен сделать, чтобы переключиться на прерывание.