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

 
 
> Кто работал с ADV212
alexPec
сообщение Oct 13 2014, 15:59
Сообщение #1


Профессионал
*****

Группа: Свой
Сообщений: 1 284
Регистрация: 9-04-06
Пользователь №: 15 968



Добрый день всем. Спаяли железо с ADV212, начинаю запускать. Сразу беда - не читаются прямо адресуемые регистры. Точнее читаются, но не те значения что я пишу.

Сигналы подаю по даташиту, дожидаюсь АСК от чипа (он приходит).

Делаю так:

1.Подаю питание (в норме, проверял)
2.Подаю клок 20МГц на МCLK
3.Подаю отрицательный импульс на reset
4.По адресу (прямому) 0xF пишу число 4
5.По адресу (прямому) 0xЕ пишу число 8
6.Читаю адрес 0xE - получаю 0x8B
7.Читаю адрес 0xF - получаю 0xB.

Клок померял прямо на шарике ADV212 - 20МГЦ приходит.
Сигналы RD, WR,CS - думаю тоже нормально доходят, поскольку ACK от чипа приходит и на чтение, и на запись.
Данные и адреса (он идут с ПЛИС) смотрел сигнал-тапом, все в норме.

При чтении регистров (прямых) всех кроме BUSMODE, MMODE, PLL_HI, PLL_LO ACK от чипа не приходит.

Кто что может посоветовать, что еще проверить? Похоже не запускается PLL внутренняя, есть там какие-то хитрости? Хотя написано, что регистры BUSMODE, MMODE, PLL_HI, PLL_LO не требуют клока вообще.
Мысль только менять чип, охота услышать мнение специалиста, работавшего с этим чипом.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Alex11
сообщение Oct 26 2014, 20:47
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 2 106
Регистрация: 23-10-04
Из: С-Петербург
Пользователь №: 965



