Ник:
Пароль:

Контакты

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

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

Ник:
Пароль:

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

ОбновитьПодробнееВсегоВсего:7
Форум » starterkit.ru » Отладочные платы » SK-AT91SAM9G45(M10)-XC6SLX
Внешний RTC
alexvm
Добавлено 27.11.2011 19:44 Сообщение: 11
alexvm
0

Пункты: 2274
Регистрация: 22.05.2009
Спасибо. Как я понял, обработкой сигнала 1PPS будет заниматься драйвер устройства PPS, он и PPSAPI добавлены в ядро, надо только указать, какой пин анализировать. Поискал в инете, но инфы по тому, как связать /dev/pps0 и конкретный пин, не нашёл... Задача несколько эволюционировала - теперь хочу поставить сервер ntpd с коррекцией времени от приемника GPS по протоколу NMEA с использованием сигнала PPS. Для ntpd и надо устройство /dev/pps0.
Спуститься к концу Подняться к началу
Персональная информация
Jury093
Добавлено 27.11.2011 19:58 Сообщение: 12
Jury093
4.5

Пункты: 54233
Регистрация: 25.05.2009
Пол: Мужчина
Из: Санкт-Петербург
хм.. задача становится интереснее, более того, мне в недалеком будущем могут потребоваться наработки вокруг PPS и GPS
к сожалению, сейчас занят совершенно другой тематикой..
имеет смысл заглянуть в /Documentation/pps
покопать потроха драйвера PPS (если он существует)

На любой вопрос есть любой ответ.
Спуститься к концу Подняться к началу
Персональная информация
alexvm
Добавлено 27.11.2011 20:27 Редактировалось 27.11.2011 20:30 Сообщение: 13
alexvm
0

Пункты: 2274
Регистрация: 22.05.2009
На самом деле, ещё интереснее придумать, что делать, если надо хранить шкалу времени с точностью, которую обеспечивает GPS, в отсутствии самого GPS (временного)... Хотя сейчас идёт движуха в сторону Глонасса...
Спуститься к концу Подняться к началу
Персональная информация
sasamy
Добавлено 27.11.2011 21:03 Сообщение: 14
sasamy
4.70

Пункты: 77333
Регистрация: 14.08.2009
Цитата
Спасибо. Как я понял, обработкой сигнала 1PPS будет заниматься драйвер устройства PPS, он и PPSAPI добавлены в ядро, надо только указать, какой пин анализировать.


Какое ядро у вас ? Я смотрю клиент pps-gpio появился буквально в последнем релизе, грепните исходники по имени структуры pps_gpio_platform_data, возможно в какой-то плате найдется пример. Судя по коду pps-gpio.c нужно зарегистрировать platform_device и передать эту структуру - указать пин gpio и название, драйвер сам его переключит на вход и навесит irq.
Спуститься к концу Подняться к началу
Персональная информация
alexvm
Добавлено 27.11.2011 21:09 Редактировалось 27.11.2011 21:19 Сообщение: 15
alexvm
0

Пункты: 2274
Регистрация: 22.05.2009
ядро 2.6.36. Спасибо за помощь, Sasamy, стало ясно, куда копать!

Хотя сразу возник вопрос - PPSAPI доступно и для более ранних ядер, а сигнал 1PPS никуда, кроме gpio, не заведёшь... Однако, это работает и без клиента pps-gpio... Но реализация клиента pps-gpio, естественно, самая универсальная.
Спуститься к концу Подняться к началу
Персональная информация
sasamy
Добавлено 27.11.2011 21:25 Редактировалось 27.11.2011 21:33 Сообщение: 16
sasamy
4.70

Пункты: 77333
Регистрация: 14.08.2009
Вот пример
http://ml.enneenne.com/pipermail/linuxpps/2011-May/004298.html

соответственно для atmel вместо
.gpio = GPI_PPS0_IN,

будет например AT91_PIN_PB1 - любой свободный в общем куда можно pps подключить

для 2.6.36 можно бэкпорт клиента pps-gpio сделать. В ранних вериях были только клиенты для irq c пинов LPT и UART.

PS Надо еще смотреть - возможно это пример только набросок и не совсем корректный
Спуститься к концу Подняться к началу
Персональная информация
alexvm
Добавлено 27.11.2011 21:35 Сообщение: 17
alexvm
0

Пункты: 2274
Регистрация: 22.05.2009
В точку, это то, что нужно! Вы меня выручаете уже не в первый раз, благодарю!

По поводу "В ранних вериях были только клиенты для irq c пинов LPT и UART." - выходит, в этом случае пин уже задан типом порта (LPT/UART).
Спуститься к концу Подняться к началу
Персональная информация
sasamy
Добавлено 27.11.2011 21:44 Сообщение: 18
sasamy
4.70

Пункты: 77333
Регистрация: 14.08.2009
Скорей всего, в доке есть например для LPT распиновка
http://lxr.free-electrons.com/source/Documentation/pps/pps.txt#L186

у последовательного порта помоему пин CD используется
Спуститься к концу Подняться к началу
Персональная информация
alexvm
Добавлено 07.12.2011 22:05 Редактировалось 07.12.2011 22:06 Сообщение: 19
alexvm
0

Пункты: 2274
Регистрация: 22.05.2009
Добавмл в ядро драйвер pps-gpio, возникла проблема:

в драйвер нужно передать пин, на который заведён сигнал PPS, который будет источником прерывания:

.gpio_pin = AT91_PIN_PD18

в драйвере вызывается функция gpio_to_irq(), которая должна возвращать номер irq. В данном случае это 146 (?).

При вызове request_irq() внутри драйвера функция возврашает:

setting trigger mode 1 for irq 146 failed.

Интересно, что функция at91_aic_set_type() при этом не вызывается.

Как решить проблему?
Спуститься к концу Подняться к началу
Персональная информация
sasamy
Добавлено 07.12.2011 22:49 Редактировалось 07.12.2011 22:53 Сообщение: 20
sasamy
4.70

Пункты: 77333
Регистрация: 14.08.2009
У at91 прерывания от gpio генерируются по обоим фронтам, если флаги не соответствуют возможностям периферии то до регистрации обработчика дело не дойдет

365 static int gpio_irq_type(struct irq_data *d, unsigned type)
366 {
367 switch (type) {
368 case IRQ_TYPE_NONE:
369 case IRQ_TYPE_EDGE_BOTH:
370 return 0;
371 default:
372 return -EINVAL;
373 }
374 }

судя по коду

94 get_irqf_trigger_flags(const struct pps_gpio_platform_data *pdata)
95 {
96 unsigned long flags = pdata->assert_falling_edge ?
97 IRQF_TRIGGER_FALLING : IRQF_TRIGGER_RISING;
98
99 if (pdata->capture_clear) {
100 flags |= ((flags & IRQF_TRIGGER_RISING) ?
101 IRQF_TRIGGER_FALLING : IRQF_TRIGGER_RISING);
102 }
103
104 return flags;
105 }

если задать дополнительно флаг в pps_gpio_platform_data кроме собственно номера gpio:
pdata->capture_clear = 1

то флаги встанут на место и будут соотвествовать
IRQ_TYPE_EDGE_BOTH
которые атмеловский драйвер gpio проглотит без ошибок
Спуститься к концу Подняться к началу
Персональная информация
Форум » starterkit.ru » Отладочные платы » SK-AT91SAM9G45(M10)-XC6SLX