V2r pins

Материал из virt2real wiki
Перейти к: навигация, поиск

Описание команд драйвера /dev/v2r_pins

Содержание

Общая информация

Драйвер предназначен для управления функциями пинов Виртурилки. Установка режима вход/выход, установка значения, установка режима PWM, управление каналами PWM.

Драйвер представляет собой файл устройства /dev/v2r_pins. Так же драйвер создаёт файлы в PROC_FS, /proc/v2r_pins/

Драйвер имеет два режима записи - текстовый и бинарный. Текстовый, в основном, используется для управления драйвером из консоли. Бинарный - из скриптов или программ на любом языке программирования. Так же имеется два режима вывода - текстовый и бинарный.

Для чтения состояния пинов можно использовать группу. Группа - это набор пинов, состояние которых будет отображаться при чтении драйвера. По-умолчанию, в группу входят все имеющиеся пины.


Команды драйвера /dev/v2r_pins

Установка режима вход/выход и запись значений

Текстовый формат

set con <num> <direction> <value>
Параметр Возможные значения Назначение
num 1 - 86 Номер пина
direction input, output направление, input - вход, output - выход
value 0 - 1 значение 0 или 1, используется только при direction=output

Например, установить пин CON15 как выход и записать туда 1

echo "set con 15 output 1" > /dev/v2r_pins

Бинарный формат

Надо записать в файл /dev/v2r_pins три байта

Байт Возможные значения Назначение
0 1 id команды
1 1 - 86 номер пина
2 0-3 бит 0 - направление (0 - input, 1 - output), бит 1 - состояние пина

Например, установить пин CON15 как выход и записать туда 1

echo -e "\x1\x0F\x3" > /dev/v2r_pins

Например, установить пин CON15 как вход

echo -e "\x1\x0F\x0" > /dev/v2r_pins


Установка пина в режим PWM

Примечание: соответствие пинов и каналов PWM см. в схеме Схема компонентов virt2real 1.1

Текстовый формат

set con <num> <pwmchannel>
Параметр Возможные значения Назначение
num 1 - 86 номер пина
pwmchannel pwm0, pwm1, pwm2, pwm3 канал PWM


Например, установить пин CON43 в режим PWM0

echo "set con 43 pwm0" > /dev/v2r_pins

Бинарный формат

Надо записать в файл /dev/v2r_pins два байта

Байт Возможные значения Назначение
0 6 id команды
1 1 - 86 номер пина

Канал PWM будет автоматически выбран тот, который соответствует указанному пину.

Например, установить пин CON43 в режим PWM. Канал (PWM0) определится автоматически.

echo -e "\x6\x2B" > /dev/v2r_pins

Примечание: в драйвере имеется ошибка - если указать номер пина, у которого нет функции PWM, драйвер будет неприлично ругаться в консоль. Когда будет исправлено, этот текст убрать.


Установка параметров PWM

Текстовый формат

set pwm <channel> <duty> <period> [<repeat>]
Параметр Возможные значения Назначение
channel 0 - 3 Номер канала PWM
duty 0 - period duty, длительность высокого уровня сигнала
period 0 - 1073741824 период следования импульсов
repeat 0 - 1073741824 (необязательный параметр) количество импульсов. Если = 0 - повторять импульсы бесконечно.

Например, установить PWM0 на генерацию меандра с частотой 20кГц

echo "set pwm 0 595 1190" > /dev/v2r_pins

Например, установить PWM0 на генерацию меандра с частотой 20кГц, всего 255 импульсов

echo "set pwm 0 595 1190 255" > /dev/v2r_pins

Бинарный формат

Стандартный режим

Надо записать в файл /dev/v2r_pins шесть байт

Дополнительно можно записать ещё два байта (байт 6 и байт 7), задающие параметр repeat - т.е. количество повторений импульсов. Если repeat равен 0 - импульсы PWM будут генерироваться бесконечно.

