Чипсет Intel-Программирование GPIO
Из спецификации я знал следующую информацию:
JGPIO1 PIN# :10
SoC GPIO # : 71
USE select: IO 0x532[7] ( 0 = native function, 1 = GPIO )
IO select: IO 0x536[7] (0 = output, 1 = input )
Level: IO 0x540[7] ( 0 = low, 1= high )
В этом случае я хочу запрограммировать GPIO pin # 10. Есть ли какой-нибудь пример или образец кода, на который я могу сослаться ?
Я могу сделать это thorugh RW-все [1]. Однако это происходит в Windows.
Я хочу сделать это в C и в среде linux.
Пожалуйста, посоветуйте.
===============================================================
Например, если я хочу установить
7-й бит к 1 при 0x532
7-й бит в 0 при 0x536
7-й бит к 1 при 0x540.
1 ответ:
В пространстве пользователей Linux типичным методом доступа к GPIOs является использование псевдофайловой системы /sys (она же sysfs). Это предлагает несколько портативный интерфейс, который пытается свести к минимуму аппаратные зависимости и избежать конфликтов с драйверами устройств.
Чтобы определить номера GPIO, к которым вы хотите получить доступ на своей плате,вам нужно будет обратиться к документации SoC. Имена каталогов в /sys / class / gpio / должны быть идентифицированы с их аппаратным регистром сверстники. Эти имена каталогов будут иметь вид gpiochip N, где N-базовый номер GPIO в этом регистре. Файл gpiochipN / label должен помочь идентифицировать регистр, например, по его адресу (памяти или Порту).
Обратите внимание, что N не может начинаться с 0. Система Intel BayTrail может иметь gpiochip82 в качестве первого каталога, поэтому наименьший номер GPIO будет равен 82. Битовый номер регистра должен быть добавлен к базовому номеру для получения GPIO число.
СМ. Documentation/gpio/sysfs.txt для официальной документации.
Я могу сделать это thorugh RW-все 1. Однако это происходит в Windows.
Подобная программа, вероятно, может быть написана для выполнения под Linux. Однако программы Linux (в отличие от Windows, которая ориентирована на x86) должны быть переносимы на другие архитектуры, поэтому такую программу, которая должна знать детали оборудования низкого уровня, почти невозможно написать/поддерживать. Один цель драйверов устройств-изолировать / модулировать такие детали HW, и такая программа пытается обойти эти драйверы!
Кроме того, использование такой программы может сделать систему нестабильной или неисправной. Возиться с памятью и / или регистрами устройств небезопасно в работающей системе. FWIW я написал утилиту, которая сообщает конфигурацию контактов для одного конкретного SoC, но которая только читает регистры и никогда не изменяет никаких настроек.
Обратите внимание, что большинство SoC в документации (так же как и в Linux) управление/конфигурация pin рассматривается как отдельная (но тесно связанная, если не перекрывающаяся) подсистема GPIOs. Управление Pin / конфигурация обычно включает:
- мультиплексирование вывода для различных периферийных устройств / функциональных возможностей,
- направленность (то есть вход или выход),
- подключение тянущих или опускающих резисторов,
- фильтрация входных данных (т. е. де-Глюк),
- выходной привод (например, открытый слив) и
- прерывание контроль.
Подсистема GPIO обычно обрабатывает:
- направленность,
- состояние контакта и
- управление прерываниями.
См. Documentation/pinctrl.txt и документация/gpio/gpio.txt .
Comments