Ник:
Пароль:

Контакты

E-mail: info@starterkit.ru
тел.: +7 922 680-21-73
тел.: +7 922 680-21-74
Телеграм: t.me/starterkit_ru
Партнеры:
otladka.com.ua - г.Киев

Способы оплаты

User Info


Добро пожаловать,
Guest

Регистрация или входРегистрация или вход
Потеряли пароль?Потеряли пароль?

Ник:
Пароль:

ПользователейПользователей:2
Поисковых ботовПоисковых ботов:2
ГостейГостей:1

ОбновитьПодробнееВсегоВсего:5
Форум » starterkit.ru » Отладочные платы » SK-MNUC950
Вопрос по настройке портов ввода/вывода
Ilya89
Добавлено 09.05.2010 12:49 Редактировалось 01.06.2013 22:43
0
Сообщение: 1
Ilya89
0

Пункты: 599
Регистрация: 09.05.2010
Может быть, кто-то конфигурировал порты ввода/вывода?
В инструкциях от nuvoton есть примеры, которые используют функции inpw outpw.
Эта команда должна сконфигурировать порт С
outpw(0xB000000C, inpw(0xB000000C) & 0xFFFFFFF3);
Но при загрузке модуля в систему он говорит, что не знает таких символов.
Если использовать библиотеку asm/io.h и функции inw() outw(), или писать на этот адрес через указатель, то:
unable to handle request at virtual address b000000c

Кто-нибудь уже делал что-то подобное? Или, может быть, кто-то знает другой способ сконфигурировать порты?
Спуститься к концу Подняться к началу
Персональная информация
Jury093
Добавлено 09.05.2010 13:50 Редактировалось 09.05.2010 14:09 Сообщение: 2
Jury093
4.5

Пункты: 54233
Регистрация: 25.05.2009
Пол: Мужчина
Из: Санкт-Петербург
я бы посоветовал пробовать не через INPW/OUTPW работать, а почитать местный ФАК и освоить работу через MMAP - там есть отличный пример
на мой взгляд, так более удобно начинать работу с регистрами и управлением пинами
я немного работал в этом направление, правда писал софтинки прямо на платах (9260 и NUC950) - никаких проблем не возникало
технология компиляции кросскомпиллером на старшем брате и перенос бинарника на плату на форуме есть

update вот для 9260, вполне работает на nuc950
[url=http://wiki.starterkit.ru/чтение-запись_физических_адресов_в_linux]линк на wiki[/url]

На любой вопрос есть любой ответ.
Спуститься к концу Подняться к началу
Персональная информация
Ilya89
Добавлено 10.05.2010 14:02 Сообщение: 3
Ilya89
0

Пункты: 599
Регистрация: 09.05.2010
Попробовал сделать как в предложенном примере. Даёт работать только с пользовательской памятью. Для адресов, указанных как регистры для настройки портов, выдаёт ошибку. Точно не надо использовать эти функции внутри модуля ядра?
Спуститься к концу Подняться к началу
Персональная информация
Jury093
Добавлено 10.05.2010 14:50 Сообщение: 4
Jury093
4.5

Пункты: 54233
Регистрация: 25.05.2009
Пол: Мужчина
Из: Санкт-Петербург
а-а.. в вашем вопросе не было уточнения - где хотим работать
- из программы линукса
- из драйвера ядра
видимо интересует второй вариант

например в драйвере фреймбуфера вполне работают такие операторы:

Код
//jury
#ifdef CONFIG_LQ064_640x480 //(typical clock 25MHz)
printk("clksel=%08X clkdiv=%08X\n",inl(REG_CLKSEL),inl(REG_CLKDIV));
outl( inl(REG_CLKSEL) & 0x1FF3F, REG_CLKSEL); //clock from PLL0(200MHz)
outl( inl(REG_CLKDIV) | 0x7000, REG_CLKDIV); //div 7+1, run 25Mhz
printk("clksel=%08X clkdiv=%08X\n",inl(REG_CLKSEL),inl(REG_CLKDIV));
#endif

определение inl/outl надо смотреть в подключаемых хидерах

ЗЫ я сходу не нашел своих сорцов, как рулить пинами из драйвера.. если не пойдет, то гляну завтра в архивах..

На любой вопрос есть любой ответ.
Спуститься к концу Подняться к началу
Персональная информация
Jury093
Добавлено 11.05.2010 18:13 Редактировалось 11.05.2010 18:14 Сообщение: 5
Jury093
4.5

Пункты: 54233
Регистрация: 25.05.2009
Пол: Мужчина
Из: Санкт-Петербург
можно еще вот так управлять пинами из драйвера - на мой взгляд достаточно безопасно и наглядно, но немного тормозно..
это куски из действующего драйвера, лишние хидеры лучше убрать
Код
#include <linux/input.h>
#include <linux/module.h>
#include <linux/module.h>
#include <linux/init.h>
#include <asm/io.h>
#include <asm/delay.h>
#include <linux/timer.h>
#include <linux/jiffies.h>
#include <asm/arch/nuc900_gpio.h>


инициализируем нужные пины, соответствие смотрим в DS:
Код
int ret;
printk("Init ts ads7843 device\n");
ret = nuc900_gpio_configure(GPIO_GROUP_G, 2);
printk("ret=%d\n",ret);
ret = nuc900_gpio_configure(GPIO_GROUP_G, 3);
printk("ret=%d\n",ret);
ret = nuc900_gpio_configure(GPIO_GROUP_H, 0);
printk("ret=%d\n",ret);
ret = nuc900_gpio_configure(GPIO_GROUP_H, 1);
printk("ret=%d\n",ret);
nuc900_gpio_set_input(GPIO_GROUP_G, 2); //DOUT
nuc900_gpio_set_output(GPIO_GROUP_G, 3); //CLK
nuc900_gpio_set_output(GPIO_GROUP_H, 0); //DIN
nuc900_gpio_set_output(GPIO_GROUP_H, 1); //CS

и дрыгаем ими :)
Код
nuc900_gpio_set(GPIO_GROUP_G, 3, 0); // clk->0
nuc900_gpio_set(GPIO_GROUP_H, 0, 0); // data->0
nuc900_gpio_set(GPIO_GROUP_H, 0, 1); // data->1
nuc900_gpio_set(GPIO_GROUP_H, 1, 0); // cs->0

