Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Вопросы по LPC2468 + IAR
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > ARM, 32bit
Mr.Denis
Всем привет! Только что нашел этот раздел для начинающих.
Начал изучать LPC2468 в среде IAR на языке С. У меня возникло несколько вопросов.
Хочу запустить МК от 72МГц.
Вначале я разрешаю использовать внешний кварц на 12МГц командой CLKSRCSEL=0x01;
Потом я записываю множитель на 6 командой PLLCFG=0х05;
Это число высчитал по формуле: Множитель = 72 / 12 = 6 – 1 = 5(Bits MSEL = 00101)
Правильно?
Если я эти две команды впишу у меня МК станет работать на 72МГц?

P.S. Уважаемые администраторы и модераторы, не убивайте тему в этом раздели, я только сейчас увидел раздел для начинающих
kovigor
Цитата(Mr.Denis @ Apr 11 2012, 21:31) *
Всем привет! Только что нашел этот раздел для начинающих.
Начал изучать LPC2468 в среде IAR на языке С.


Я бы на вашем месте с Кейла начинал, он гораздо проще в освоении и понятнее ...
Mr.Denis
Спасибо за совет!
Я уже начал с IAR, и сейчас менять на кеил, а потом обратно. Не целесообразно.
Причем кеил и PLL?

P.S. Хотя многие советуют начать с keil!
haker_fox
QUOTE (Mr.Denis @ Apr 12 2012, 05:23) *
P.S. Хотя многие советуют начать с keil!

И правильно советуют! Сам начинал с него. В Кейле есть симулятор микроконтроллеров (процессор + периферия). Это значительно упрощает освоение достаточно непростой (на первый взгляд) архитектуры. Потом можно хоть в машинных кодах программировать biggrin.gif
Lotor
Цитата(Mr.Denis @ Apr 12 2012, 01:23) *
Я уже начал с IAR, и сейчас менять на кеил, а потом обратно. Не целесообразно.

Судя по количеству ваших тем и качеству вопросов в них, переход на iar тоже далек от целесообразности. laughing.gif
В том же Кейле есть визард, который поможет вам понять, как настраивать PLL, если уж документацию читать не умеете. Видимо это тоже не целесообразно.
andrewlekar
Цитата
Если я эти две команды впишу у меня МК станет работать на 72МГц?

Думаю, что нет. Не знаю как у данного конкретного проца, но у армов в целом довольно сложная процедура переключения частоты. Навскидку, нужно включить тактирование от кварца, включить PLL, установить правильный множитель и делитель, при этом, ориентируясь на некую промежуточную частоту, которая должна быть в правильных границах, затем полученную частоту нужно подать на тактирование ядра и периферии.
Для начала вам будет проще не делать ничего! По умолчанию проц тактируется от внутреннего генератора на 12 МГц и можно сразу с ним работать на этой частоте.
Mr.Denis
Приветствую!
Спасибо за советы!)))
Я сегодня пробовал проиграться с 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 надо записывать только не четные числа, почему?
mempfis_
Цитата(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. Всё это можно найти в примерах.
Mr.Denis
Спасибо за ответ!
В примери который я превел в 7 сообщении, МК настроел на 60MHz и USB на 48MHz.
Вы написали Fcclk = 2*(M+1)*Fosc/(N+1), а случайно не M-1?
mempfis_
Цитата(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;
}

Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.