|
AT91 и драйвер таймера, как работать? |
|
|
|
Jun 18 2012, 11:56
|

Местный
  
Группа: Свой
Сообщений: 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); ... Обычно в файл платформ ничего для подобных вещей не добавляют, хотя если хотите, то можно данный код разместить и в платформе.
|
|
|
|
|
Jun 19 2012, 04:44
|
Местный
  
Группа: Участник
Сообщений: 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 тогда неполучится. Интереса для: хочется увидеть как создать драйвер, который из пользовательского пространства принимает целое число и дёргает нагой с этой частотой.
|
|
|
|
|
Jun 19 2012, 07:04
|

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

|
Цитата Интереса для: хочется увидеть как создать драйвер, который из пользовательского пространства принимает целое число и дёргает нагой с этой частотой. Кратко в двух словах данный процесс не опишешь, поэтому советую заглянуть в небольшой туториал под названием "Writing device drivers in Linux: A brief tutorial". Так как раз описан с примером данный процесс работы с пользовательского пространства.
|
|
|
|
|
Jun 19 2012, 11:45
|
Частый гость
 
Группа: Свой
Сообщений: 163
Регистрация: 25-09-09
Из: Nizhny Novgorod, Russia
Пользователь №: 52 588

|
Предлагаю обойтись без разработки драйверов, воспользовавшись стандартными возможностями "Линукса". Исходный код я приводил здесь.
|
|
|
|
|
Jun 20 2012, 07:52
|
Местный
  
Группа: Участник
Сообщений: 408
Регистрация: 28-05-12
Пользователь №: 72 052

|
Цитата(Enthusiast @ Jun 19 2012, 15:45)  Предлагаю обойтись без разработки драйверов, воспользовавшись стандартными возможностями "Линукса". Исходный код я приводил здесь. Таймерное программное прерывание не подходит потому что джиттер выходного сигнала будет сильно зависеть от загруженности процессора и, например при обновлении экрана(при выводе списка задач посредствам утилиты top) выходной сигнал может вообще пропадать на короткое время.
|
|
|
|
|
Jun 20 2012, 08:14
|
Частый гость
 
Группа: Свой
Сообщений: 163
Регистрация: 25-09-09
Из: Nizhny Novgorod, Russia
Пользователь №: 52 588

|
Цитата(Dubov @ Jun 20 2012, 11:52)  Таймерное программное прерывание не подходит потому что джиттер выходного сигнала будет сильно зависеть от загруженности процессора и, например при обновлении экрана(при выводе списка задач посредствам утилиты top) выходной сигнал может вообще пропадать на короткое время. В моём случае уход времени интервального таймера был в пределах 25 мкс (+/- 12,5 мкс) при стопроцентной загрузке процессора и "бомбардировании" платы сетевыми пакетами. В любом случае, что мешает выставить приоритет реального времени для своей задачи? На свежих ядрах такое вполне возможно.
|
|
|
|
|
Jun 24 2012, 18:28
|
Местный
  
Группа: Участник
Сообщений: 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
|
|
|
|
|
Jun 25 2012, 12:54
|
Частый гость
 
Группа: Свой
Сообщений: 163
Регистрация: 25-09-09
Из: Nizhny Novgorod, Russia
Пользователь №: 52 588

|
Цитата(Dubov @ Jun 24 2012, 22:28)  Тогда возникаетв вопрос: можно ли вообще из-под Linux тактировать АЦП? или 50пс - это полный бред для джиттера? Тогда какой джиттер достаточен? Тактировать АЦП из под "Линукса" - бред. На мой взгляд, "Линукс" хорош на задачах с периодом обсчета от 1 мс и более с уходом времени обработки на мс. Если требования жестче, чем 1 мс, то лучше делать без ОС. Берите качественный тактовый генератор и будет Вам счастье.
|
|
|
|
|
Jun 25 2012, 16:33
|
Местный
  
Группа: Участник
Сообщений: 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
|
|
|
|
|
Jun 26 2012, 12:50
|
Частый гость
 
Группа: Свой
Сообщений: 163
Регистрация: 25-09-09
Из: Nizhny Novgorod, Russia
Пользователь №: 52 588

|
Цитата(Dubov @ Jun 25 2012, 20:33)  бред не бред, но именно так предлагают реализовать генератор программисты AD)) понятно что бред, я имею ввиду: спутиться "на самое дно" Linux и написать драйвер таймера, чтобы тактировать АЦП. Вот только вопрос: поджойдёт ли для этого таймер AT91? имеете ввиду в виде отдельной микросхемы типа Epson? Никогда не встречал такого решения применительно к АЦП. Я лишь хочу сказать, что для сигнала с периодом в 10 мкс лучше обойтись без ОС. От качества задающего тактового генератора будет зависеть точность работы АЦП. На мой взгляд, наглядным примером того до чего может довести верховенство программистов над схемотехниками могут служить осциллографы "Лекрой": никому не нужных настроек в избытке, а скорость переключения режимов работы сходна черепашьей. Решать, естественно, Вам. Успехов!
|
|
|
|
|
Jun 26 2012, 21:06
|
Местный
  
Группа: Участник
Сообщений: 408
Регистрация: 28-05-12
Пользователь №: 72 052

|
Похоже тема плавно перетекает в тему "Отчего тактировать АЦП?" Я просто видел в примерах что, например внутренний АЦП на AT91 тактировался таймером. Неужели слишком большой джиттер получится? По поводу ОС: если написать тактирование на уровне ядра, то это всё равно что без ОС. Цитата(Enthusiast @ Jun 26 2012, 16:50)  Решать, естественно, Вам. Успехов! Понятно, что мне. Но хочется же посоветоваться.
|
|
|
|
|
Jun 28 2012, 04:40
|
Знающий
   
Группа: Участник
Сообщений: 634
Регистрация: 27-10-10
Пользователь №: 60 464

|
Цитата(Dron_Gus @ Jun 27 2012, 23:26)  ИМХО, топикстартер хочет ипользовать аппаратный таймер с аппаратным же выходом. А все критикуют применение програмного. совершенно верно. И меня интересует какой джиттер будет на этом таймере и можно ли им тактировать мой АЦП (16 бит 100кГц) Цитата(Enthusiast @ Jun 28 2012, 07:02)  Всё верно: мы настраиваем и запускаем в работу аппаратный таймер микроконтроллера, однако срабатывания этого аппаратного таймера будут обрабатываться уже программными средствами операционной системы, превращая аппаратный таймер в программный с соотвествующим уходом времени обработки таймерного прерывания. Если не использовать операционную систему, то будет честный аппаратный таймер, спору нет. Но таймер начинает работать при инициализации ядра. По моему в таком случае это всё равно что работа таймера без ОС.
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|