Прошу прощения за, наверно, простейший вопрос и назойливость.
Так и не смог сам разобраться, как адаптировать пример repairman с использованием mmap на эту плату.
1. Как найти на плате контакты, которые можно использовать как GPIO для управления, например, светодиодами?
2. Как найти соответствующие порты на схеме платы?
3. Как сопоставить конкретный контакт с портом из MCU Programmer's guid и номером в порте?
Если не сложно, можно, написать (или ссылку) пошаговую инструкцию по нахождению/конфигурированию/управлению на примере какого-нибудь одного выхода?
Буду очень благодарен.
P.S. звук видео и сим не использую, хотелось бы ориентироваться на максимальное число доступных выходов.
В принципе, с самим примером относительно понятно.
Допустим, хочу найти все контакты, которыми можно напрямую управлять.
1. Смотрю на плату - не задействованы выходы х8-х12, к которым удобно подключиться.
2. Смотрю на схему. Ищу одинаковые обозначения контактов на выбранном выходе и на процессоре, например MK_168 (как в вашем примере) идёт от процессора напрямую на x8.
3. Где теперь можно посмотреть адреса этого пина?
#define GPIO_BA 0xB8003000
#define GPIOH_DIR *(int*)(mapped_base+0x54)
#define GPIOH_OUT *(int*)(mapped_base+0x58)
GPIOH_DIR = GPIOH_DIR | 0x02; // use pin->irq1
GPIOH_OUT = GPIOH_OUT & 0xfffffffd; // pin->low
GPIOH_OUT = GPIOH_OUT | 0x02; // pin->high
у вас на диске д.б. даташит на проц, посмотрите там раздел "GPIO shared pin desc", там расписаны пины, какие можно использовать..
увы с графконтроллера (X8) использовать нельзя..
и еще, пины этого проца малотоковые, можно легко спалить, в отличие от того же Атмела..
смотрим X12, допустим 27 ножка разъема - это MK_4, подводится к АРМу на 4 контакт с именем SDA0. т.е. это часть аппаратной шины i2c0..
теперь смотрим в даташит - это по совместительству GPIOG[1]
далее, смотрим адрес начала блока регистров GPIO = 0xB8003000
теперь идем в раздел 7.16 описание работы GPIO
там в карте адресов находим относящиеся к GPIOG типа
DIR
DATAOUT
DATAIN
ну и все, остальное как в любой однокристалке, позиция бита в регистре однозначно определяет с каким пином АРМа хотим работать..
т.е. gpiog[1] - это справа налево второй разряд..
если даташитов нет, то могу выложить: даташит и доку как программировать (хотя она и бестолковая)
Ваш пример удалось успешно запустить на плате.
Вот эти константы понял, откуда и зачем:
#define GPIO_BA 0xB8003000
#define GPIOH_DIR *(int*)(mapped_base+0x54)
#define GPIOH_OUT *(int*)(mapped_base+0x58)
GPIOH_DIR = GPIOH_DIR | 0x02; // use pin->irq1
Остался один вопрос, как вы определили, что выход №168
а) соответствует порту H,
б) управляется вторым битом с конца?
Где-то в даташите есть такие подробности или методом тыка подобрали?
ну.. метод тыка я пробовал при попытках запустить аппаратный курсор в этом АРМе и графический ускоритель.. нереально..
в случае с этим пином все просто при наличие даташита..
итак, N168 разъем X12 ножка 22 - идет на АРМ пин 168 (см схему)
это nIRQ1 - т.е. основная функция входа обслуживание внешнего прерывания (одного из 3)
опять смотрим даташит раздел 7.16, где сказано, что
GPIOH[2..0] - это nIRQ[2..0], дальше надо? :)
кстати, сколько ног надо и какая скорострельность? если посмотреть на схему кита, то число свободных для развлечений пинов крайне мало. еще чуть можно наскрести подпаявшись проводками в определенные точки платы (см схему)
если требуется что-то монументальное и неспешное, то можно поставить I2C-GPIO расширители и ни в чем себе не отказывать..
либо для ускорения работы думать над SPI интерфейсом и внешними сдвиговыми регистрами..
Подскажите, как называется у вас этот документ. Я пересмотрел все документы с диска, у меня нет нигде раздела 7.16. Или, может быть, проще вам выложить ваши версии документов где-нибудь?
В итоге хотелось бы получить подвижного робота с usb-web камерой, usb-wifi управлением, и, может быть, каким-то "полезным" прибором на борту.
Похоже, что управление механизмами и "полезным" прибором надо выносить на платы расширения. Я в сами платы расширения пока не вникал. Создам новую тему по этому вопросу.
понятно, вот тут будет изрядно проблем, т.к. последнее стабильное ядро (по моим данным) 2.6.17.14 и запустить на нем что-нить из современного железа достаточно напряжно (а то и невозможно)..
впрочем, может не так все мрачно и запилили что-нить поновее..