реклама на сайте
подробности

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> AT91 и драйвер таймера, как работать?
Dubov
сообщение Jun 13 2012, 11:51
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 408
Регистрация: 28-05-12
Пользователь №: 72 052



Что нужно включить в файл board-xxx.c для того чтобы появился драйвер таймера в системе. Здаётся мне что толкьо вызова at91_add_device_tc() недостаточно.
Хочу получить драйвер, посредствам которого можно через пользовательский интерфейс управлять частотой генерации на ноге.
Go to the top of the page
 
+Quote Post
xor.kruger
сообщение Jun 18 2012, 11:56
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 290
Регистрация: 17-08-08
Из: Чернигов
Пользователь №: 39 647



Для того чтобы просто подергать ногой с заданной частотой достаточно в драйвер добавить такие строки:

Код
...
#define TCM_CLK        AT91_PIN_PC1
#define TCM8210_CLK    8000000
...
pck0 = clk_get(NULL, "pck0");
plla = clk_get(NULL, "plla");
at91_set_B_periph(TCM_CLK, 0);    /* PCK0 */
clk_set_parent(pck0, plla);
clk_set_rate(pck0, TCM8210_CLK);
clk_enable(pck0);
...

Обычно в файл платформ ничего для подобных вещей не добавляют, хотя если хотите, то можно данный код разместить и в платформе.

Go to the top of the page
 
+Quote Post
Dubov
сообщение Jun 19 2012, 04:44
Сообщение #3


Местный
***

Группа: Участник
Сообщений: 408
Регистрация: 28-05-12
Пользователь №: 72 052



Цитата(xor.kruger @ Jun 18 2012, 14:56) *
Для того чтобы просто подергать ногой с заданной частотой достаточно в драйвер добавить такие строки:

Код
...
#define TCM_CLK        AT91_PIN_PC1
#define TCM8210_CLK    8000000
...
pck0 = clk_get(NULL, "pck0");
plla = clk_get(NULL, "plla");
at91_set_B_periph(TCM_CLK, 0);    /* PCK0 */
clk_set_parent(pck0, plla);
clk_set_rate(pck0, TCM8210_CLK);
clk_enable(pck0);
...

Обычно в файл платформ ничего для подобных вещей не добавляют, хотя если хотите, то можно данный код разместить и в платформе.

но я думаю что pck для моих целей не подходит. Например мне нужен сигнал 100000кГц. Подобрать делитель для pck тогда неполучится. Интереса для: хочется увидеть как создать драйвер, который из пользовательского пространства принимает целое число и дёргает нагой с этой частотой.
Go to the top of the page
 
+Quote Post
xor.kruger
сообщение Jun 19 2012, 07:04
Сообщение #4


Местный
***

Группа: Свой
Сообщений: 290
Регистрация: 17-08-08
Из: Чернигов
Пользователь №: 39 647



Цитата
Интереса для: хочется увидеть как создать драйвер, который из пользовательского пространства принимает целое число и дёргает нагой с этой частотой.


Кратко в двух словах данный процесс не опишешь, поэтому советую заглянуть в небольшой туториал под названием "Writing device drivers in Linux: A brief tutorial". Так как раз описан с примером данный процесс работы с пользовательского пространства.
Go to the top of the page
 
+Quote Post
Enthusiast
сообщение Jun 19 2012, 11:45
Сообщение #5


Частый гость
**

Группа: Свой
Сообщений: 163
Регистрация: 25-09-09
Из: Nizhny Novgorod, Russia
Пользователь №: 52 588



Предлагаю обойтись без разработки драйверов, воспользовавшись стандартными возможностями "Линукса". Исходный код я приводил здесь.
Go to the top of the page
 
+Quote Post
Dubov
сообщение Jun 20 2012, 07:52
Сообщение #6


Местный
***

Группа: Участник
Сообщений: 408
Регистрация: 28-05-12
Пользователь №: 72 052



Цитата(Enthusiast @ Jun 19 2012, 15:45) *
Предлагаю обойтись без разработки драйверов, воспользовавшись стандартными возможностями "Линукса". Исходный код я приводил здесь.

Таймерное программное прерывание не подходит потому что джиттер выходного сигнала будет сильно зависеть от загруженности процессора и, например при обновлении экрана(при выводе списка задач посредствам утилиты top) выходной сигнал может вообще пропадать на короткое время.
Go to the top of the page
 