Вот теперь и Вы добрались до глюкавых мест. Вы считываете это все на полной скорости программы или в отладчике? Мы видели зависимость от задержек между записями в регистры, сейчас уже не помню точно между какими. Попробуйте посмотреть на нашу инициализацию, может быть поможет:
Код
int adv_init(int pal, unsigned long bit_rate, unsigned short skip_field)
{
  const unsigned short *fw = (const unsigned short *)adv_enc_fw;
  unsigned long fw_addr = ADV2X2_FIRMWARE_START_ADDR;
  unsigned int len = sizeof(adv_enc_fw)/sizeof(unsigned short);
  int err;
  uint32_t reg;

  // Load PLL
  ADV2X2_REG(ADV2X2_PLL_HI) = 0x0008;
  // Delay 20 uS
  DELAY_uS(20);
  // MCLK * 4 = 28.636 MHz * 4 = 114.544 MHz
  ADV2X2_REG(ADV2X2_PLL_LO) = 0x0004;
  // Delay 20 uS
  DELAY_uS(20);
  // Reboot
  ADV2X2_REG(ADV2X2_BOOT) = 0x008A;
  DELAY_uS(1000);
  // Host bus width = 16 bits, DMA bus width = 32 bits
  ADV2X2_REG(ADV2X2_BUSMODE) = 0x9;
  DELAY_uS(1000);
  // Indirect bus width = 16 bits, 16 bits increment
  ADV2X2_REG(ADV2X2_MMODE)  = 0x5;
  DELAY_uS(1000);

  // Upload firmware
  // Setup address of firmware
  ADV2X2_REG(ADV2X2_STAGE) = fw_addr>>16;
  ADV2X2_REG(ADV2X2_IADDR) = fw_addr;
  while (len--) {
    unsigned short data = *fw++;
    ADV2X2_REG(ADV2X2_IDATA) = (data >> 8) | (data << 8);
  }

  /* Start setting parameters */
  adv_enter_set_param();

  /* Firmware parameters */
  /* SET ENCODE PARAM */
  /* VFORMAT, PREC, XFORMLEV, UNI */
  /*
     Video Standard = PAL de-interlaced
     Precision      = 8bit
     Number of Wavelet Transform Levels = 5 (6 not recommended)
     Component Polarity = Unipolar (¤R<│_- бвRпвм ¤<п RЎ_Ёе бЁ_- <Rў Ё- з_ бЁ_- < ЄаЁўRc)
   */
  /* NTSC = 8, PAL = 9 */
  ADV_IWRITE_32(0x57F00L, (pal) ? 0x09000503L : 0x08000503L);

  /* CBSIZE, WKERNEL, STALLPAR, ATTRTYPE */
  /*
    Code Block Dimensions        = 64x64
    Wavelet Kernel               = Reversible 5x3 (lossless)
    Skip Fields in Encode Mode   = 0
    Attribute Data Output Format = Do not output attribute data
   */
  if (skip_field > 63) skip_field = 63;
  reg = 0x02010000 | ((uint32_t)skip_field<<8);
  debug_print("Reg skip field: ");
  debug_dump_hex((const char *)&reg, 4);
  debug_print("\r\n");
  ADV_IWRITE_32(0x57F04L, reg);

  /* RCTYPE, RCVAL */
  /*
   Rate Control Algorithm = Target size per video field or image within 5% of RCVAL
   RCVAL = Size of field or image in bytes
    PAL 50 field/sec, NTSC = 60 field/sec
    X = brate/(8*fields)
    10MBit 0x010061A8
    20Mbit 0x0100C350
   */
  if (bit_rate > 20*MEGABIT) bit_rate = 20*MEGABIT;
  else if (bit_rate < 1*MEGABIT) bit_rate = 1*MEGABIT;
  /* X = brate/(8*fields) */
  reg = 0x01000000 | (bit_rate/(8*((pal) ? 50 : 60)));
  ADV_IWRITE_32(0x57F08L, reg);

  /* J2KPROG, PICFG, QFACT, COD_STYLE */
  /*
   JPEG2000 Progression Style                 = LRCP
   Pixel Interface Bit Configuration Settings = 0
   Quantization Factor                        = 256/256 factor (1x)
   Output Code Stream Format                  = j2c, PPT, PLT, SOP, EPH
   */
#ifdef EAV_SAV_VMODE
  ADV_IWRITE_32(0x57F0CL, 0x000100F1L);
#else
  ADV_IWRITE_32(0x57F0CL, 0x004B00F1L);
#endif // EAV_SAV_VMODE


  //-----------------------------------------------------------------------------  
  /* PMODE1 */
  /* Cb/Y/Cr/Y interleaved, 8 bit */
  ADV_IWRITE_16(0xFFFF0400L, 0x0005);
  /* PMODE2 */
#ifdef EAV_SAV_VMODE
  ADV_IWRITE_16(0xFFFF0448L, 0x0031);
#else
  ADV_IWRITE_16(0xFFFF0448L, 0x003B);
#endif // EAV_SAV_VMODE

  /* VMODE */
#ifdef EAV_SAV_VMODE
  ADV_IWRITE_16(0xFFFF044CL, 0x0002);
#else
  ADV_IWRITE_16(0xFFFF044CL, 0x0006);
#endif // EAV_SAV_VMODE

  /* EDMOD0 register */
  ADV_IWRITE_16(0xFFFF1408L, 0x0002);

  /* EDMOD1 register */
  ADV_IWRITE_16(0xFFFF140CL, 0x0802);

  /* Pixel Threshold */
  ADV_IWRITE_16(0xFFFF1418L, 0x0080);

  /* CODE Threshold */
  ADV_IWRITE_16(0xFFFF141CL, 0x0080);

  /* Apply parameters */
  if (0 != (err = adv_exit_set_param())) return err;

  return 0;
}
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- alexPec   Кто работал с ADV212   Oct 13 2014, 15:59
- - Alex11   Странно это. Чип, конечно, кривенький, но не в это...   Oct 13 2014, 16:32
|- - alexPec   Цитата(Alex11 @ Oct 13 2014, 20:32) Стран...   Oct 14 2014, 07:03
- - Alex11   А длительности при этом достаточные? Там они опред...   Oct 14 2014, 16:16
|- - alexPec   Цитата(Alex11 @ Oct 14 2014, 20:16) А дли...   Oct 14 2014, 20:58
|- - alexPec   А что чип делает, если уставки размера картики (ак...   Oct 23 2014, 09:50
- - Alex11   Я не пытался ставить ему кривые параметры, он и пр...   Oct 24 2014, 18:03
|- - alexPec   Цитата(Alex11 @ Oct 24 2014, 22:03) Я не ...   Oct 25 2014, 11:13
- - Golikov A.   10 бит дает 1024 уровня 8 бит дает 256 уровней что...   Oct 25 2014, 14:44
|- - alexPec   Цитата(Golikov A. @ Oct 25 2014, 18:44) 1...   Oct 25 2014, 18:09
|- - alexPec   Спасибо за код. А можете показать кусок где запуск...   Oct 27 2014, 09:07
- - Alex11   Там дальше в запуске уже все специфично для нашего...   Oct 27 2014, 09:41
|- - alexPec   Цитата(Alex11 @ Oct 27 2014, 12:41) Там д...   Oct 27 2014, 11:36
- - Alex11   Да, источник пикселов. Я подаю через VData. Про ...   Oct 30 2014, 17:00
|- - alexPec   Цитата(Alex11 @ Oct 30 2014, 21:00) Про ...   Nov 2 2014, 19:31
- - russmakse   не могу прочитать данные из региста IDATA косвенно...   Apr 27 2017, 11:03
- - russmakse   RE: Кто работал с ADV212   Apr 27 2017, 14:25
- - Alex11   Вы уж меня извините, но я не готов разбираться с В...   Apr 27 2017, 21:41
- - russmakse   Как считать значение любого из внутренних регистро...   Apr 28 2017, 09:15
|- - alexPec   Цитата(russmakse @ Apr 28 2017, 13:15) Ка...   Apr 28 2017, 21:18
- - Alex11   Начните с простого - не меняйте PLL, а прочитайте ...   Apr 29 2017, 12:14


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

 


RSS Текстовая версия Сейчас: 25th August 2025 - 02:41
Рейтинг@Mail.ru


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