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

 
 
> EP9302: как работает GPIO?, тайминги, синхронизация...
AVR
сообщение Mar 1 2008, 01:47
Сообщение #1


фанат Linux'а
*****

Группа: Свой
Сообщений: 1 353
Регистрация: 23-10-05
Из: SPB.RU
Пользователь №: 10 008



Здравствуйте!
Прошу прощения за возможно глупый вопрос... (по сайту искал, гуглил...)
В документации на EP93XX пишется что GPIO тактируется частотой 14 с чем-то МГц, а сам контроллер работает на 200 МГц. Искал в документации ответ на такой вопрос, но так и не нашел: если состояние выводов обновляется с частотой 14 МГц, а контроллер работает на 200 МГц, то как осуществляется синхронизация чтобы можно было быстро вываливать следующее значение на порт как только будет выдано старое значение на выводы?..
Провел маленький эксперимент, но не могу самому себе объяснить результаты:
CS-EP9302 подключена к Altera-DE1 через шлейфик к портам A, B и F. В Cyclone II прошивка, которая считает число фронтов на одном из выводов порта A и выводит это число на светодиоды. На ARM'е крутится linux, работа с GPIO осуществляется из драйвера, в старотовый код которого вставлен такой фрагмент:
Код
__raw_writeb(0xFF, GPIO_PADDR);
for(i = 0; i < 16; i++)
{
    __raw_writeb(0xFF, GPIO_PADR);
    __raw_writeb(0x00, GPIO_PADR);
    __raw_writeb(0xFF, GPIO_PADR);
    __raw_writeb(0x00, GPIO_PADR);
    __raw_writeb(0xFF, GPIO_PADR);
    __raw_writeb(0x00, GPIO_PADR);
    asm("nop");
    asm("nop");
    asm("nop");
    __raw_writeb(0xFF, GPIO_PADR);
    __raw_writeb(0x00, GPIO_PADR);
}
Код генерирует ровно 64 такта, и что удивительно, ПЛИСка исправно ловит ровно 64 такта. Если добавить немного nop'ов чтобы привнести мешающую задержку, то все равно ловится 64 такта... Возможно nop'ы выбрасываются, но всё равно ведь для операция записи константы в порт потребуется тактов меньше чем имеется в запасе до следующего обновления состояния портов... или не так?

1) Почему получается такой результат? Процессор приостанавливается на момент вывода в порт и ждет пока он обновится?
2) Как заставить GCC вывести ассемблерный листинг (чтобы посмотреть что там нагенерировалось) если сборка драйвера осуществляется таким способом: make -C $KDIR SUBDIRS=$DIR modules ?


--------------------
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
aaarrr
сообщение Mar 1 2008, 12:17
Сообщение #2


Гуру
******

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



Хочу только уточнить, что шина APB отнюдь не медленная - 50MHz все-таки.
Go to the top of the page
 
+Quote Post
AVR
сообщение Mar 1 2008, 20:37
Сообщение #3


фанат Linux'а
*****

Группа: Свой
Сообщений: 1 353
Регистрация: 23-10-05
Из: SPB.RU
Пользователь №: 10 008



Цитата(aaarrr @ Mar 1 2008, 15:17) *
Хочу только уточнить, что шина APB отнюдь не медленная - 50MHz все-таки.
50 МГц в 3,5 раза больше чем 14 МГц, но синхронность всё равно соблюдается... По всей видимости имеются циклы ожидания и таким образом получается что у меня не выйдет выставить быстро порт А, порт Б, а на ножку порта F выдать фронт или спад, т.е. каждая запись в порт будет замедлять работу всего до 14 МГц... crying.gif
Большое спасибо за Ваши ответы, кажется прояснил ситуацию...


--------------------
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Mar 1 2008, 21:37
Сообщение #4


Гуру
******

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



Цитата(AVR @ Mar 1 2008, 23:37) *
50 МГц в 3,5 раза больше чем 14 МГц, но синхронность всё равно соблюдается...

Если честно, я не припоминаю привязки к 14МГц. Где это упоминалось?

А вот частота PCLK и размерность данных при обращении к PxDR на скорость работы влияли.
К сожалению, реальные цифры раньше среды сказать не смогу - нет доступной железки.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме


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

 


RSS Текстовая версия Сейчас: 19th July 2025 - 13:28
Рейтинг@Mail.ru


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