+Quote Post
Enthusiast
сообщение Jun 20 2012, 08:14
Сообщение #7


Частый гость
**

Группа: Свой
Сообщений: 163
Регистрация: 25-09-09
Из: Nizhny Novgorod, Russia
Пользователь №: 52 588



Цитата(Dubov @ Jun 20 2012, 11:52) *
Таймерное программное прерывание не подходит потому что джиттер выходного сигнала будет сильно зависеть от загруженности процессора и, например при обновлении экрана(при выводе списка задач посредствам утилиты top) выходной сигнал может вообще пропадать на короткое время.

В моём случае уход времени интервального таймера был в пределах 25 мкс (+/- 12,5 мкс) при стопроцентной загрузке процессора и "бомбардировании" платы сетевыми пакетами.
В любом случае, что мешает выставить приоритет реального времени для своей задачи? На свежих ядрах такое вполне возможно.
Go to the top of the page
 
+Quote Post
Dubov
сообщение Jun 24 2012, 18:28
Сообщение #8


Местный
***

Группа: Участник
Сообщений: 408
Регистрация: 28-05-12
Пользователь №: 72 052



Цитата(Enthusiast @ Jun 20 2012, 11:14) *
В моём случае уход времени интервального таймера был в пределах 25 мкс (+/- 12,5 мкс) при стопроцентной загрузке процессора и "бомбардировании" платы сетевыми пакетами.
В любом случае, что мешает выставить приоритет реального времени для своей задачи? На свежих ядрах такое вполне возможно.

Нашёл занятную таблицу для расчёта джиттера тактирующего сигнала для АЦП:
http://ru.wikipedia.org/wiki/%D0%90%D0%BD%....D0.B5.D1.80.29

Выходит, что при разрядности АЦП 16 бит и частоте тактирования 100кГц, получаем, что джиттер тактового сигнала не должен превышать примерно 50 пс.

Теперь привожу статью о "реальном времени" в Linux для AT91:
http://www.at91.com/linux4sam/bin/view/Linux4SAM/RealTime ,
вывод которой гласит что максимальный джиттер даже в режиме RT примерно 177 мкс.

Тогда возникаетв вопрос:
можно ли вообще из-под Linux тактировать АЦП? или 50пс - это полный бред для джиттера? Тогда какой джиттер достаточен?

Сообщение отредактировал Dubov - Jun 24 2012, 18:30
Go to the top of the page
 
+Quote Post
Enthusiast
сообщение Jun 25 2012, 12:54
Сообщение #9


Частый гость
**

Группа: Свой
Сообщений: 163
Регистрация: 25-09-09
Из: Nizhny Novgorod, Russia
Пользователь №: 52 588



Цитата(Dubov @ Jun 24 2012, 22:28) *
Тогда возникаетв вопрос:
можно ли вообще из-под Linux тактировать АЦП? или 50пс - это полный бред для джиттера? Тогда какой джиттер достаточен?

Тактировать АЦП из под "Линукса" - бред.
На мой взгляд, "Линукс" хорош на задачах с периодом обсчета от 1 мс и более с уходом времени обработки на мс. Если требования жестче, чем 1 мс, то лучше делать без ОС.
Берите качественный тактовый генератор и будет Вам счастье.
Go to the top of the page
 
+Quote Post
Dubov
сообщение Jun 25 2012, 16:33
Сообщение #10


Местный
***

Группа: Участник
Сообщений: 408
Регистрация: 28-05-12
Пользователь №: 72 052



Цитата(Enthusiast @ Jun 25 2012, 16:54) *
Тактировать АЦП из под "Линукса" - бред.
На мой взгляд, "Линукс" хорош на задачах с периодом обсчета от 1 мс и более с уходом времени обработки на мс. Если требования жестче, чем 1 мс, то лучше делать без ОС.

бред не бред, но именно так предлагают реализовать генератор программисты AD))
понятно что бред, я имею ввиду: спутиться "на самое дно" Linux и написать драйвер таймера, чтобы тактировать АЦП. Вот только вопрос: поджойдёт ли для этого таймер AT91?

Цитата(Enthusiast @ Jun 25 2012, 16:54) *
Берите качественный тактовый генератор и будет Вам счастье.


имеете ввиду в виде отдельной микросхемы типа Epson? Никогда не встречал такого решения применительно к АЦП.

Сообщение отредактировал Dubov - Jun 25 2012, 16:38
Go to the top of the page
 
