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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> Расчёт скорости GPIO, какова максимальна скорость дрогонья и чтения?
bullit
сообщение Dec 22 2008, 11:23
Сообщение #1


пуля
****

Группа: Свой
Сообщений: 674
Регистрация: 10-05-06
Из: Уфа
Пользователь №: 16 959



День добрый всем!

Прошу помочь с расчётом.
Есть мк LPC2194. Необходимо проделать следующее
1) считать значение порта Р0 с 0 по 7 (8 линий)
2) с "0" на "1" переключить одну ногу(не из тех 8 линий)
3) снова считать значение (1)
4) значения по байтно записывать в память оперативную
Условия:
- и на всё это отводится не более 900 нс.
- цикл (1-4) повторяется раз в 2 мкс
- VPBDIV = 0 , т.е. деления частоты для переферии нет = частоте тактирования проца. (хотя не уверен)
- Кварц 10МГц, с ФАПЧ 60 МГц.

Можно ли успеть?
Думаю асм вставку придётся делать... + код в оперативу кидать...

К сожелению генератора под рукой нет... чтоб проверить.

А смысл в следующем: у ацп есть функция смена местами на выводах старшую и младшую байт, тем самым используя 8 линий сосчитать 16 бит. Для этого нужно "менять" уровень на определённой ноге.

Уж не знаю с какой скорость читать будет... но обычный "дрогатель":
Код
IO0SET = 0x40000000;
IO0CLR = 0x40000000;
Дал мне максимум 2,5 МГц при расположение кода в оперативе... Это максимум? (правда сейчас стоит проц 2294 и кварц 14,7456 МГц и ФАПЧ до 56 МГц должно разгонять)
Go to the top of the page
 
+Quote Post
GetSmart
сообщение Dec 22 2008, 12:03
Сообщение #2


.
******

Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753



Для IOPIN, IOSET, IOCLR запись в порт 7 тактов, чтение порта 8 тактов. В последних ревизиях (/01) работая через быстрые регистры периферии запись будет 2 такта, чтение 3 такта.

Вне зависимости откуда выполняется прога - из рамы или из флэша.


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post
bullit
сообщение Dec 22 2008, 12:40
Сообщение #3


пуля
****

Группа: Свой
Сообщений: 674
Регистрация: 10-05-06
Из: Уфа
Пользователь №: 16 959



МК именно 01. (только сейчас на олимексовской плате тренеруюсь H2294(старый, не 01))
А что за быстрые регистры? Они: IOPIN, IOSET, IOCLR?

А есть воопче смысл в рам кидать? и для каких операций?

Цитата
Вне зависимости откуда выполняется прога - из рамы или из флэша.
А в мануале прочёл:
Код
For the best performances, compile this code in the ARM mode and execute
from the on-chip SRAM memory.
и код:
ldr r0,=0xe01fc1a0 /*register address--enable fast port*/
mov r1,#0x1
str r1,[r0] /*enable fast port0*/
ldr r1,=0xffffffff
ldr r0,=0x3fffc000 /*direction of fast port0*/
str r1,[r0]
ldr r0,=0xe0028018 /*direction of slow port 1*/
str r1,[r0]
ldr r0,=0x3fffc018 /*FIO0SET -- fast port0 register*/
ldr r1,=0x3fffc01c /*FIO0CLR0 -- fast port0 register*/
ldr r2,=0x00001000 /*select fast port 0.12 for toggle*/
ldr r3,=0xE0028014 /*IO1SET -- slow port1 register*/
ldr r4,=0xE002801C /*IO1CLR -- slow port1 register*/
ldr r5,=0x00100000 /*select slow port 1.20 for toggle*/
/*Generate 2 pulses on the fast port*/
str r2,[r0]
str r2,[r1]
str r2,[r0]
str r2,[r1]
/*Generate 2 pulses on the slow port*/
str r5,[r3]
str r5,[r4]
str r5,[r3]
str r5,[r4]
loop: b loop
Получается есть эфект?

Т.е. регистры FIO0MASK FIO0PIN
Go to the top of the page
 
+Quote Post
GetSmart
сообщение Dec 22 2008, 15:58
Сообщение #4


.
******

Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753



Цитата(bullit @ Dec 22 2008, 17:23) *
...
Условия:
- и на всё это отводится не более 900 нс.
- цикл (1-4) повторяется раз в 2 мкс
- VPBDIV = 0 , т.е. деления частоты для переферии нет = частоте тактирования проца. (хотя не уверен)
- Кварц 10МГц, с ФАПЧ 60 МГц.

Можно ли успеть?
Думаю асм вставку придётся делать... + код в оперативу кидать...
Успеть можно. На асме не напрягаясь даже на старых чипах. Без использования рамы.

