реклама на сайте
подробности

 
 
> Вопросы по LPC2468 + IAR
Mr.Denis
сообщение Apr 11 2012, 18:31
Сообщение #1


Участник
*

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



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

P.S. Уважаемые администраторы и модераторы, не убивайте тему в этом раздели, я только сейчас увидел раздел для начинающих
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 9)
kovigor
сообщение Apr 11 2012, 20:52
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 5 273
Регистрация: 30-03-10
Пользователь №: 56 295



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


Я бы на вашем месте с Кейла начинал, он гораздо проще в освоении и понятнее ...
Go to the top of the page
 
+Quote Post
Mr.Denis
сообщение Apr 11 2012, 21:23
Сообщение #3


Участник
*

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



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

P.S. Хотя многие советуют начать с keil!
Go to the top of the page
 
+Quote Post
haker_fox
сообщение Apr 12 2012, 01:01
Сообщение #4


Познающий...
******

Группа: Свой
Сообщений: 2 963
Регистрация: 1-09-05
Из: г. Иркутск
Пользователь №: 8 125



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

И правильно советуют! Сам начинал с него. В Кейле есть симулятор микроконтроллеров (процессор + периферия). Это значительно упрощает освоение достаточно непростой (на первый взгляд) архитектуры. Потом можно хоть в машинных кодах программировать biggrin.gif


--------------------
Выбор.
Go to the top of the page
 
+Quote Post
Lotor
сообщение Apr 12 2012, 04:14
Сообщение #5


Местный
***

Группа: Свой
Сообщений: 476
Регистрация: 3-07-07
Из: Санкт-Петербург
Пользователь №: 28 866



Цитата(Mr.Denis @ Apr 12 2012, 01:23) *
Я уже начал с IAR, и сейчас менять на кеил, а потом обратно. Не целесообразно.

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


--------------------
Ковырял чукча отверткой в ухе, звук в телевизоре и пропал.
Go to the top of the page
 
+Quote Post
andrewlekar
сообщение Apr 12 2012, 08:23
Сообщение #6


Знающий
****

Группа: Участник
Сообщений: 837
Регистрация: 8-02-07
Пользователь №: 25 163



Цитата
Если я эти две команды впишу у меня МК станет работать на 72МГц?

Думаю, что нет. Не знаю как у данного конкретного проца, но у армов в целом довольно сложная процедура переключения частоты. Навскидку, нужно включить тактирование от кварца, включить PLL, установить правильный множитель и делитель, при этом, ориентируясь на некую промежуточную частоту, которая должна быть в правильных границах, затем полученную частоту нужно подать на тактирование ядра и периферии.
Для начала вам будет проще не делать ничего! По умолчанию проц тактируется от внутреннего генератора на 12 МГц и можно сразу с ним работать на этой частоте.
Go to the top of the page
 
+Quote Post
Mr.Denis
сообщение Apr 12 2012, 15:40
Сообщение #7


Участник
*

Группа: Участник
Сообщений: 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
Go to the top of the page
 
+Quote Post
mempfis_
сообщение Apr 12 2012, 17:17
Сообщение #8


Профессионал
*****

Группа: Свой
Сообщений: 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. Всё это можно найти в примерах.
Go to the top of the page
 
+Quote Post
Mr.Denis
сообщение Apr 12 2012, 17:34
Сообщение #9


Участник
*

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



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


Профессионал
*****

Группа: Свой
Сообщений: 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;
}

Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 12:01
Рейтинг@Mail.ru


Страница сгенерированна за 0.01426 секунд с 7
ELECTRONIX ©2004-2016