|
Расчёт скорости GPIO, какова максимальна скорость дрогонья и чтения? |
|
|
|
Dec 22 2008, 11:23
|

пуля
   
Группа: Свой
Сообщений: 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 МГц должно разгонять)
|
|
|
|
|
Dec 22 2008, 12:40
|

пуля
   
Группа: Свой
Сообщений: 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
|
|
|
|
|
Dec 22 2008, 15:58
|
.
     
Группа: Участник
Сообщений: 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, но при этом появится джиттер.
--------------------
Заблуждаться - Ваше законное право :-)
|
|
|
|
|
Dec 22 2008, 18:05
|

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

|
Цитата Кроме того, неясно, кроме чтения/записи в порт будет какая-то основная прога выполняться? Если да, то придётся делать через FIQ, но при этом появится джиттер. Да будет конечно... Необходимо с 2 АЦП в течении порядка 2 мс, с переодичностью 2 мкс, опрашивать байты (8 линий). Кстати забыл совсем, что необходимо сначала с одного сосчитать 2 бита и потом с другого 2 бита. Между чтениями битов переключать "старший/младший"(byteswap помоему) и на всё это 900 нс. Т.е. на каждую ацп по 450 нс. По программе: запускаем конвертирование (1 на ногу КОНВ) и ждём когда бизи в ноль упадёт... Как лучше всего "ждать бизи"? по прерыванию или по опросу? В это время не на что не отвлекаюсь... все прерывания стороние не интересуют. А джитер будет больше 1 - 2 тактов?
|
|
|
|
|
Dec 22 2008, 19:00
|
Гуру
     
Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448

|
Цитата(bullit @ Dec 22 2008, 21:05)  Как лучше всего "ждать бизи"? по прерыванию или по опросу? В это время не на что не отвлекаюсь... все прерывания стороние не интересуют. Однозначно по опросу. Цитата(bullit @ Dec 22 2008, 21:05)  А джитер будет больше 1 - 2 тактов? Да, и значительно больше.
|
|
|
|
|
Dec 23 2008, 04:46
|
.
     
Группа: Участник
Сообщений: 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
--------------------
Заблуждаться - Ваше законное право :-)
|
|
|
|
|
Dec 23 2008, 04:59
|

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

|
Цитата А эти две миллисекунды нельзя полностью "посвятить" работе с АЦП? Было бы неплохо и очень надёжно. Именно 2 мс буду отданы на АЦП... Цитата Ждать бизи лучше по тактам, если известно сколько оно длится. А если он длится больше 400 нс, то становится долго его ждать по опросу, и можно в лимит не уложиться Т.к. конвертирование на двух АЦП я запускаю одновременно, то ждать буду на каком АЦП появится раньше, с того и начну опрос. Известно, что от запуска конвертирования до спада бизи в ноль как максимум 1100нс. Получается на опрос с двух АЦП 900нс максимум. Думаю всё таки зациклить опрос бизи... делать паралельно нечего... жди приход да и всё... Главное успеть за 900нс опросить оба АЦП. А вот по поводу запуска конвертирования: лучше на таймер 2 мкс отсчёт сделать? потому как более надёжного способа я не вижу...
|
|
|
|
|
Dec 23 2008, 09:46
|

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

|
У меня обе АЦПшки висят на одном порту. АЦП имеет 3 состояние, управляемое CS и RD. Заводить бизи с двух АЦП на одну ногу - значит не иметь информации с какого именно АЦП пришло. Использовать отдельные порты МК для каждого АЦП и накладно (трудно развести плату), да и портов нет. Потому как возможно часть свободных портов может уйти на другие нужды. Наверое рисунок схемы будет Вам полезен. А то всплывают каждый раз новые подробности... файл бмп в архиве (с 2 Мб до 57 кб  ). Цитата Оба варианта медленные. Лучше так: считали 2 бита, если оба равны нулю, то начинаем считывать АЦП. Считываем всегда в одном порядке. Иначе потеряете вагон времени. Получается что ждём пока оба не закончут конвертирование. В принципе вариант хорош тем, что шумы при работе МК не пройдут на другой АЦП, который в это время будет опрашиваться... А так только по одной линии - что в принципе снизит уровень "помех наводок". НО тогда надо иметь хороший запас во времени. И еще хотел сросить про организацию сохранения результатов в памяти. Можно ли силами си/си++ организовать массив или что-то подобное. И еще: как вы можите видеть: старший бит АЦП на "месте" младшего бита мк. Как можно "перевернуть" данные? Хотя это можно сделать и позднее на ПК. Сделано так с точки зрения разводки платы, нет перекрёсных цепей.
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|