|
|
 |
Ответов
(1 - 9)
|
Apr 11 2012, 21:23
|
Участник

Группа: Участник
Сообщений: 23
Регистрация: 9-01-11
Пользователь №: 62 093

|
Спасибо за совет! Я уже начал с IAR, и сейчас менять на кеил, а потом обратно. Не целесообразно. Причем кеил и PLL?
P.S. Хотя многие советуют начать с keil!
|
|
|
|
|
Apr 12 2012, 04:14
|
Местный
  
Группа: Свой
Сообщений: 476
Регистрация: 3-07-07
Из: Санкт-Петербург
Пользователь №: 28 866

|
Цитата(Mr.Denis @ Apr 12 2012, 01:23)  Я уже начал с IAR, и сейчас менять на кеил, а потом обратно. Не целесообразно. Судя по количеству ваших тем и качеству вопросов в них, переход на iar тоже далек от целесообразности. В том же Кейле есть визард, который поможет вам понять, как настраивать PLL, если уж документацию читать не умеете. Видимо это тоже не целесообразно.
--------------------
Ковырял чукча отверткой в ухе, звук в телевизоре и пропал.
|
|
|
|
|
Apr 12 2012, 08:23
|
Знающий
   
Группа: Участник
Сообщений: 837
Регистрация: 8-02-07
Пользователь №: 25 163

|
Цитата Если я эти две команды впишу у меня МК станет работать на 72МГц? Думаю, что нет. Не знаю как у данного конкретного проца, но у армов в целом довольно сложная процедура переключения частоты. Навскидку, нужно включить тактирование от кварца, включить PLL, установить правильный множитель и делитель, при этом, ориентируясь на некую промежуточную частоту, которая должна быть в правильных границах, затем полученную частоту нужно подать на тактирование ядра и периферии. Для начала вам будет проще не делать ничего! По умолчанию проц тактируется от внутреннего генератора на 12 МГц и можно сразу с ним работать на этой частоте.
|
|
|
|
|
Apr 12 2012, 15:40
|
Участник

Группа: Участник
Сообщений: 23
Регистрация: 9-01-11
Пользователь №: 62 093

