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

 
 
> AT91SAM9G45, Настройка частоты работы GPIO
Sergey1212
сообщение Apr 24 2013, 08:02
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 22
Регистрация: 23-04-13
Пользователь №: 76 596



Подскажите пожулуйста как настроить GPIO частоту равную мастер клоку 133Мгц, ARM только начал изучать.
Проинициализировал Процессор клок на 400Мгц Мастер клок на 133, далее в безконечном цикле дергаю ногой в своем примере из SRAM без убутов и бутстрапов получаю максимум 2,8 Мгц период т.е. включение выключение. Такой же код вписал в убут собрал запустил получил 11,111111 Мгц период т.е. 11,1111Мгц х 2 х 6 тактов = 133 Мгц.
Интересует есть ли какие либо еще регистры где прописывается частота тактирования GPIO?
В даташите на него ничего не нашел.


Как я понял дело в MMU и кеше
Включил MMU кеш как описано здесь http://electronix.ru/forum/index.php?showt...&hl=SAM9G45
получил 7.8431 МГц но этого тоже мало должно быть как в убуте 11.11111МГц
подскажите пример MMU и кеша на полную катушку так сказать
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Sergey1212
сообщение Apr 25 2013, 16:55
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 22
Регистрация: 23-04-13
Пользователь №: 76 596



поправил
pTranslationTable[i] = i << 20 | (3 << 10) | 0xDFE // Write-back 11 0 1111 1 11 10
т.е. как я понимаю разрешил кеширование всех секций?
а чем может быть опасно кеширование секций всмысле почему в том же убуте запрещено?
если кеширование разрешено то какие подводные камни могут выплыть?)
Какие области памяти не стоит кешированть?
зачем отдельно от мму есть возможность оключать датакеш?
зачем их вообще отключать почему нельзя было сделать их все время включеными?
если я буду кешировать все секции кроме 0x00000000 как сейчас получилось могут возникнуть какие-то проблемы?

Сообщение отредактировал Sergey1212 - Apr 25 2013, 17:23
Go to the top of the page
 
+Quote Post
Fedor
сообщение Apr 25 2013, 17:52
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 73
Регистрация: 26-10-05
Пользователь №: 10 125




Не нужно кэшировать область памяти где расположена внутренняя периферия.
Куда читаете или пишете используя DMA, поскольку ЦП не знает про DMA , хотя вроде после каждой транзакции можно принудительно перезаливать кэш.
Смысл кэшировать сегиент кода? Это не данные для этого есть ICache.
Думаю что есть еще нюансы...
Ну и нужно помнить что кэш данных не даст существенного прироста производительности если вы работаете с данными из разрозненных областей памяти вне пределов размера кэша.
Go to the top of the page
 
+Quote Post
Sergey1212
сообщение Apr 25 2013, 18:30
Сообщение #4


Участник
*

Группа: Участник
Сообщений: 22
Регистрация: 23-04-13
Пользователь №: 76 596



Цитата(Fedor @ Apr 25 2013, 21:52) *
Смысл кэшировать сегиент кода? Это не данные для этого есть ICache.

Извеняюсь конечно но чет я не понимаю не фига)
бутстрапом приложение копируется в 0x73f00000 это получается сегмент кода для которого достаточно только ICache?
а где тогда сегмент данных?
ICache кеширует только сам код программы?
а чем занимаются DCache и MMU?

Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Apr 25 2013, 20:51
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



Цитата(Sergey1212 @ Apr 25 2013, 22:30) *
Извеняюсь конечно но чет я не понимаю не фига)
бутстрапом приложение копируется в 0x73f00000 это получается сегмент кода для которого достаточно только ICache?
а где тогда сегмент данных?
ICache кеширует только сам код программы?
а чем занимаются DCache и MMU?


к дополнительному перевариванию надо в общих чертах про кэши и АРМ.

У вас в проце отдельно шина данных и шина команд. Первые идеи были положить и данные и инструкции в одну память и сложение выглядело так

загрузить адрес инструкции
загрузить инструкцию
распознать ее, понять что надо складывать
загрузить адрес первого операнда
загрузить операнд
загрузить адрес 2 операнда
загрузить операнд
сложить
получить адрес результата
загрузить адрес результата
выложить данные.

