Цитата(druzhin @ Jul 4 2014, 22:42)

У меня есть рабочие проекты на Spartan-6 по приёму данных с АЦП LTC2157.
Было бы интересно взглянуть, хотя может сначала стоит своих шишек набить.
А то у меня сегодня микроблейз на внешние прерывания напрочь отказывался реагировать.
Бывает, застряну на какой-то мелочи и сижу по пол дня.
Цитата(doom13 @ Jul 4 2014, 20:37)

Да, и расскажите, как Вы считываете свои данные с памяти, а то что-то дружно тут много всего наговорили.
В моём варианте двухпортовая память в один порт ацп пишет
по два значения (14бит) в один регистр (32бит), а
вторым портом она на PLB шине (пока что микроблейза):
#define XPAR_XPS_SHARED_BRAM_IF_CNTLR_BASEADDR 0xA0000000
Указатель на эту память:
#define pData ((char*)0xA0000000)
копирую:
memcpy(pbuf_to_be_sent->payload,pData,STR_SIZE);
отправляю:
err = udp_send(pcb, pbuf_to_be_sent);
Хочу научиться понимать и работать со всеми вариантами обмена данными,
но пока иду от простого к сложному.
Не пинайте сильно, не всегда с новыми понятиями легко разобраться, такими как DMA.
Периодически, даю команду читать ацп и писать в память до заполнения,
складывая два значения в один регистр.
Дергаю ногу прерывания микроблейза флагом, что память заполнена,
по этому прерыванию пытаюсь читать данные и отправлять пакет.
Пока что заткнулся на прерывании микроблейза. Упорно не хочет работать, хотя раньше с ним проблем не было. (Может я импульс короткий даю на прерывание? он порядка 100 ns)
До этого, писал в эту память 4 мкс сигнала, ждал 200 ms и снова писал,
а проц выгребал оттуда 10 раз в секунду данные со своей, уж не знаю какой скоростью, и посылал пакеты.
В таком варианте сигнал приходил порезанный на несколько кусков в разных фазах.
При этом, если снизить частоту тактирования АЦП раз в 10, то сигнал приходил
без искажений.
Я пока только учусь, хочу попробовать как не правильно делать и как правильно.
Всем большое спасибо за поддержку.