или считываем состояние на входе пина
Код
data|=nuc900_gpio_get(GPIO_GROUP_G, 2); //gpio_get_value(TS_DOUT);


перед попыткой занятия нужного пина желательно проанализировать "в какой группе он состоит" "не отвалится ли поддержка периферии при использование пина"

На любой вопрос есть любой ответ.
Спуститься к концу Подняться к началу
Персональная информация
Ilya89
Добавлено 18.05.2010 18:13 Сообщение: 6
Ilya89
0

Пункты: 599
Регистрация: 09.05.2010
А где можно взять библиотеку #include <asm/arch/nuc900_gpio.h> ? Я посмотрел у себя, в ядре на диске с платой нет такойго файла. Можно где-то скачать?
Спуститься к концу Подняться к началу
Персональная информация
Ilya89
Добавлено 18.05.2010 18:45 Сообщение: 7
Ilya89
0

Пункты: 599
Регистрация: 09.05.2010
Или, может быть, исходники ядра со всеми включаемыми файлами.. :)
Спуститься к концу Подняться к началу
Персональная информация
Hermes
Добавлено 18.05.2010 20:45 Сообщение: 8
Hermes
5

Пункты: 3383
Регистрация: 02.04.2010
лежит в папке /kernel/include/arch/arm/nuc900/
это на память. приду домой скажу точно где лежит
Спуститься к концу Подняться к началу
Персональная информация
Jury093
Добавлено 19.05.2010 10:24 Сообщение: 9
Jury093
4.5

Пункты: 54233
Регистрация: 25.05.2009
Пол: Мужчина
Из: Санкт-Петербург
Цитата
Или, может быть, исходники ядра со всеми включаемыми файлами.. :)

сорцы должны лежать примерно тут
/home/user/src/nuc950/nuc950bsp/linux.2.6.17.14

На любой вопрос есть любой ответ.
Спуститься к концу Подняться к началу
Персональная информация
Ilya89
Добавлено 23.05.2010 11:29 Сообщение: 10
Ilya89
0

Пункты: 599
Регистрация: 09.05.2010
Спасибо, функции работают. :) Ещё вопрос, хотя, он. наверно, к теме не относиться. Какую функцию использовать для задержки в милисекундах? (до нескольких секунд) и в какой библиотеке?
Спуститься к концу Подняться к началу
Персональная информация
Форум » starterkit.ru » Отладочные платы » SK-MNUC950