Приветствую!
Спасибо за советы!)))
Я сегодня пробовал проиграться с 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