вторник, 27 октября 2015 г.

Установка значения GPIO-пина на BBB

Я хочу управлять выходом с пина P8.03. В файле настроек режимов пинов клеммы p8 мы находим соответствующую строчку:

PIN PROC PINCTRL ADDR NAME MODE0 ... MODE7
3 R9 0x018 gpmc_ad6 gpmc_ad6 ... gpio1[6]

   
Его текущее состояние мультиплексирования получаем следующим образом:

cat /sys/kernel/debug/pinctrl/44e10800.pinmux/pins | pager

Вывод:

pin 6 (44e10818.0) 00000031 pinctrl-single


Значение устанавливается в файле am335x-bone-pinmux-emmc.dtsi :

pinmux_emmc_pins { pinctrl-single,pins = <0x80 0x32 0x84 0x32 0x0 0x31 0x4 0x31 0x8 0x31 0xc 0x31 0x10 0x31 0x14 0x31 0x18 0x31 0x1c 0x31>; linux,phandle = <0x2c>; phandle = <0x2c>;}

Значение 0x8 формируется следующим образом (AM335x Sitara Processors
Technical Reference Manual section 9.3.1.50 table 9-60):

Bit10
5Receive EnabledReceive Disabled
4PullupPulldown
3Pullup/down DisabledPullup/down Enabled
2,1,0Mode

В соответствии с таблицей по умолчанию пин P8_03 выставлен в состояние 0x31 (110001). Это режим 1 (MODE1). Пин может записывать (pullup/down enabled) и может читать (receive enabled), изначально находится в состоянии логической единицы (pullup). Установим пин в значение 0x17 (010111), в котором он способен записывать уровень (pullup/down enabled), по умолчанию установлен в единицу (pullup) и работает в режиме 7 (MODE7 - gpio1[6]). Файл device tree с изменениями:

pinmux_emmc_pins {
    pinctrl-single,pins = <0x80 0x32 0x84 0x32 0x0 0x31 0x4 0x31 0x8 0x31 0xc 0x31 0x10 0x31 0x14 0x31 0x18 0x17 0x1c 0x31>;
    linux,phandle = <0x2c>;
    phandle = <0x2c>;
};

Настроим пин GPIO P8_03. Посмотреть текущие пины GPIO можно так:

ls /sys/class/gpio

Вывод:

export gpiochip0 gpiochip32 gpiochip64 gpiochip96 unexport

Порядковый номер пина, соответствующий gpio1[6], получается примерно следующим образом - GPIO1_6 соответствует  (1*32) + 6 = 38. Нужный нам пин gpio38 не присутствует в списке. Для взаимодействия с пином его нужно экспортировать:

cd /sys/class/gpio
echo 38 > export



Теперь список выглядит следующим образом:

export  gpio38  gpiochip0  gpiochip32  gpiochip64  gpiochip96  unexport

Настроим пин:

cd gpio38
ls

Вывод:

active_low  device  direction  edge  power  subsystem  uevent  value

Мы можем настроить параметры пина.

1. Текущее направление передачи (cat direction):

in

Настроим на вывод значения:

echo out > direction
cat direction


Вывод:

out

2. Текущее значение (cat value):

0

Установим значение логической единицы:

echo 1 > value
сat value

Вывод:

1

Соответствие значения value реальности можно проверить с помощью осциллографа.

Источники:

Комментариев нет:

Отправить комментарий