Если к этому добавить что операнды обычно лежат черти как, а инструкции одна за одной, при это операнды лежат там где появились, а иснтрукции идут вперед и вперед, всем показалось разумным разделить области с операндами и инструкциями. При том пошли радикально, и разделили даже шины доступа к ним. А потом борясь с медленной памятью сделали кэши, вот мы и имеем их 2 штуки.
кеш данных - на шине данных кеширует операнды
кеш инструкций - на шине инструкций кеширует выполняемый код

Кеши имеют разные алгоритмы работы, но в целом они автоматизированы, попали в ячейку памяти забрали ее и некую область вокруг. Попали в область кеша работаем из него, промазали, сбросили кеш загрузили новую область. Размер кеша допустим 4 кбайта, если вы будите тыкаться в ячейки расположенные друг от друга в 5 кбайтах так и будет постоянный сброс кеша и загрузка, будет медленее чем без него.

И вот тут как я понимаю и помогает ММУ, как я понял при помощи него вы можете положить себе поближе нужные куски памяти, и постараться учесть как будет вести себя программа, как она будет и куда прыгать и так далее.. То есть это как бы интеллектуальный, управляемый кеш... Хотя я могу ошибаться, и тогда меня поправятsm.gif...

Если шину данных и адреса использовать для управления чем либо, то есть выставляя биты на ножках адреса и данных, то кешировать это пространство низя, данные будт в кеше, а ножки не будут шевелиться. Так же как и для переферии если надо менять ее регистры, то кеш не даст это делать, вы будите менять внутреннюю память проца (кеш), а не регистры. Ну и при обращении через ДМА - тоже беда, рассинхронизация памяти...
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Apr 25 2013, 21:13
Сообщение #6


Гуру
******

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



Цитата(Golikov A. @ Apr 26 2013, 00:51) *
Кеши имеют разные алгоритмы работы, но в целом они автоматизированы, попали в ячейку памяти забрали ее и некую область вокруг. Попали в область кеша работаем из него, промазали, сбросили кеш загрузили новую область. Размер кеша допустим 4 кбайта, если вы будите тыкаться в ячейки расположенные друг от друга в 5 кбайтах так и будет постоянный сброс кеша и загрузка, будет медленее чем без него.

Кэш работает строками. Если тыкаться в ячейки, расположенные друг от друга в 5 килобайтах, то в кэше окажутся загружены две строки с соответствующими адресами.
И израсходовано на это дело будет всего 64 байта из допущенных 4 кБайт.

Цитата(Golikov A. @ Apr 26 2013, 00:51) *
И вот тут как я понимаю и помогает ММУ, как я понял при помощи него вы можете положить себе поближе нужные куски памяти, и постараться учесть как будет вести себя программа, как она будет и куда прыгать и так далее.. То есть это как бы интеллектуальный, управляемый кеш... Хотя я могу ошибаться, и тогда меня поправятsm.gif...

MMU нужен исключительно для построения виртуальной памяти. Кэшу он ничуть не помогает, а совсем даже наоборот sm.gif
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Apr 26 2013, 03:31
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



Цитата(aaarrr @ Apr 26 2013, 01:13) *
Кэш работает строками. Если тыкаться в ячейки, расположенные друг от друга в 5 килобайтах, то в кэше окажутся загружены две строки с соответствующими адресами.
И израсходовано на это дело будет всего 64 байта из допущенных 4 кБайт.

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

Цитата(aaarrr @ Apr 26 2013, 01:13) *
MMU нужен исключительно для построения виртуальной памяти. Кэшу он ничуть не помогает, а совсем даже наоборот sm.gif

А виртуальная память зачем? Удобство? Или возможность перетащить куски из ДДР поближе?
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Apr 26 2013, 07:57
Сообщение #8


Гуру
******

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



Цитата(Golikov A. @ Apr 26 2013, 07:31) *
я условно написал, потому что когда вы израсходуете все строки будет опять та же ситуация. И опять же 64 байта - тоже условность, есть и другие значения. Общий смысл что бывают и промахи по кешу.

Просто из вашего предыдущего сообщения можно было сделать вывод, что при промахе кэш загружается полностью с одного адреса,
в то время как на самом деле загружена будет только одна строка.

Цитата(Golikov A. @ Apr 26 2013, 07:31) *
А виртуальная память зачем? Удобство? Или возможность перетащить куски из ДДР поближе?

Удобство, прежде всего для "тяжелых" ОС - фиксированный адрес для приложений, защита памяти и т.п.

А есть смысл таскать куски памяти поближе, если процессор может адресовать все 4 Гбайта?

