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

 
 
> Генератор меандра на ARM., Генерация сигнала управляемой частоты ARM-процессоре под Linux
Soleniy
сообщение Feb 8 2012, 13:57
Сообщение #1





Группа: Новичок
Сообщений: 5
Регистрация: 26-11-11
Из: Минск
Пользователь №: 68 530



Здравствуйте, господа. После долгих гуглений и размышлений решил обратиться сюда.
Собственно, есть такая штука с установленным Linux (Digi Embedded Linux). Я на ней диплом сейчас пишу.
Но пока задача не связанная с дипломом.
Нужно на светодиод на плате подать сигнал заданной частоты (100 Гц - 100 kГц). Управляться это должно через Ethernet.
Как я себе это представляю: Программа на компьютере, которая формирует управляющий сигнал и передает его на плату. С этим понятно. Но вот дальше, есть много вопросов:

1) Как заставить программу записывать нули единицы в файл драйвера с нужной скоростью? Понял что всякие usleep и nanosleep не подходят, так как квант времени системы гораздо больше необходимой задержки (или я ошибаюсь?).
2) Если каким то образом заставить систему выполнять только процесс записи в файл драйвера, то загрузка CPU будет 100%. Как тогда можно слушать команду пришедшую от управляющей программы?

В общем, как так.
Буду благодарен за любые советы по этой проблеме.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Soleniy
сообщение Feb 8 2012, 20:57
Сообщение #2





Группа: Новичок
Сообщений: 5
Регистрация: 26-11-11
Из: Минск
Пользователь №: 68 530



cpl, я тоже уже начал склоняться к написанию драйвера для gpio. Но так как драйверы не разу не писал, ни под Linux, ни под Windows, хочется как-то обойти пока это дело (хоть я понимаю что скорее всего не получится). Вот что нагуглил:
Цитата
Задержка через порты ввода/вывода

Другой способ обеспечить задержку в несколько микросекунд - это порты ввода/вывода. Запись или чтение любого значения из порта 0x80 (о том, как это сделать, см. выше) обеспечивает задержку почти точно равную одной микросекунде, независимо от типа и скорости вашего процессора. Чтобы обеспечить задержку в несколько микросекунд, вы можете выполнить эту операцию несколько раз. Запись в этот порт не оказывает никакого влияния на компьютер (и некоторые драйверы используют это). Таким образом, обычно выполняется задержка в {in|out}[bw]_p() (см. asm/io.h).

На самом деле, операции ввода/вывода на большинство портов в диапазоне от 0 до 0x3ff тоже дают задержку около одной микросекунды. Так что, если вы, например, производите запись в параллельный порт, для обеспечения задержки, просто добавьте дополнительные inb() из порта.


Вопрос такой, сколько процессорного времени занимает считать функцией read() 1 байт из файла драйвера gpio? И возможно ли с помощью этого управлять временем? Тогда можно было бы запускать цикл с нужным числом вызовов этой функции.

aaarrr, если под аппаратное реализацией вы имеете ввиду, припаивание еще какого-то внешнего девайса, то это категорически не подходит.
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 17th August 2025 - 11:36
Рейтинг@Mail.ru


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