|
Приветствую! Спасибо за советы!))) Я сегодня пробовал проиграться с kial, но он как-то совсем не пошел. Мне он показался более сложным и навороченным. Сегодня почитав мануал набросал код c комментариями для PLL. Посмотрите пожалуйста и укажите на ошибки. В заранее огромное спасибо!)) CODE void InitClock(void) { // Конфигурация регистра SCS: // GPIO = 1 (Включение быстрого режима), // OSCRANGE = 0(Выбор рабочего диапазона генератора от 1MHz до 20Mhz), // OSCEN = 1 (Разрешить использование основного генератора подключенного к XTAL1 è XTAL2). SCS |= 0x00000021; // Конфигурация регистра PLLCON: // PLLC = 1 (Отключаем PLL) PLLCON &= 0x00000002; // Для изменения PLLCON записываем две команды в PLLFEED PLLFEED = 0xAA; PLLFEED = 0x55; // Конфигурация регистра PLLCON: // PLLE = 1 (Выключаем PLL) PLLCON &= 0x00000001; // Для изменения PLLCON записываем две команды в PLLFEED PLLFEED = 0xAA; PLLFEED = 0x55; // Дожидаемся стабильного сигнала от основного генератора // Проверяем бит OSCSTAT в регистре SCS while (!( SCS &0x00000040)); // Выбираем основной генератор в качестве источника синхронизации PLL // CLKSRC = 0x01; CLKSRCSEL = 0x00000001; // Расчет коэффициента умножения: // Fcco = 480MHz, Fin = 12MHz. // M = (Fcco * 1) / (2 * Fin) = (480 * 1) / (2 * 12) = 20 - 1 = 19 // Расчет коэффициента деления: // N = (2 * M * Fin) / Fcco = (2 * 20 * 12) / 480 = 1 - 1 = 0 // Записываем в биты MSEL регистра PLLCFG множитель 19 (HEX:0x13) // Записываем в биты NSEL регистра PLLCFG делитель 0 (HEX:0x00) PLLCFG = 0x00000013; // Для изменения PLLCFG записываем две команды в PLLFEED PLLFEED = 0xAA; PLLFEED = 0x55; // Включение PLL PLLCON = 0x00000001; // Для изменения PLLCON записываем две команды в PLLFEED PLLFEED = 0xAA; PLLFEED = 0x55; // Считаем делитель CPU для 60MHz // CCLKSEL = Fcco / Cclk = 480 / 60 = 8 - 1 = 7 // Записываем в CCLKSEL делитель 7 CCLKSEL = 0x00000007; // Считаем делитель USB для 48MHz // USBSEL = Fcco / USBclk = 480 / 48 = 10 - 1 = 9 // Записываем в USBSEL делитель 9 USBSEL = 0x00000009; // Ждем установленного сигнала PLL while( PLLSTAT & 0x000); // Подключаем PLL PLLCON |= 0x00000002; // Для изменения PLLCON записываем две команды в PLLFEED PLLFEED = 0xAA; PLLFEED = 0x55; }
Если я правильно понял то в регистр CCLKSEL надо записывать только не четные числа, почему?
Сообщение отредактировал Mr.Denis - Apr 12 2012, 17:27
|
|
|
|
|
Apr 12 2012, 17:17
|

Профессионал
    
Группа: Свой
Сообщений: 1 001
Регистрация: 27-06-06
Пользователь №: 18 409

|
Цитата(Mr.Denis @ Apr 11 2012, 21:31)  Начал изучать LPC2468 в среде IAR на языке С. У меня возникло несколько вопросов. Хочу запустить МК от 72МГц.... В примеры загляните - найдёте там процедуры типа TargetResetInit() ConfigurePLL() где есть начальная настройка и pll и gpio и переферийных делителей.... Если не изменяет память то для lpc24xx Fcclk = 2*(M+1)*Fosc/(N+1) M=11 N=3 Fcclk=2*24*12/4=72 IAR не такой страшный как кажется. Возьмите пример под требуемый процессор за шаблон проекта (стартап, настройка плл, переферии), а дальше идёт программирование на обычном С который что в Keil что в IAR почти одинаковый. Цитата(andrewlekar @ Apr 12 2012, 11:23)  Думаю, что нет. Не знаю как у данного конкретного проца, но у армов в целом довольно сложная процедура переключения частоты. Ничего там сложного нет. Один раз после старта программы настраиваете pll на нужную Fcclk и всё. Далее варьируя значением CCLKCFG и настройками flash акселератора можно менять частоту тактирования ядра от Fcclk до Fcclk/256. Всё это можно найти в примерах.
|
|
|
|
|
Apr 12 2012, 17:34
|
Участник

Группа: Участник
Сообщений: 23
Регистрация: 9-01-11
Пользователь №: 62 093

|
Спасибо за ответ! В примери который я превел в 7 сообщении, МК настроел на 60MHz и USB на 48MHz. Вы написали Fcclk = 2*(M+1)*Fosc/(N+1), а случайно не M-1?
|
|
|
|
|
Apr 13 2012, 07:45
|

Профессионал
    
Группа: Свой
Сообщений: 1 001
Регистрация: 27-06-06
Пользователь №: 18 409

|
Цитата(Mr.Denis @ Apr 12 2012, 20:34)  Спасибо за ответ! В примери который я превел в 7 сообщении, МК настроел на 60MHz и USB на 48MHz. Вы написали Fcclk = 2*(M+1)*Fosc/(N+1), а случайно не M-1? Пример инициализации pll для рабочего проекта на lpc2368 Fcco = 300MHz, Частота ядра Fcclk=50MHz (Fcco/(CCLKDivValue+1)) В примере ниже константы задаются на 1 меньше, отсюда и M+1 и N+1 CODE #define PLL_MValue 24 #define PLL_NValue 1 #define CCLKDivValue 5 #define USBCLKDivValue 6
/* System configuration: Fosc, Fcclk, Fcco, Fpclk must be defined */ /* PLL input Crystal frequence range 4KHz~20MHz. */ #define Fosc 12000000 /* System frequence,should be less than 80MHz. */ #define Fcclk 50000000 #define Fcco 300000000
void ConfigurePLL ( void ) { unsigned int MValue, NValue;
if ( PLLSTAT & (1 << 25) ) { PLLCON = 1; /* Enable PLL, disconnected */ PLLFEED = 0xaa; PLLFEED = 0x55; }
PLLCON = 0; /* Disable PLL, disconnected */ PLLFEED = 0xaa; PLLFEED = 0x55;
SCS |= 0x20; /* Enable main OSC */ while( !(SCS & 0x40) ); /* Wait until main OSC is usable */
CLKSRCSEL = 0x1; /* select main OSC, 12MHz, as the PLL clock source */
PLLCFG = PLL_MValue | (PLL_NValue << 16); PLLFEED = 0xaa; PLLFEED = 0x55;
PLLCON = 1; /* Enable PLL, disconnected */ PLLFEED = 0xaa; PLLFEED = 0x55;
CCLKCFG = CCLKDivValue; /* Set clock divider */ #if USE_USB USBCLKCFG = USBCLKDivValue; /* usbclk = 288 MHz/6 = 48 MHz */ #endif
while ( ((PLLSTAT & (1 << 26)) == 0) ); /* Check lock bit status */
MValue = PLLSTAT & 0x00007FFF; NValue = (PLLSTAT & 0x00FF0000) >> 16; while ((MValue != PLL_MValue) && ( NValue != PLL_NValue) );
PLLCON = 3; /* enable and connect */ PLLFEED = 0xaa; PLLFEED = 0x55; while ( ((PLLSTAT & (1 << 25)) == 0) ); /* Check connect bit status */ return; }
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|