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

 
 
 
Reply to this topicStart new topic
> AT91SAM9G45 вывод данных посредством GPIO
Andrew_Freeman
сообщение Apr 13 2011, 04:07
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 15
Регистрация: 23-09-07
Пользователь №: 30 771



Здравствуйте.

Требуется выводить битовый поток посредством GPIO со скоростью порядка 5 мегагерц в секунду
На текущий момент получается со скоростью 1.5 Мгц

На текущий момент задача решается в лоб:

Код
              if (tmp & 0x01) set(LED_SDI);  else   clr(LED_SDI);    set(LED_CLK); asm ("nop");  clr(LED_CLK);
              if (tmp & 0x02) set(LED_SDI);  else   clr(LED_SDI);    set(LED_CLK); asm ("nop");  clr(LED_CLK);
              if (tmp & 0x04) set(LED_SDI);  else   clr(LED_SDI);    set(LED_CLK); asm ("nop");  clr(LED_CLK);
              if (tmp & 0x08) set(LED_SDI);  else   clr(LED_SDI);    set(LED_CLK); asm ("nop");  clr(LED_CLK);
              if (tmp & 0x10) set(LED_SDI);  else   clr(LED_SDI);    set(LED_CLK); asm ("nop");  clr(LED_CLK);
              if (tmp & 0x20) set(LED_SDI);  else   clr(LED_SDI);    set(LED_CLK); asm ("nop");  clr(LED_CLK);
              if (tmp & 0x40) set(LED_SDI);  else   clr(LED_SDI);    set(LED_CLK); asm ("nop");  clr(LED_CLK);
              if (tmp & 0x80) set(LED_SDI);  else   clr(LED_SDI);    set(LED_CLK); asm ("nop");  clr(LED_CLK);
...


Собственно интересует, существует-ли какой-либо быстрый ввод-вывод для данного семейства (fast IO).

И интересует, как работают прерывания от периферии в Linux - скорость перехода в прерывание, и возможность обработки этого прерывания в течение длительного времени (порядка десятков, максимум сотни мс).

Go to the top of the page
 
+Quote Post
sasamy
сообщение Apr 13 2011, 06:49
Сообщение #2


Знающий
****

Группа: Участник
Сообщений: 783
Регистрация: 22-11-08
Пользователь №: 41 858



Цитата(Andrew_Freeman @ Apr 13 2011, 08:07) *
Требуется выводить битовый поток посредством GPIO со скоростью порядка 5 мегагерц в секунду
На текущий момент получается со скоростью 1.5 Мгц

На текущий момент задача решается в лоб:


Судя по коду Вы изобретаете SPI ;-)

Цитата
И интересует, как работают прерывания от периферии в Linux - скорость перехода в прерывание


Это сильно зависит от реализации - Linux не RTOS поэтому гарантировать какаую-то латентность нельзя, в общем случае нужно брать осциллограф, писать тестовый драйвер и измерять на конкретной системе.

Цитата
возможность обработки этого прерывания в течение длительного времени (порядка десятков, максимум сотни мс).


Для этого есть bottom half, в Linux их можно реализовать двумя методами:
1 Tasklets - имеют минимальную латентность, вызываются в контексте soft irq поэтому не могут переходить в состояние ожидания.
2 Workqueues - это по сути обычные процессы, поэтому в их контексте можно пользоваться любыми функциями ядра, но имеют большую латентность по сравнению с тасклетами
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Apr 13 2011, 07:51
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(Andrew_Freeman @ Apr 13 2011, 08:07) *
На текущий момент задача решается в лоб:

Это как-то совсем уж в лоб. Почитайте про synchronous output в описании PIO.
Go to the top of the page
 
+Quote Post
Andrew_Freeman
сообщение Apr 17 2011, 04:59
Сообщение #4


Участник
*

Группа: Участник
Сообщений: 15
Регистрация: 23-09-07
Пользователь №: 30 771



Можете примеров кинуть?
И посоветуйте среду разработки, а то компилить с помощью батника несколько неудобно... )

Да, UBoot можно к среде разработки прикрутить? Хочется по нажатию кнопки "Flash" прошивать без лишних заморочек. (Куда уж, в оперативку или в НАНД - это уже настроить думаю можно)
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 26th June 2025 - 23:05
Рейтинг@Mail.ru


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