Цитата
Получается есть эфект?
Чуть быстрее предвыборка после перехода. Возможно 1-2 такта. Ещё быстрее выполняются команды типа:
Код
ldr r4,=0xE002801C
А линейный код из рамы и флэша исполняется одинаково быстро.

Кроме того, неясно, кроме чтения/записи в порт будет какая-то основная прога выполняться? Если да, то придётся делать через FIQ, но при этом появится джиттер.


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post
bullit
сообщение Dec 22 2008, 18:05
Сообщение #5


пуля
****

Группа: Свой
Сообщений: 674
Регистрация: 10-05-06
Из: Уфа
Пользователь №: 16 959



Цитата
Кроме того, неясно, кроме чтения/записи в порт будет какая-то основная прога выполняться? Если да, то придётся делать через FIQ, но при этом появится джиттер.

Да будет конечно...
Необходимо с 2 АЦП в течении порядка 2 мс, с переодичностью 2 мкс, опрашивать байты (8 линий). Кстати забыл совсем, что необходимо сначала с одного сосчитать 2 бита и потом с другого 2 бита. Между чтениями битов переключать "старший/младший"(byteswap помоему) и на всё это 900 нс. Т.е. на каждую ацп по 450 нс.
По программе: запускаем конвертирование (1 на ногу КОНВ) и ждём когда бизи в ноль упадёт... Как лучше всего "ждать бизи"? по прерыванию или по опросу? В это время не на что не отвлекаюсь... все прерывания стороние не интересуют.

А джитер будет больше 1 - 2 тактов?
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Dec 22 2008, 19:00
Сообщение #6


Гуру
******

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



Цитата(bullit @ Dec 22 2008, 21:05) *
Как лучше всего "ждать бизи"? по прерыванию или по опросу? В это время не на что не отвлекаюсь... все прерывания стороние не интересуют.

Однозначно по опросу.

Цитата(bullit @ Dec 22 2008, 21:05) *
А джитер будет больше 1 - 2 тактов?

Да, и значительно больше.
Go to the top of the page
 
+Quote Post
GetSmart
сообщение Dec 23 2008, 04:46
Сообщение #7


.
******

Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753



Цитата(bullit @ Dec 23 2008, 00:05) *
Да будет конечно...
Необходимо с 2 АЦП в течении порядка 2 мс, с переодичностью 2 мкс, опрашивать байты (8 линий). Кстати забыл совсем, что необходимо сначала с одного сосчитать 2 бита и потом с другого 2 бита. Между чтениями битов переключать "старший/младший"(byteswap помоему) и на всё это 900 нс. Т.е. на каждую ацп по 450 нс.
По программе: запускаем конвертирование (1 на ногу КОНВ) и ждём когда бизи в ноль упадёт... Как лучше всего "ждать бизи"? по прерыванию или по опросу? В это время не на что не отвлекаюсь... все прерывания стороние не интересуют.?
А эти две миллисекунды нельзя полностью "посвятить" работе с АЦП? Было бы неплохо и очень надёжно. Ждать бизи лучше по тактам, если известно сколько оно длится. А если он длится больше 400 нс, то становится долго его ждать по опросу, и можно в лимит не уложиться.

Цитата
А джитер будет больше 1 - 2 тактов?
Намного больше. В среднем вход в FIQ будет задержан на 4 такта. Минимум 0 (или 1 - хз), максимум около 20, но недавно исследуя этот вопрос выше 17 я не смог получить, хотя использовал в коде самые длинные команды LDM и STM.

Сообщение отредактировал GetSmart - Dec 23 2008, 04:48


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post
bullit
сообщение Dec 23 2008, 04:59
Сообщение #8


пуля
****

Группа: Свой
Сообщений: 674
Регистрация: 10-05-06
Из: Уфа
Пользователь №: 16 959



Цитата
А эти две миллисекунды нельзя полностью "посвятить" работе с АЦП? Было бы неплохо и очень надёжно.

Именно 2 мс буду отданы на АЦП...
Цитата
Ждать бизи лучше по тактам, если известно сколько оно длится. А если он длится больше 400 нс, то становится долго его ждать по опросу, и можно в лимит не уложиться

Т.к. конвертирование на двух АЦП я запускаю одновременно, то ждать буду на каком АЦП появится раньше, с того и начну опрос. Известно, что от запуска конвертирования до спада бизи в ноль как максимум 1100нс. Получается на опрос с двух АЦП 900нс максимум.
Думаю всё таки зациклить опрос бизи... делать паралельно нечего... жди приход да и всё...
Главное успеть за 900нс опросить оба АЦП.
А вот по поводу запуска конвертирования: лучше на таймер 2 мкс отсчёт сделать? потому как более надёжного способа я не вижу...
Go to the top of the page
 
+Quote Post
GetSmart
сообщение Dec 23 2008, 05:14
Сообщение #9


.
******

Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753



