Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Время захвата PLL для BF532
Форум разработчиков электроники ELECTRONIX.ru > Цифровая обработка сигналов - ЦОС (DSP) > Алгоритмы ЦОС (DSP)
ATname
Кто в курсе как расчитывается время захвата (число клоков ожидания) PLL в зависимости от коэф.умножения и тактовой частоты задающего генератора? DSP BF532.
uriy
В Hardware Reference на стр. 8-11 написано что дополнительные данные по времени установки PLL можно найти в даташите на проц. Однако сколько не искал не нашел. А чем вас не устраивает значение PLL_LOCKCNT по умолчанию (0х0200)?
ATname
Цитата(urasinov @ Aug 30 2007, 12:46) *
В Hardware Reference на стр. 8-11 написано что дополнительные данные по времени установки PLL можно найти в даташите на проц. Однако сколько не искал не нашел. А чем вас не устраивает значение PLL_LOCKCNT по умолчанию (0х0200)?

Так у меня иное значение задающего генератора (не 27 МГц) и соответвственно иной коэф.умножения PLL, что ессесно должно повлечь за собой иное время на её установку. Есть подозрение что из-за этого проц. не выходит на рабочую ветку программы (виснет в старт-апе).
uriy
А где в Hardware Reference написано что 0х0200 это для частоты кварца 27 МГц? Я думаю 0х0200 это с запасом для всех допустимых частот кварца. Можно взглянуть на ваш код инициализации PLL? Вот мой работает без проблем.

#define MSEL(x) (((x)&0x3F) << 0x9)
#define SSEL(x) ((x)&0x0F)


intr_mask = cli();
*pPLL_CTL = 0 | MSEL(3);
*pPLL_DIV = 0 | SSEL(1);
idle();
sti(intr_mask);
ATname
Цитата(urasinov @ Aug 31 2007, 13:08) *
А где в Hardware Reference написано что 0х0200 это для частоты кварца 27 МГц? Я думаю 0х0200 это с запасом для всех допустимых частот кварца. Можно взглянуть на ваш код инициализации PLL? Вот мой работает без проблем.

В референсе харда этого утверждения нет, НО этот код приведен для EZ-Lite BF533 где стоит задающий генератор на 27 МГц. Что касаемо 0х200: то я так думаю, что эта величина должна зависеть не только от частоты задающего, но и от коэф. умножения PLL.

Код инициализации PLL:

#define PLL_MSEL 0x10 // default = 0xA
#define PLL_D 0x0 // default = 0x0
#define PLL_LOCK_COUNT 0x300 //default = 0x200

#define PLL_CSEL 0x0 // default = 0x0
#define PLL_SSEL 0x4 // default = 0x5

// Reconfigure PLL_CTL Register

#if defined(PLL_MSEL) || defined(PLL_D)

#ifdef PLL_LOCK_COUNT
p0.l = lo(PLL_LOCKCNT);
p0.h = hi(PLL_LOCKCNT);
r0.l = lo(PLL_LOCK_COUNT);
r0.h = hi(PLL_LOCK_COUNT);
w[p0] = r0;
#endif //PLL_LOCK_COUNT

p0.l = lo(PLL_CTL);
p0.h = hi(PLL_CTL);
r1 = w[p0](z);
r2 = r1;
r0 = 0(z);

#ifdef PLL_D
bitclr(r1,0);
r0.l = (PLL_D & 0x1);
r1 = r1 | r0;
#endif // PLL_D

#ifdef PLL_MSEL
r0.l = ~(0x3f << 9);
r1 = r1 & r0;
r0.l = ((PLL_MSEL & 0x3f) << 9);
r1 = r1 | r0;
#endif // PLL_MSEL

cc = r1 == r2; // check if PLL_CTL changed
if cc jump skip_pll; // skip the PLL_CTL update


p1.l = lo(SIC_IWR); // enable PLL Wakeup Interrupt
p1.h = hi(SIC_IWR);
r0 = [p1];
bitset(r0,0);
[p1] = r0;

w[p0] = r1; // Apply PLL_CTL changes.
ssync;

cli r2; // disable interrupts 15-5
idle; // wait for Loop_count expired wake up
sti r2; // enable interrupts 15-5

skip_pll:
nop;

#endif //(PLL_MSEL | PLL_D)
//-------------------------------------

// Reconfigure PLL_DIV Register
// Can be done on the fly

#if defined(PLL_CSEL) | defined(PLL_SSEL)
p0.l = lo(PLL_DIV);
p0.h = hi(PLL_DIV);
r1 = w[p0](z);
r0 = 0(z);

#ifdef PLL_CSEL
r0.l = ~(0x3<<4);
r1 = r1 & r0;
r0.l = ((PLL_CSEL & 0x3)<<4);
r1 = r1 | r0;
#endif // PLL_CSEL

#ifdef PLL_SSEL
r0.l = ~(0xf);
r1 = r1 & r0;
r0.l = (PLL_SSEL & 0xf);
r1 = r1 | r0;
#endif // PLL_SSEL

w[p0] =r1;
ssync;
#endif //(PLL_CSEL | PLL_SSEL)
//--------------------------------------
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.