Свежие обсуждения
Измерения

Осц.-пр. к ПК версия 2 (упрощенная)

1 29 44

AnSi: а зачем меандр ?
60\2=30мгц - мега не потянет

Может ей так захочется(это только написано,что полностью статическая) , а запас , сами знаете...

Wladimir_TS: в обеспечении работы FIFO в 2 кБ
Да хватит и 32-64 байт , на время пока проц раскачается, на прерывание выйдет.

 

Wladimir_TS

Простой осцил на контроллере (развитие идеи автора темы) прибору на ПЛИС не конкурент, но тоже в некотором смысле интересен. Это скорее две параллельные ветки обсуждения.

AnSi

В данном случае это пара ldr + str. Я так понял (может быть и неверно), ldr выполняется минимум 3 такта, str 2. Проверю на макетке скорее всего в понедельник. На AVR похожая фигня, хоть и пишут 1MIPS/MHz, команды чтения/записи в память и переходов выполняются несколько тактов.

Но без кольцевого буфера не очень интересно. По мне так фиг с ней со скоростью, пусть даже пара мегасэмплов будет.

Плохо ещё то, что АЦП скорее всего придется гонять на частоте проца. Большая часть тактов вхолостую.

 

caddr - ldr выполняется минимум 3 такта, str 2. -- там конвеер -сколько тактов без разницы
caddr- Но без кольцевого буфера не очень интересно. -- вот я и думаю может поставить всетаки 3-4 меги - реальный буфер и 20мсемплов даст (больше редко надо - звук, видео покажет, а для радистов и 40 мало)

 

Самый необходимый - это поиск "гонок импульсов" в цифровых устройствах. Я на работе много аппаратуры поднял, когда дорвался до запоминающего осцила с порлосой в 100 МГц и увидел наконец эти паразитные импульсы, о которых с1-94 просто не пог догадаться.

 

проги на меги кажись написал, а вот а АЦП заминка пока нет.
предвыборка до "программной" синхронизации кажись получисась нормально, без выпадений тактов.
подскажите какие ещё АЦП можно поставить??? чтоб побыстрей найти.

 

AnSi

Проверил на макетной плате, результат при MCK = 48МГц, FWS = 1:

NOP = 1 такт если код в ОЗУ, 2 такта если код во флеше.
LDR+STR (с пост-инкрементом) = 6 тактов если код в ОЗУ, 8 тактов если код во флеше.

Фигню Вы спороли, получается. Максимальная частота дискретизации при MCK = 48 МГц выходит 8 МГц если код в ОЗУ, и 6 МГц если код во флеше. Что и было сказано ещё на 26-ой странице темы : - )

 

уточните как и что проверяли.
я про такты не говорил, речь шла о снятии 24мсем при 48м тактовой - смотрите выше на этой странице.

 

led_on(); /* Включить светодиод */
for (i = 0; i < 1000000; ++i) fetch();
led_off(); /* Выключить светодиод */

Функция fetch() на GNU ASM:


.equ PIOA_BASE, 0xFFFFF400
.equ PIO_PDSR, 0x003C

.bss
buffer: .skip 1024

.text /* or .data to place code into SRAM */
.global fetch

.func fetch
fetch:
ldr r1, =(PIOA_BASE + PIO_PDSR) /* r1 := address of input port */
ldr r2, =buffer /* r2 := address of buffer[0] */
.rept 256
ldr r0, [r1] /* Read sample into r0 */
str r0, [r2], #4 /* Store sample; r2 := r2 + 4 */
.endr
bx lr /* Return */
.endfunc

.end

Секундомером засекалось время свечения светодиода.
Число тактов на пару LDR+STR = round(48 * время_в_секундах / 256)

 

т.е. конвеер не работает ???
вы сохраняете регистр, почему не порт ???
чесно говоря я уже сделал на мегах, и лучше на ат91 врядли получится - всётаки многопроцессорность это сила - работает НЕПРЕРЫВНЫЙ полноразмерный(вся ОЗУ) кольцевой FIFO(20мсемплов) который в ЛЮБОЙ момент можно остановить и считать, регулируемая задержка остановки от синхро, а не старт записи по синхро(надеюсь разница понятна ), на ОДНОЙ ат91 это точно не получится.
пока думаю что ещё можно всунуть.

 

Лучше так
ldr r0, [r1]
str r4, [r2, #4]
ldr r3, [r1]
str r5, [r2, #8]
ldr r4, [r1]
str r0, [r2, #12]
ldr r5, [r1]
str r3, [r2, #16]

ldr r0, [r1]
str r4, [r2, #20]
ldr r3, [r1]
str r5, [r2, #24]
ldr r4, [r1]
str r0, [r2, #28]
ldr r5, [r1]
str r3, [r2, #32]
....... еще много раз
надеюсь так будет быстрее