Цитата(bullit @ Dec 23 2008, 10:59) *
А вот по поводу запуска конвертирования: лучше на таймер 2 мкс отсчёт сделать? потому как более надёжного способа я не вижу...
Можно использовать функцию MATx.x на некоторых пинах проца. Она может инвертироваться строго по таймеру. Можно на ней сделать меандр 2 мкс. А в основной процедуре крутиться и ждать "бизи". Потом считывать значения. MATx.x не имеет джиттера и, как я понял, будет запускать оба АЦП одновременно.


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Dec 23 2008, 06:50
Сообщение #10


Гуру
******

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



Цитата(bullit @ Dec 23 2008, 07:59) *
Т.к. конвертирование на двух АЦП я запускаю одновременно, то ждать буду на каком АЦП появится раньше, с того и начну опрос.

Не советую: на этой нехитрой логике Вы потеряете времени больше, чем теоретически можно отыграть на разности времени преобразования. Смотрите оба BUSY вместе.
Go to the top of the page
 
+Quote Post
bullit
сообщение Dec 23 2008, 07:30
Сообщение #11


пуля
****

Группа: Свой
Сообщений: 674
Регистрация: 10-05-06
Из: Уфа
Пользователь №: 16 959



Чесно говоря не понял что Вы предлогаете.
Я считывать буду с обоих входов (бизи), а уж кто первый, тот и первый в опрос уйдёт.
Бизи активен нулём.
1) считали два бита
2) умножили на маску. если равен нуля то определяем какой из них, опятьже маской.
или:
1) опросили одну ногу, равна ли 0, то вперёд
2) опросили вторую, равна ли 0, то вперёд.

Ну вроде как 2 вариант быстрее...
Go to the top of the page
 
+Quote Post
GetSmart
сообщение Dec 23 2008, 07:49
Сообщение #12


.
******

Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753



Цитата(bullit @ Dec 23 2008, 13:30) *
...
Ну вроде как 2 вариант быстрее...

Быстрее будет первый вариант когда оба бита бизи висят на одном порте. Т.о. считали IOPIN, умножили на маску и... туды или сюды. Если оба в еденице, то декрементируйте счётчик опроса (для защиты от зависона). Если ещё не конец, то снова на чтение IOPIN. Если конец, то выход, АЦП зависло.


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Dec 23 2008, 08:23
Сообщение #13


Гуру
******

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



Цитата(bullit @ Dec 23 2008, 10:30) *
Ну вроде как 2 вариант быстрее...

Оба варианта медленные. Лучше так: считали 2 бита, если оба равны нулю, то начинаем считывать АЦП. Считываем всегда в одном порядке. Иначе потеряете вагон времени.
Go to the top of the page
 
+Quote Post
bullit
сообщение Dec 23 2008, 09:46
Сообщение #14


пуля
****

Группа: Свой
Сообщений: 674
Регистрация: 10-05-06
Из: Уфа
Пользователь №: 16 959



У меня обе АЦПшки висят на одном порту. АЦП имеет 3 состояние, управляемое CS и RD.
Заводить бизи с двух АЦП на одну ногу - значит не иметь информации с какого именно АЦП пришло. Использовать отдельные порты МК для каждого АЦП и накладно (трудно развести плату), да и портов нет. Потому как возможно часть свободных портов может уйти на другие нужды.

Наверое рисунок схемы будет Вам полезен. А то всплывают каждый раз новые подробности... файл бмп в архиве (с 2 Мб до 57 кб smile.gif ).


Цитата
Оба варианта медленные. Лучше так: считали 2 бита, если оба равны нулю, то начинаем считывать АЦП. Считываем всегда в одном порядке. Иначе потеряете вагон времени.
Получается что ждём пока оба не закончут конвертирование. В принципе вариант хорош тем, что шумы при работе МК не пройдут на другой АЦП, который в это время будет опрашиваться... А так только по одной линии - что в принципе снизит уровень "помех наводок". НО тогда надо иметь хороший запас во времени.

И еще хотел сросить про организацию сохранения результатов в памяти. Можно ли силами си/си++ организовать массив или что-то подобное.
И еще: как вы можите видеть: старший бит АЦП на "месте" младшего бита мк. Как можно "перевернуть" данные? Хотя это можно сделать и позднее на ПК. Сделано так с точки зрения разводки платы, нет перекрёсных цепей.
Прикрепленные файлы
Прикрепленный файл  ADC_and_uC.rar ( 57.75 килобайт ) Кол-во скачиваний: 24
 
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Dec 23 2008, 09:56
Сообщение #15


Гуру
******

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



Цитата(bullit @ Dec 23 2008, 12:46) *
НО тогда надо иметь хороший запас во времени.

Вы же их запускаете одновременно, какой запас по времени? За время между сбросами BUSY разных АЦП Вы ровным счетом ничего не успеете сделать.
Go to the top of the page
 
+Quote Post

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

 


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


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