Перейти к содержанию
    

Работа с пинами.

Сначала инициализация

struct gpiod_chip *chip;
struct gpiod_line *line;

int rv, value;

void GPIO_Init(const char *filename)
{
    chip = gpiod_chip_open(filename);
    if (!chip)
    {
        printf("GPIO Init Failed\n");
    }
    else
    {
       printf("GPIO Init Success\n");
    }

    line = gpiod_chip_get_line(chip, 23);
    if (!line)
    {
        printf("Line 23 failed\n");
    }
    rv = gpiod_line_request_input(line, "can_int");
    if (rv)
    {
       printf("Failed to configure line 23\n");
    }

    line = gpiod_chip_get_line(chip, 17);
    if (!line)
    {
        printf("Line 17 failed\n");
    }
    rv = gpiod_line_request_output(line, "out17", 0);
    if (rv)
    {
       printf("Failed to configure line 17\n");
    }
}

Чтение запись

void GPIO_SetPin(int pin_num, int pin_val)
{
    line = gpiod_chip_get_line(chip, pin_num);
    gpiod_line_set_value(line, pin_val);
}

int GPIO_GetPin(int pin_num)
{
    int pin_val;

    line = gpiod_chip_get_line(chip, pin_num);

    pin_val = gpiod_line_get_value(line);

    return pin_val;
}

в main.cpp (GPIO17 соединен с GPIO23)

 GPIO_Init("/dev/gpiochip0");

GPIO_SetPin(17, 1);
pin_val = GPIO_GetPin(23);

но GPIO17 не выставляется в 1 и pin_val возвращает -1.

где я ошибся?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

вот это 100% работает на CM3+:

int gpioTest()
{
    gpiod_chip *chip = gpiod_chip_open("/dev/gpiochip0");
    if(!chip) {
        perror("gpiod_chip_open");
        return 1;
    }
    gpiod_line *gpio6 = gpiod_chip_get_line(chip, 6);
    if(!gpio6) {
        perror("gpiod_chip_get_line(5)");
        return 1;
    }

    int res = gpiod_line_request_output(gpio6, "gpio6", 1);
    if(res < 0) {
        perror("gpiod_line_request_output(1)");
        return 1;
    }

    for(;;) {
        //int res = gpiod_line_set_value(gpio5, 1);
        res = gpiod_line_set_value(gpio6, 0);
        if(res < 0) {
            perror("gpiod_line_set_value(0)");
            return 1;
        }
        usleep(10000);
        res = gpiod_line_set_value(gpio6, 1);
        if(res < 0) {
            perror("gpiod_line_set_value(1)");
            return 1;
        }
        usleep(10000);
    }

    gpiod_chip_close(chip);

    return 0;
}

 

Изменено пользователем gridinp

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

9 hours ago, gridinp said:

вот это 100% работает на CM3+:

 

спасибо. я добавил

printf ("chip %p\n", chip);
printf ("line %p\n", line);

и я вижу

chip 0x3078c

line 0x30790

а должно быть

0x2f78c

0x2f790

11 hours ago, Obam said:

Может там, где не знают про либу WiringPi?

это для слабаков. :) а нам нужен генерик метод. я не уверен что все время буду сидеть на малине.

Изменено пользователем jenya7

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 hour ago, jenya7 said:

а должно быть

0x2f78c

0x2f790

но, почему? это же, наверное дескрипторы системные? или я что-то не понимаю?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

38 minutes ago, gridinp said:

но, почему? это же, наверное дескрипторы системные? или я что-то не понимаю?

у меня старая малина 20-ти пиновая. а там адрес насколько я помню 0x2f78c .

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

44 minutes ago, jenya7 said:

у меня старая малина 20-ти пиновая. а там адрес насколько я помню 0x2f78c .

так вы, ожидаете, что это адрес BCM2837? Нет это код возвращаемый системой. Кстати на что я нарывался, если обратится к BCM28XX напрямую, например  библиотекой bcm2835, то драйвера перестают нормально работать до перезагрузки

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...