+Quote Post
Enthusiast
сообщение Jun 26 2012, 12:50
Сообщение #11


Частый гость
**

Группа: Свой
Сообщений: 163
Регистрация: 25-09-09
Из: Nizhny Novgorod, Russia
Пользователь №: 52 588



Цитата(Dubov @ Jun 25 2012, 20:33) *
бред не бред, но именно так предлагают реализовать генератор программисты AD))
понятно что бред, я имею ввиду: спутиться "на самое дно" Linux и написать драйвер таймера, чтобы тактировать АЦП. Вот только вопрос: поджойдёт ли для этого таймер AT91?
имеете ввиду в виде отдельной микросхемы типа Epson? Никогда не встречал такого решения применительно к АЦП.

Я лишь хочу сказать, что для сигнала с периодом в 10 мкс лучше обойтись без ОС. От качества задающего тактового генератора будет зависеть точность работы АЦП. На мой взгляд, наглядным примером того до чего может довести верховенство программистов над схемотехниками могут служить осциллографы "Лекрой": никому не нужных настроек в избытке, а скорость переключения режимов работы сходна черепашьей. Решать, естественно, Вам. Успехов!
Go to the top of the page
 
+Quote Post
Dubov
сообщение Jun 26 2012, 21:06
Сообщение #12


Местный
***

Группа: Участник
Сообщений: 408
Регистрация: 28-05-12
Пользователь №: 72 052



Похоже тема плавно перетекает в тему "Отчего тактировать АЦП?"
Я просто видел в примерах что, например внутренний АЦП на AT91 тактировался таймером. Неужели слишком большой джиттер получится?
По поводу ОС: если написать тактирование на уровне ядра, то это всё равно что без ОС.

Цитата(Enthusiast @ Jun 26 2012, 16:50) *
Решать, естественно, Вам. Успехов!

Понятно, что мне. Но хочется же посоветоваться.
Go to the top of the page
 
+Quote Post
Dron_Gus
сообщение Jun 27 2012, 20:26
Сообщение #13


Профессионал
*****

Группа: Свой
Сообщений: 1 202
Регистрация: 9-01-05
Из: Санкт-Петербург
Пользователь №: 1 861



ИМХО, топикстартер хочет ипользовать аппаратный таймер с аппаратным же выходом. А все критикуют применение програмного.


--------------------
Если сверху смотреть, то сбоку кажется, что снизу ничего не видно.
Go to the top of the page
 
+Quote Post
Enthusiast
сообщение Jun 28 2012, 04:02
Сообщение #14


Частый гость
**

Группа: Свой
Сообщений: 163
Регистрация: 25-09-09
Из: Nizhny Novgorod, Russia
Пользователь №: 52 588



Всё верно: мы настраиваем и запускаем в работу аппаратный таймер микроконтроллера, однако срабатывания этого аппаратного таймера будут обрабатываться уже программными средствами операционной системы, превращая аппаратный таймер в программный с соотвествующим уходом времени обработки таймерного прерывания. Если не использовать операционную систему, то будет честный аппаратный таймер, спору нет.
Go to the top of the page
 
+Quote Post
Zelepuk
сообщение Jun 28 2012, 04:40
Сообщение #15


Знающий
****

Группа: Участник
Сообщений: 634
Регистрация: 27-10-10
Пользователь №: 60 464



Цитата(Dron_Gus @ Jun 27 2012, 23:26) *
ИМХО, топикстартер хочет ипользовать аппаратный таймер с аппаратным же выходом. А все критикуют применение програмного.

совершенно верно. И меня интересует какой джиттер будет на этом таймере и можно ли им тактировать мой АЦП (16 бит 100кГц)

Цитата(Enthusiast @ Jun 28 2012, 07:02) *
Всё верно: мы настраиваем и запускаем в работу аппаратный таймер микроконтроллера, однако срабатывания этого аппаратного таймера будут обрабатываться уже программными средствами операционной системы, превращая аппаратный таймер в программный с соотвествующим уходом времени обработки таймерного прерывания. Если не использовать операционную систему, то будет честный аппаратный таймер, спору нет.

Но таймер начинает работать при инициализации ядра. По моему в таком случае это всё равно что работа таймера без ОС.
Go to the top of the page
 
+Quote Post

2 страниц V   1 2 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 22nd June 2025 - 12:28
Рейтинг@Mail.ru


Страница сгенерированна за 0.01489 секунд с 7
ELECTRONIX ©2004-2016