Jump to content

    

kiko

Участник
  • Content Count

    13
  • Joined

  • Last visited

Community Reputation

0 Обычный
  1. Имеется плата Arrow SocKit, с гигом ddr3 памяти подцепленной к фпга части. Если использовать софт-контроллер, то через hps2fpga шлюз можно добиться скорости записи где то ~240мбит/с, это если верить расчетам и софту из статьи на хабре(Поднимаем SOC: ARM + FPGA). Скорость чтения в 1,5-2 раза меньше. С он-чип памятью скорость чтения и записи почти одинаковая. У меня непонятки с использованием аппаратного контроллера. pll_ref_clk памяти клокается от 50мгц с топа, частота памяти 300мгц, Rate on Avalon MM - Full. Аfi_clk из контроллера используется для тактирования h2f_axi_clock в hps и Altera PLL, с которого 50мгц идет на переферию. На MPFE (mp_wfifo_clk, mp_rfifo_clk, mp_cmd_clk) клок также с топа, потому что если взять с плл того, то почемуто иногда глючит, зависимость не отловил пока. Если клок для фифо увеличить до 100, то как повезет, или пишется с ошибками или виснет все, хотя написано что частота может быть до "...one-half of the memory interface frequency...", тоесть до 150мгц в моем случае. Скорость записи в такой схеме ~145мбит/с, чтения соответственно ~70мбит/с, а это как то не прилично даже. Если увеличить частоту памяти до 350 софт также регулярно виснет. В qsys есть готовый пресет для памяти, которая установлена, но в ней тайминги почему отличаются от тех которые в модели на оффсайте, да и с ними глючит запись. Результаты примерно такие: софт контроллер память 300мгц запись: root@socfpga:~# time ./memclock 0 0xc0000000 0x10000 1000 real 0m9.194s user 0m9.180s sys 0m0.000s чтение: root@socfpga:~# time ./memclock 2 0xc0000000 0x10000 1000 real 0m17.743s user 0m17.730s sys 0m0.000s память 400мгц root@socfpga:~# time ./memclock 0 0xc0000000 0x10000 1000 real 0m8.535s user 0m8.520s sys 0m0.000s root@socfpga:~# time ./memclock 2 0xc0000000 0x10000 1000 real 0m14.676s user 0m14.660s sys 0m0.000s hard EMI 300мгц память, 50мгц фифо root@socfpga:~# time ./memclock 0 0xc0000000 0x10000 1000 real 0m14.442s user 0m14.430s sys 0m0.000s root@socfpga:~# time ./memclock 2 0xc0000000 0x10000 1000 real 0m29.353s user 0m29.330s sys 0m0.000s последние 3 числа это адрес, сколько слов записать и сколько раз повторить. Если фифо до 100 поднять то записывает за ~12сек, но, как указано выше стабильности никакой. Скорость чтения - отдельные танцы. Думал что тормозит так потомучто цикл 1000 раз(типа как рандомное чтение), но пробовал писать цельный блок, без повторов, результат такойже. Тайминги из сэплов. Память, h2f bridge и Avalon MM burst length 32бита. С ддр памятью раньше не работал. Как разогнать?. Где подкрутить?
  2. ноги у sam7s64

    Может поделишься в таком случае инитом spi и лап?
  3. ноги у sam7s64

    В меге нету этого бита, так что в арме скорее всего тоже не надо, да и проблема всетаки в лапах, т.к. я пробывал дергать ими на арме, а команду слать с меги и все равно не работало.
  4. ноги у sam7s64

    Пытаюсь подключить дисплей о S65 к sam7s64. Переписал код с примера для атмеги128, но естественно не работает ) вот код для меги: PORTB &= ~_BV(PB7); //LED DDRB |= _BV(PB7); PORTE &= ~_BV(LCD_RESET); DDRE |= _BV(LCD_RESET); PORTB |= _BV(LCD_MOSI); DDRB |= _BV(LCD_MOSI); PORTE &= ~_BV(LCD_CS); DDRE |= _BV(LCD_CS); PORTB &= ~_BV(LCD_SCK); DDRB |= _BV(LCD_SCK); PORTE |= _BV(LCD_RS); // not used from LPH display DDRE |= _BV(LCD_RS); // setup SPI Interface SPCR = _BV(MSTR) | _BV(SPE) | _BV(SPR0); SPSR = 1; // double speed bit void lcd_write(uint8_t dat) { SPDR= dat; while (!(SPSR & _BV(SPIF))); } void lcd_dat0(uint8_t dat) { lcd_write(dat); lcd_write(0x00); } void lcd_init(void) { uint8_t i; PORTE &= ~_BV(LCD_RESET); // reset display PORTE |= _BV(LCD_CS); // CS is high during reset release PORTE |= _BV(LCD_RS); // RS is set to high PORTE |= _BV(LCD_RESET); // release reset PORTE &= ~_BV(LCD_CS); // select display PORTE &= ~_BV(LCD_RS); lcd_dat0(DISON); PORTE |= _BV(LCD_CS); // deselect display } SPI на 2MHz вроде как работает. а вот для арма: pPIO->PIO_PER = lcdCS | lcdRS |lcdRES; pPIO->PIO_OER = lcdCS | lcdRS |lcdRES; pPMC->PMC_PCER = 1<<AT91C_ID_PIOA; pPIO->PIO_SODR = lcdRS; pPIO->PIO_PDR = mosi | miso | spck; pPIO->PIO_ASR = mosi | miso | spck; pPIO->PIO_BSR = 0; pPMC->PMC_PCER = 1<<AT91C_ID_SPI; pSPI->SPI_CR = AT91C_SPI_SPIEN | AT91C_SPI_SWRST; pSPI->SPI_MR = AT91C_SPI_MSTR; pSPI->SPI_CSR[PCS0]= (AT91C_SPI_BITS_8 * AT91C_SPI_BITS /0x0f) | (0x18 *AT91C_SPI_SCBR / 0xff ); pSPI->SPI_CR = AT91C_SPI_SPIEN; void lcdwr(u08 out) { out &= 0xFF; while(!(AT91C_BASE_SPI->SPI_SR & AT91C_SPI_TXEMPTY)); AT91C_BASE_SPI->SPI_TDR =out; } void lcd_dat(u08 dat){ lcdwr(dat); lcdwr(0x0); } void init_lcd_2(void){ pPIO->PIO_CODR = lcdRES; pPIO->PIO_SODR = lcdCS; pPIO->PIO_SODR = lcdRS; pPIO->PIO_SODR = lcdRES; pPIO->PIO_CODR = lcdCS; pPIO->PIO_CODR = lcdRS; lcd_dat(DISON); pPIO->PIO_SODR = lcdCS; } Ноги дергаются проверял, спи тоже работает (моси с мисо коротил смотрел что вернется), но дисплей игнорит. Задержки вставлял между командами, делал подтяжку всех ног на массу, потом на 3,3в безрезультатно. Плата олимекса sam7-p64. В чем может быть дело? Неужели силы не хватает?
  5. У кого есть такая плата, поделитесь рабочим примером.
  6. Да, готовые. Все включил. з.ы. просил чела одного чтоб пример сделал для проверки us0 us1 dbgu, тоже самое )
  7. Есть отладочная плата от Olimex SAM7-P64 пробую настроить USART. Проблема в том что вывести инфу могу только с USART0, прерывание TXRDY не работает(остальные робят).DBGU и USART1 не работают вообще, всмысле не могу не вывести инфу с них, не получить. Пробывал кучу разных примеров, безрезультатно, макс вроде жив, тк если коротнуть T/R то эхо в консоле есть. Вопрос: как можно определить что за хрень? Порты живые.
  8. Меня тоже интересует запаяный вариант, сколько она будет стоить?
  9. А где можно почитать описание этой платы, что есть на ней? И как она выглядит вообще. з.ы. не нашел, может плохо искал...
  10. литература

    ее я тоже читал, как начинающий скажу что не очень понравилось, в основном тоже самое что и на гаве. Nixon, ты имел ввиду стандартные примеры? з.ы. Заодно может ктонить сказать в где ошибка: настраиваю перываение на irq0, 1 раз срабатывает, а потом нет, пробовал заново разрешать его, все равно. Все делаю через функции lib_at91sam7s64.
  11. литература

    Я читал это, хотелось бы с примерами
  12. литература

    Есть ли какая нибудь литература по at91sam7 процам, типа как книга Мартина по филипсам, всмысле как с портами работать и прочее. Вроде не сильно замудрено, но все равно мало че понятно ). А кроме хидеров нету ничего. На форму искал не нашел, мож плохо искал?
  13. Не могу понять почему криво работает: .include "m128def.inc" .def tmp1 = r16 .cseg .org 0 rjmp start start: ldi tmp1,low(ramend) out spl, tmp1 ldi tmp1, high(ramend) out sph, tmp1 ldi tmp1,$ff out ddrb,tmp1 clr tmp1 out portb,tmp1 sbi portb,pb6; LED on rcall get_info;fnc.inc cbi portb, pb6; LED off loop_: rjmp loop_ ret .include "fnc.inc" а вот код в fnc.inc get_info: push r18 pop r18 ret Проблема в том, что при попытки выхода из get_info, мега резетится и возвращается на начало, а если убрать пуш/поп то все нормально. В чем может быть причина? з.ы. в протеусе работает нормально, а в мк нет