Rst7 5 16 июля, 2009 Опубликовано 16 июля, 2009 · Жалоба Возник вопрос в связи с тем, что надо сделать устройство с ногодрыгом, синхронным с внешней тактовой. В LPC210x для тактирования ядра есть PLL. Однако, в даташите (и мануале) совсем не видать параметров сего модуля. Интересует, настоящий ли там PLL или какой FLL - т.е. удерживается ли тактовая частота проца с точностью до фазы? Может быть кто из форумчан проверял этот момент? Или, может быть, имеет возможность уделить пол-часа времени для проверки? Или вообще, знает NXP'шный документ, освещающий этот вопрос? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
rezident 0 16 июля, 2009 Опубликовано 16 июля, 2009 · Жалоба А здесь AN10331 - Philips LPC2xxx family phase lock loop ничего полезного нет? Насколько я понимаю, при наличии аналогового CCO (Current Controlled Oscillator) устройство PLL близко к классическому ФАПЧ: с фазовым детектором и набором счетчиков-делителей с программируемым коэффициентом деления. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Rst7 5 16 июля, 2009 Опубликовано 16 июля, 2009 · Жалоба А здесь ничего полезного нет? Именно по моему вопросу - нет. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dimka76 59 16 июля, 2009 Опубликовано 16 июля, 2009 · Жалоба Именно по моему вопросу - нет. а здесь ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Rst7 5 16 июля, 2009 Опубликовано 16 июля, 2009 · Жалоба а здесь ? Ну о том, что в SAM7 именно PLL, можно догадаться по виду наружного фильтра :) К сожалению, SAM7 не подходит, надо уметь за 2 такта дрыгнуть ножкой. Насколько я понимаю, при наличии аналогового CCO (Current Controlled Oscillator) устройство PLL близко к классическому ФАПЧ Я, конечно, на это надеюсь. И это нетрудно проверить в живую. Но так исторически сложилось, что под рукой нет ни одного девайса на LPC :( Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
smac 0 16 июля, 2009 Опубликовано 16 июля, 2009 · Жалоба Я, конечно, на это надеюсь. И это нетрудно проверить в живую. Но так исторически сложилось, что под рукой нет ни одного девайса на LPC :( Могу попробовать помочь, у меня есть отладочная плата SK-LPC-S3E на LPC2378, правда я с АРМами только начал разбираться, если Вы методику обрисуете и код пришлете (если исходник то желательно чтобы WinARMом откомпилировался или IAR тем который бесплатный до 32 кБайт кода). По времени - вечером после 18.00 могу приступить. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Rst7 5 16 июля, 2009 Опубликовано 16 июля, 2009 · Жалоба Могу попробовать помочь О, спасибо. Какая у Вас версия IAR'а? Я тогда под нее проект состряпаю. И если можно, бросьте в личку какой-либо свой контакт типа аси (мой можете посмотреть у меня в профиле). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
klen 1 16 июля, 2009 Опубликовано 16 июля, 2009 · Жалоба а нафег выкинуть фапч и поключить выход кварцевого генератора к процессору? получите тактовую 8...12 мгц и фазу колебаний кварца. тока я сомневаюсь что ноги за 2 такта дрыгатся будут. как я мерял на lpc2103 4 такта на переключение пина при записи через быструю шину и FastIO Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
etoja 0 16 июля, 2009 Опубликовано 16 июля, 2009 · Жалоба У меня есть своя плата на процессоре LPC2138, тактируемом от внешнего генератора Epson с частотой 20.48МГц. В прерывании от таймера программно включается и выключается светодиод. Двухлучевой осциллограф Tektronix показывает, что переключения светодиода происходят строго синхронно с входной тактовой частотой, и картинка на экране "стоит" (развёртку синхронизировал как по сигналу включения светодиода, так и по сигналу выключения светодиода). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
klen 1 16 июля, 2009 Опубликовано 16 июля, 2009 · Жалоба значит обычная фапч внутри с фазовым детектором, а не петля с частотным дискриминатором. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zltigo 1 16 июля, 2009 Опубликовано 16 июля, 2009 · Жалоба Я тогда под нее проект состряпаю.... Ну железа всякого и у меня много. Измерители того-же джитера имеются (правда под телекомуникации - 2048-8448-25776-34368 килобит)... Если на LPC21xx Могу, например, на олимексовcкой P2148 (без FAST GPIO) кварц -любой, попробовать. Компилятор - любой IAR. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Rst7 5 16 июля, 2009 Опубликовано 16 июля, 2009 · Жалоба а нафег выкинуть фапч и поключить выход кварцевого генератора к процессору? получите тактовую 8...12 мгц и фазу колебаний кварца. Мне не годится. Мне надо умножить входную тактовую на 2. тока я сомневаюсь что ноги за 2 такта дрыгатся будут. как я мерял на lpc2103 4 такта на переключение пина при записи через быструю шину и FastIO Что-то не то меряли. Через FastGPIO состояние ноги изменяется за 2 такта (столько же выполняется STR). Двухлучевой осциллограф Tektronix показывает, что переключения светодиода происходят строго синхронно с входной тактовой частотой, и картинка на экране "стоит" Полезная инфа, спасибо. Действительно, это поведение честного PLL. Только еще случайное начальное значение сдвига фазы в пределах 2pi/коэффициент_умножения должно наблюдаться. Ну железа всякого и у меня много. Измерители того-же джитера имеются (правда под телекомуникации - 2048-8448-25776-34368 килобит)... Если на LPC21xx Могу, например, на олимексовcкой P2148 (без FAST GPIO) кварц -любой, попробовать. Это спасибо, но измерители - то круто, тут просто двухлучевым осциллографом проще (меня мало интересуют количественные характеристики, на глаз определить "синхронно/несинхронно" - будет достаточно.), а вот без FastGPIO - я хз как там устроен этот мост между шинами. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zltigo 1 16 июля, 2009 Опубликовано 16 июля, 2009 · Жалоба Это спасибо, но измерители - то круто, тут просто двухлучевым осциллографом проще (меня мало интересуют количественные характеристики, на глаз определить "синхронно/несинхронно" - будет достаточно.) На глаз не корректно, если только не описать условия синхронихации и ждать-ждать-ждать.... , а вот без FastGPIO - я хз как там устроен этот мост между шинами. С Fast у меня тоже есть, но это уже не универсальное железо, или LPC23/24xx Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Rst7 5 16 июля, 2009 Опубликовано 16 июля, 2009 · Жалоба На глаз не корректно, если только не описать условия синхронихации и ждать-ждать-ждать.... Дык глаз-диаграммы сигнала с шевелящегося пина (развертка засинхронизирована с частотой кварца) с накоплением в десяток миллисекунд будет вполне достаточно. #include <NXP/iolpc2378.h> #include <intrinsics.h> __ramfunc void ToggleIO(void) { FIO2DIR = 1<<3; //pin P2.3 configured as output for(;;) { FIO2SET = 1<<3; FIO2CLR = 1<<3; FIO2SET = 1<<3; FIO2CLR = 1<<3; FIO2SET = 1<<3; FIO2CLR = 1<<3; __no_operation(); } } void StartPLL(void) { // 1. Init OSC SCS_bit.OSCRANGE = 0; SCS_bit.OSCEN = 1; // 2. Wait for OSC ready while(!SCS_bit.OSCSTAT); // 3. Disconnect PLL PLLCON_bit.PLLC = 0; PLLFEED = 0xAA; PLLFEED = 0x55; // 4. Disable PLL PLLCON_bit.PLLE = 0; PLLFEED = 0xAA; PLLFEED = 0x55; // 5. Select source clock for PLL CLKSRCSEL_bit.CLKSRC = 1; // Selects the main oscillator as a PLL clock source. // 6. Set PLL settings 288 MHz (from 12MHz), Fpll=(2*12(M)*12MHz/1(N)) PLLCFG_bit.MSEL = 12-1; PLLCFG_bit.NSEL = 1-1; PLLFEED = 0xAA; PLLFEED = 0x55; // 7. Enable PLL PLLCON_bit.PLLE = 1; PLLFEED = 0xAA; PLLFEED = 0x55; // 8. Wait for the PLL to achieve lock while(!PLLSTAT_bit.PLOCK); // 9. Set clk divider settings CCLKCFG = 6-1; // 1/6 Fpll USBCLKCFG = 6-1; // 1/6 Fpll - 48 MHz PCLKSEL0 = PCLKSEL1 = 0; // other peripherals PCLKSEL1_bit.PCLK_GPIO = 1; //GPIO prescaller 1:1 // 10. Connect the PLL PLLCON_bit.PLLC = 1; PLLFEED = 0xAA; PLLFEED = 0x55; } void GPIOinit(void) { // Set to inputs IO0DIR = \ IO1DIR = \ FIO0DIR = \ FIO1DIR = \ FIO2DIR = \ FIO3DIR = \ FIO4DIR = 0; // Enable Fast GPIO0,1 SCS_bit.GPIOM = 1; // clear mask registers FIO0MASK =\ FIO1MASK =\ FIO2MASK =\ FIO3MASK =\ FIO4MASK = 0; // Reset all GPIO pins to default primary function PINSEL0 =\ PINSEL1 =\ PINSEL2 =\ PINSEL3 =\ PINSEL4 =\ PINSEL5 =\ PINSEL6 =\ PINSEL7 =\ PINSEL8 =\ PINSEL9 =\ PINSEL10= 0; } int main() { // MAM init MAMCR_bit.MODECTRL = 0; MAMTIM_bit.CYCLES = 3; // FCLK > 40 MHz MAMCR_bit.MODECTRL = 2; // MAM functions fully enabled StartPLL(); GPIOinit(); ToggleIO(); return 0; } Нечто типа такого. Код дергает ножкой P2.3, частота кварца 12МГц, PLL - x4, т.е. такты проца 48МГц, значит сигнал на ножке будет как раз с частотой кварца (каждое состояние - 2 такта, итого период 4 такта). Собирается в иаре 5.20 в ARM-режиме с макс. оптимизацией по скорости - то что надо. Положу сразу весь проект до кучи (таргет - Debug).TestPLL.zip Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zltigo 1 16 июля, 2009 Опубликовано 16 июля, 2009 · Жалоба Нечто типа такого.... Ну тогда, если никто не сделает, то поближе к субботе - сейчас просто подходящей железки с Fast нет под руками. Только вот чего проверить-то хотите? Умножитель там будет умножать тупо и безвариантно, а деление, даже если и сделан "цифровой" c подсбросом, то это не проверяете, ибо не делите. Да, допустим, будет иметь джиттер полтакта от частоты после умножителя (сотни мегагерц)- это критично? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться