|
|
  |
LPC210x - Настоящий ли там PLL? |
|
|
|
Jul 16 2009, 11:18
|

Гуру
     
Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244

|
Цитата(Rst7 @ Jul 16 2009, 14:12)  Мне надо, чтобы фронты шевеления GPIO имели постоянный фазовый сдвиг относительно входной частоты (более-менее постоянный). Относительно той частоты, которая потом умножается. Если не будет деления, а множитель на 4 то не вижу никаких причин, что-бы от реализации PLL чего-либо зависило. Кстати, судя по наличию нижней границы частоты, PLL там "аналоговый", но если Вам нужен LPC210x, то тестировать LPC23 некорректно - там явно другой PLL.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Jul 16 2009, 11:27
|

Йа моск ;)
     
Группа: Модераторы
Сообщений: 4 345
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610

|
Цитата что-бы от реализации PLL чего-либо зависило. Если там действительно PLL (ФАПЧ) - то все будет правильно. А вот если там словом PLL обозвано, например, АПЧ (без фазы), то (_*_). Смущает то, что PLL у Atmel'а имеет внешний фильтр. Возможно - дань традиции или "ниасилили", но... Цитата но если Вам нужен LPC210x, то тестировать LPC23 некорректно - там явно другой PLL. Думаете? Частота генератора выше, а вот реализация врядли сильно отличается.
--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
|
|
|
|
|
Jul 16 2009, 12:13
|
Частый гость
 
Группа: Участник
Сообщений: 149
Регистрация: 2-06-08
Из: Москва
Пользователь №: 38 003

|
Цитата(Rst7 @ Jul 16 2009, 14:43)  Дык глаз-диаграммы сигнала с шевелящегося пина (развертка засинхронизирована с частотой кварца) с накоплением в десяток миллисекунд будет вполне достаточно. К своему стыду я не знаю что такое глазковая диаграмма, т.е. как ее грамотно получить (кнопки на моем осциллоскопе с соответствующей надписью нет, в инструкции тоже не нашел). Если сможете дать хорошую ссылку то постараюсь сделать. Опять же вопрос - будет ли заменой следующее измерение: синхронизируемся от кварца, развертываем период сигнала на весь экран и делаем накопление за некоторое время (до бесконечности)? Соответственно на экране получим полосу определенной ширины формой повторяющей сигнал, и чем она уже тем меньше фазовый шум (надеюсь я правильно понимаю).
|
|
|
|
|
Jul 16 2009, 17:04
|
Частый гость
 
Группа: Участник
Сообщений: 149
Регистрация: 2-06-08
Из: Москва
Пользователь №: 38 003

|
[attachment=34624:scope_0.png] Цитата(Rst7 @ Jul 16 2009, 16:16)  Дык это и есть глаз-диаграмма, грубо говоря. Наверное я слишком опрометчиво предложил Вам помощь, но я постараюсь оправдать ожидания. Итак что сейчас есть. 0. Запустить Ваш пример мне не удалось, наверное было моей ошибкой написать про IAR ибо не волоку в нем нифига 1. Попробовал сделать свой пример, пока вот такой (см. вложение) на WinARM (тоже волоку в нем слабо). Там настройки GPIO, PLL и MAM сделанные практически тупым копипастом с Вашего проекта, единственное не стал заморачиваться с подсаживанием IARовских дефайнов (после нехитрых манипуляций - закомментирования конструкции{ if трам пам пам; error "этот файл только для ЯРА" endif} - подсадить не удалось) поэтому наскоро сделал свои дефайны битов 3. Пока функция дрыганья ногами не размещена в ОЗУ (просто делал чтобы посмотреть будут-ли шевеления ногами и т. п.), сейчас буду разбираться как разместиь ее где нада с помощью WinARM. Продолжение в следующем посте CODE #include #include #include "lpc23xx.h"
void StartPLL(void); void GPIOinit(void);
int main(void){ // MAM init #define MODECTRL 0 //MODECTRL 1:0 #define CYCLES 0 //CYCLES 2:0 MAMCR = 0; MAMTIM = 3< 40 MHz MAMCR = 2< StartPLL(); GPIOinit(); FIO2DIR = (1<<4)|(1<<3); while(1) FIO2PIN ^= (1<<4)|(1<<3); return 0; }
void StartPLL(void) { #define OSCRANGE 4 #define OSCEN 5 #define OSCSTAT 6
#define PLLC 1 #define PLLE 0
#define CLKSRC 0
#define MSEL 0 //MSEL 14:0 #define NSEL 16 //NSEL23:16
#define PLLSTAT_PLLC 25 #define PLLSTAT_PLLE 24 #define PLOCK 26 #define PCLK_GPIO 2 //PCLK_GPIO 3:2
// 1. Init OSC SCS &=~(1< SCS |=(1< // 2. Wait for OSC ready while (!(SCS&(1< // 3. Disconnect PLL PLLCON &=~(1< PLLFEED = 0xAA; PLLFEED = 0x55; // 4. Disable PLL PLLCON &=~(1< PLLFEED = 0xAA; PLLFEED = 0x55; // 5. Select source clock for PLL CLKSRCSEL = (1< // 6. Set PLL settings 288 MHz (from 12MHz), Fpll=(2*12(M)*12MHz/1(N)) PLLCFG = ((12-1)<< PLLFEED = 0xAA; PLLFEED = 0x55; // 7. Enable PLL PLLCON |= (1< PLLFEED = 0xAA; PLLFEED = 0x55; // 8. Wait for the PLL to achieve lock while(!(PLLSTAT&(1< // 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 |= 1< // 10. Connect the PLL PLLCON |= (1< PLLFEED = 0xAA; PLLFEED = 0x55; }
void GPIOinit(void) { #define GPIOM 0 #define IO0DIR (*(volatile unsigned long *)0xE0028008) #define IO1DIR (*(volatile unsigned long *)0xE0028018) // Set to inputs IO0DIR =\ IO1DIR =\ FIO0DIR =\ FIO1DIR =\ FIO2DIR =\ FIO3DIR =\ FIO4DIR = 0;
// Enable Fast GPIO0,1 SCS |=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; }
Теперь картинки (не знаю как загрузятся, поэтому номера называть не буду) Легенда общая: желтый - сигнал с кварца (выход генератора контроллера) зеленый - сигнал с P2.3 Правильно ли я понял технику измерений? Выскажите замечания, поправки, наставления на путь истинный  На одном из рисунков, где присутствует только сигнал с порта синхронизация велась от этого сигнала, приведен он только для оценки его формы и частоты. Да не нравится мне что-то форма, но куда копать не знаю - помехи, кривая разводка платы, кривые измерения? Да, в завершение. Сейчас уже достаточно поздно, с работы выгоняют, поэтому завтра продолжу измерения, а пока посмотрю как в ОЗУ разместить функцию. В общем, второй этап измерений завтра ближе к вечеру.
Эскизы прикрепленных изображений
|
|
|
|
|
Jul 16 2009, 17:27
|

Йа моск ;)
     
Группа: Модераторы
Сообщений: 4 345
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610

|
Цитата Наверное я слишком опрометчиво предложил Вам помощь, но я постараюсь оправдать ожидания. Все отлично, никакой опрометчивости. Цитата Правильно ли я понял технику измерений? Походу измерили Вы все верно. Первый рисунок (на котором 2 с копейками периодов кварца) на мой вопрос ответил - явно PLL. Мусор похоже лезет через землю. Вам надо было земляные щупы осциллографа зацепить рядом с процессором. Но это уже не важно. Нижний рисунок (на котором только ногодрыг) показывает, что гнусь справился с оптимизацией Common Subexpression Elimination - 9 тактов ( MHz}) ) для приведенного кода соответствует LDR (3 такта), EOR (1 такт), STR (2 такта), B (3 такта) - ничего лишнего. На чем можем и закончить. Благодарю за помощь, будете в Харькове - с меня пиво.
--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
|
|
|
|
|
Jul 16 2009, 18:12
|
Местный
  
Группа: Свой
Сообщений: 272
Регистрация: 3-06-06
Пользователь №: 17 737

|
Цитата(Rst7 @ Jul 16 2009, 20:27)  На чем можем и закончить. Если не секрет, расскажите где нужна синхронность с тактовой частотой? Я держал в руках девайс в котором две AVR-ки тактировались одним генератором. Разработчики сказали, что это максимально увеличивает скорость обмена по SPI между процами. AVR и LPC конечно не одно и тоже, но раз нет никаких задержек по фазе, можно было бы затактировав два проца, использовать это для того же ускорения передачи по SPI(к примеру)? Или бред?
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|