Байт Возможные значения Назначение
0 7 id команды
1 0 - 3 канал PWM
2 0 - 255 младший байт параметра duty
3 0 - 255 старший байт параметра duty
4 0 - 255 младший байт параметра period
5 0 - 255 старший байт параметра period
6 0 - 255 младший байт параметра repeat
7 0 - 255 старший байт параметра repeat


Примечание: duty и period тут ограничено двумя байтами, т.е. максимальное значение = 65535. Ограничение из-за того что бОльшее значение на практике не используется. Для бОльших значений можно использовать текстовый режим команды или бинарный расширенный режим.

Например, установить PWM0 на генерацию меандра с частотой 20кГц

echo -e "\x7\x0\x53\x2\xA6\x4" > /dev/v2r_pins

Например, установить PWM0 на генерацию меандра с частотой 20кГц, всего 255 импульсов

echo -e "\x7\x0\x53\x2\xA6\x4\xff\x0" > /dev/v2r_pins
Расширенный режим

То же что и стандартный режим, но параметры занимают по 4 байта.

Надо записать в файл /dev/v2r_pins десять байт

Дополнительно можно записать ещё четыре байта (байты 10-13), задающие параметр repeat - т.е. количество повторений импульсов. Если repeat равен 0 - импульсы PWM будут генерироваться бесконечно.

Байт Возможные значения Назначение
0 8 id команды
1 0 - 3 канал PWM
2-5 0 - 255 байты параметра duty, первый байт - младший
6-9 0 - 255 байты параметра period, первый байт - младший
10-13 0 - 255 байты параметра repeat, первый байт - младший

Например, установить PWM0 на генерацию меандра с частотой 20кГц

echo -e "\x8\x0\x53\x2\x0\x0\xA6\x4\x0\x0" > /dev/v2r_pins

Тонкая настройка PWM

Описание регистра

Осуществляет установку регистра CFG любого канала PWM.

Подробнее - http://forum.virt2real.ru/files/documentation/dm365/sprufh6.pdf

Описание битов регистра CFG:

Бит Название Описание
31-18 Reserved Зарезервировано
17 OPST Текущее состояние канала PWM
= 0 - Режим бездействия
= 1 - Активный режим
16 CURLEV Состояние сигнала PWM
= 0 - Low
= 1 - High
15-7 Reserver Зарезервировано
6 INTEN Настройка прерывания
= 0 - прерывание отключено
= 1 - прерывание включено
5 INACTOUT Выходной сигнал при неактивном состоянии канала PWM
= 0 - Low
= 1 - High
4 P1OUT Начальный уровень сигнала (в состоянии duty)
= 0 - Low
= 1 - High
3-2 EVTRIG Триггер событий
= 0 - отключено
= 1 - Positive edge triggered
= 2 - Negative edge triggered
= 3 - зарезервировано
1-0 MODE Режим функционирования PWM
= 0 - PWM отключён
= 1 - One-shot режим (генерация repeat количества импульсов)
= 2 - Continuous режим (бесконечный цикл генерации импульсов)
= 3 - зарезервировано
Изменение значения

Для изменения состояния регистра CFG для любого из четырёх каналов PWM необходимо воспользоваться командой

cfg pwm <pwm_ch> <cfg_and> <cfg_or>
Параметр Значение Описание
pwm_ch 0-3 Канал PWM
cfg_and 0 - ffffff значение AND
cfg_or 0 - ffffff значение OR

После отправки данной команды в драйвер /dev/v2r_pins с текущим значением регистра CFG сначала будет побитово выполнена операция AND с параметром CFG_AND, затем полученное значение будет побитово OR с параметром CFG_OR.

Например, ...

... добавить пример

Очистка группы

Текстовый формат

group clear

Например, удалить все пины из группы

echo "group clear" > /dev/v2r_pins

Бинарный формат

Байт Возможные значения Назначение
0 2 id команды

Например, удалить все пины из группы

echo -e "\x2" > /dev/v2r_pins


Добавить все пины в группу

Текстовый формат

group init

Например, добавить все пины в группу

echo "group init" > /dev/v2r_pins

Бинарный формат

Байт Возможные значения Назначение
0 4 id команды

Например, добавить все пины в группу

echo -e "\x4" > /dev/v2r_pins


Добавить нужные пины в группу

Текстовый формат

group add con <num1> [<num2> <num3> ... ]
Параметр Возможные значения Назначение
num1 1 - 86 номер пина
num2 1 - 86 номер пина
num3 1 - 86 номер пина
num... 1 - 86 номер пина

Например, добавить пины 26, 27, 28 в группу

echo "group add con 26 27 28" > /dev/v2r_pins

Бинарный формат

Байт Возможные значения Назначение
0 3 id команды
1 1-86 номер пина
... 1-86 номер пина

Например, добавить пины 26, 27 и 28 в группу

echo -e "\x3\x1a\x1b\x1c" > /dev/v2r_pins


Установить режим вывода драйвера

Текстовый формат

output <mode>
Параметр Возможные значения Назначение
mode text, bin режим вывода, текстовый или бинарный

Например, установить бинарный режим вывода

echo "output bin" > /dev/v2r_pins


Бинарный формат

Байт Возможные значения Назначение
0 5 id команды
1 0 - 1 режим вывода, 0 - текстовый, 1 - бинарный

Например, установить бинарный режим вывода

echo -e "\x5\x1" > /dev/v2r_pins


Файлы драйвера в /proc/v2r_pins

Как уже было сказано, драйвер создаёт файлы в PROC_FS, которые работают только в текстовом режиме и служат для упрощённой установки состояния пинов и для мониторинга текущего состояния PWM.

# ls
10  14  18  26  30  34  38  42  55  59  63  76  80  84    pwm1
11  15  19  27  31  35  39  43  56  60  64  77  81  85    pwm2
12  16  20  28  32  36  40  44  57  61  65  78  82  all   pwm3
13  17  25  29  33  37  41  54  58  62  75  79  83  pwm0


Файлы пинов

Файлы 10 - 83 соответствуют пинам CON, имеющим возможность установки/чтения состояния.

Например, прочитать состояние пина CON10

# cat 10
0

Например, установить состояние пина CON10 в 1

# echo 1 > 10

Можно и в бинарном формате

# echo -e "\x1" > 10


Файл "all"

Файл "all" служит для чтения состояние всех пинов, независимо от настроек режима вывода и содержимого группы пинов драйвера. Вывод всегда только в текстовом формате и выводятся состояния всех пинов. Запись в файл недоступна (т.е. read-only).

Например, получить состояния всех пинов

# cat all
000000000010000000000000000000000000000000000000000000000000000000000000000000000000000

Файлы "pwm"

Файлы pwm0, pwm1, pwm2 и pwm3 служат для получения информации о текущих настройках каналов PWM. Файлы только для чтения. Вывод всегда в текстовом формате.

Вывод представляет из себя набор параметров, разделённых пробелами.

Значения параметров:

Номер параметра Возможные значения Назначение
1 0-3 номер канала PWM
2 0 - period параметр duty
3 0 - 1073741824 параметр period
4 0 - 1073741824 параметр repeat
5 0 - FFFFFFFF параметр cfg
6 1 - 86 номер пина, который настроен в режиме указанного PWM
... 1 - 86 номер пина, который настроен в режиме указанного PWM

Например, узнать состояние PWM0

cat pwm0
0 595 1190 0 20012 40 43

Первый параметр - номер канала PWM, т.е. PWM0

Второй параметр - текущее значение duty, т.е. 595

Третий параметр - текущее значение period, т.е. 1190

Четвёртый параметр - текущее значение регистра repeat, т.е. 0 (бесконечный цикл)

Пятый параметр - текущее значение регистра cfg (в шестнадцатеричном виде)

Шестой и седьмой параметры - CON40 и CON43, которые сейчас работают в режиме PWM0