Вот периферию "таскать" приходилось - например, чтобы отразить контроллер прерываний в верхних адресах ради возможности
быстрого перехода по адресу вектора через ldr pc, [pc, #-X].
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Apr 26 2013, 11:18
Сообщение #9


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



Цитата(aaarrr @ Apr 26 2013, 11:57) *
Просто из вашего предыдущего сообщения можно было сделать вывод, что при промахе кэш загружается полностью с одного адреса,
в то время как на самом деле загружена будет только одна строка.


Удобство, прежде всего для "тяжелых" ОС - фиксированный адрес для приложений, защита памяти и т.п.

А есть смысл таскать куски памяти поближе, если процессор может адресовать все 4 Гбайта?

Вот периферию "таскать" приходилось - например, чтобы отразить контроллер прерываний в верхних адресах ради возможности
быстрого перехода по адресу вектора через ldr pc, [pc, #-X].


Да процы разные бывают, и кеши тоже..., Наверное вы правы, для строгости изложения, надо упомянуть что не всегда весь кеш обновляется.

Я обычно пишу маленькие системы, потому ММУ для меня чистая теория. думаю что можно какие то выгоды получить подтащив куски кода, переходы сократить, кешу помочь и так далее... но я не настаиваюsm.gif...

О кстати нашел у себя ММУ в процеsm.gif, там предлагают еще возможность организовать Shadow регистры данных и инструкции. То есть фактически шаг к виртуализации и многопотоковости...
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Sergey1212   AT91SAM9G45   Apr 24 2013, 08:02
- - jcxz   Цитата(Sergey1212 @ Apr 24 2013, 14:02) П...   Apr 24 2013, 09:00
|- - Sergey1212   Цитата(jcxz @ Apr 24 2013, 13:00) Если уж...   Apr 24 2013, 11:30
- - Golikov A.   Еще в некоторых процах можно выбрать режим скорост...   Apr 24 2013, 09:59
|- - Sergey1212   Цитата(Golikov A. @ Apr 24 2013, 13:59) Е...   Apr 24 2013, 11:43
- - Golikov A.   какие то интересные исследования можно же всегда п...   Apr 24 2013, 11:36
- - Fedor   Максимальную скорость выполнения кода можно получи...   Apr 24 2013, 11:55
- - Sergey1212   OPTIMIZATION = -O3 Решили проблему)) вышел на 12.1...   Apr 24 2013, 12:10
|- - Fedor   Попробуйте использовать модуль PWM могу конечно ош...   Apr 24 2013, 12:55
|- - Sergey1212   Цитата(Fedor @ Apr 24 2013, 16:55) Попроб...   Apr 24 2013, 13:32
- - Golikov A.   вообщем я думаю самый правильный путь это посмотре...   Apr 24 2013, 13:45
- - Sergey1212   Пока что интересуют именно к этому процу Как я пон...   Apr 24 2013, 13:52
|- - Golikov A.   Цитата(Sergey1212 @ Apr 24 2013, 17:52) П...   Apr 24 2013, 14:27
- - Sergey1212   Вот кусок с дизассемблерра получил из eclipsa запу...   Apr 24 2013, 15:16
- - Fedor   Смысл использовать MMU если у вас код и данные ве...   Apr 24 2013, 17:07
|- - Sergey1212   Цитата(Fedor @ Apr 24 2013, 21:07) И проп...   Apr 24 2013, 18:19
- - Golikov A.   в дизасемблере надо смотреть что за такты в цикле,...   Apr 24 2013, 19:58
- - Fedor   Не мешает проверить также на какую область памяти ...   Apr 25 2013, 05:23
|- - Sergey1212   Цитата(Fedor @ Apr 25 2013, 09:23) Не меш...   Apr 25 2013, 09:08
|- - Fedor   Цитата(Sergey1212 @ Apr 25 2013, 15:08) А...   Apr 25 2013, 09:46
- - Sergey1212   Вот lds: CODEOUTPUT_FORMAT("elf32-littlearm...   Apr 25 2013, 10:57
|- - Fedor   КодpTranslationTable[i] = i << 20 ...   Apr 25 2013, 14:08
- - Genadi Zawidowski   При работе периферии с прямым доступом к памяти (P...   Apr 25 2013, 17:36
- - taoga   Вот код инициализации MMU из softpack для sam9g35....   Apr 25 2013, 18:28
- - taoga   Для измерения скорости работы проца можно использо...   Apr 25 2013, 18:55
- - Sergey1212   Да пожалуй на пока инфы и примеров достаточно, над...   Apr 25 2013, 19:06


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

 


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


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