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

 
 
> LPC2366, при записи в CCLKCFG все ломается.
meister
сообщение Apr 15 2008, 10:49
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 219
Регистрация: 20-11-07
Пользователь №: 32 484



Никак не пойму, что я делаю не так: при записи 199 (и при записи 1 тоже) в CCLKCFG все ломается. Кварц у меня 3.686МГц.

На МК написано следующее:
Код
LPC2366FBD100
SH3959.1          01
ZSD0743BY


Код
    void init_system_controls_and_status_register(void)
    {
        PCONP = 0;

        // 6.14 PLL setup sequence
        PLLCON_bit.PLLC = 0;
        PLLFEED = hw::PLLFEED_DATA1;
        PLLFEED = hw::PLLFEED_DATA2;
        
        PLLCON_bit.PLLE = 0;
        PLLFEED = hw::PLLFEED_DATA1;
        PLLFEED = hw::PLLFEED_DATA2;

        SCS = BIT_(hw::SCS_GPIOM) | BIT_(hw::SCS_OSCEN);
        while (!SCS_bit.OSCSTAT) {}
        
        CLKSRCSEL = hw::CS_MAIN_OSCILLATOR;
        
        PLLCFG_bit.MSEL = PLL_REGISTER_M - 1;
        PLLCFG_bit.NSEL = PLL_REGISTER_N - 1;
        PLLCON_bit.PLLE = 1;
        PLLFEED = hw::PLLFEED_DATA1;
        PLLFEED = hw::PLLFEED_DATA2;
        
        while (!PLLSTAT_bit.PLOCK) {}
        
        CCLKCFG = 0;        
        CCLKCFG = 199; // до этой строчки стабильно доходит, а через нее - нет

        PLLCON_bit.PLLC = 1;
        PLLFEED = hw::PLLFEED_DATA1;
        PLLFEED = hw::PLLFEED_DATA2;
    }
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Axel
сообщение Apr 15 2008, 14:15
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 480
Регистрация: 21-11-04
Пользователь №: 1 188



Может этот вариант поможет (в свое время родился после некоторых мучений):

Код
void PLLInit(u32 state)
{
    u32 stat_value;

    rSCS |= 0x20;      
    rSCS &= ~0x10;      
    while(!(rSCS & 0x40));

    if (rPLLSTAT & (1 << 25))
    {
        rPLLCON = 1;    
        rPLLFEED = 0xaa;
        rPLLFEED = 0x55;
    }

    rPLLCON = 0;      
    rPLLFEED = 0xaa;
    rPLLFEED = 0x55;
    CLKSRCSEL = 0x1;  

    if(state)
    {
        rPLLCFG = 11;
        rPLLFEED = 0xaa;
        rPLLFEED = 0x55;
        rPLLCON = 1;      
        rPLLFEED = 0xaa;
        rPLLFEED = 0x55;
    
        do
        {
            stat_value = rPLLSTAT;
        }
        while (((stat_value & 0x00007FFF) != 11) || ((stat_value & 0x00FF0000) >> 16) || !(stat_value & (1 << 26)));

        CCLKCFG = 3;
        USBCLKCFG = 0x05;
        rPLLCON = 3;       // enable and connect
        rPLLFEED = 0xaa;
        rPLLFEED = 0x55;
        while (!(rPLLSTAT & (1 << 25))); // Check connect bit status
        g_SysFreq = 72000;
    }
    else
    {
        CCLKCFG = 0;
        g_SysFreq = 12000;
    }
}


И, на всякий случай, проверьте, что значение PLLCFG соответствует требованиям к выходной частоте PLL: 275MHz <= Fout <= 290 MHz.
Go to the top of the page
 
+Quote Post
meister
сообщение Apr 15 2008, 14:44
Сообщение #3


Местный
***

Группа: Участник
Сообщений: 219
Регистрация: 20-11-07
Пользователь №: 32 484



Цитата(Axel @ Apr 15 2008, 18:15) *
И, на всякий случай, проверьте, что значение PLLCFG соответствует требованиям к выходной частоте PLL: 275MHz <= Fout <= 290 MHz.


Это для самых первых ревизий. Сейчас от 275 до 550.

У меня проблема была в том, что когда я ставил делитель частота падала слишком сильно и от этого все ломалось (а как тогда быть с 32768 кварцем?). Я перепаял кварц на бОльшую частоту и сдел вот так:

Код
        CCLKCFG = CCLK_DIVIZOR_MAGIC; // 7

        PLLCON_bit.PLLC = 1; // connect
        PLLFEED = hw::PLLFEED_DATA1;
        PLLFEED = hw::PLLFEED_DATA2;
        
        CCLKCFG = CCLK_DIVIZOR; // 19


Все работает. Частота похожа на правду. На днях еще больший кварц запаяю, может обойдусь за одну запись в CCLKCFG.

Как узнать ревизию моего МК? Кроме PLL там упоминаются еще MAM и WDT...

Вот такой у меня:
Код
LPC2366FBD100
SH3959.1        01
ZSD0743BY
Go to the top of the page
 
+Quote Post
lebiga
сообщение May 28 2008, 10:36
Сообщение #4


Частый гость
**

Группа: Свой
Сообщений: 163
Регистрация: 22-06-06
Из: Киев
Пользователь №: 18 292



Цитата(meister @ Apr 15 2008, 18:44) *
Это для самых первых ревизий. Сейчас от 275 до 550.

Вот такой у меня:
Код
LPC2366FBD100
SH3959.1        01
ZSD0743BY


Вопрос - так для ревизии В действительно работает от 275 до 550?
Мне нужно около 300 Мгц.
У кого нибудь работает? Отзовитесь!
Go to the top of the page
 
+Quote Post
meister
сообщение May 28 2008, 12:52
Сообщение #5


Местный
***

Группа: Участник
Сообщений: 219
Регистрация: 20-11-07
Пользователь №: 32 484



Цитата(lebiga @ May 28 2008, 14:36) *
Вопрос - так для ревизии В действительно работает от 275 до 550?
Мне нужно около 300 Мгц.
У кого нибудь работает? Отзовитесь!


500 - работает.
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 26th June 2025 - 01:52
Рейтинг@Mail.ru


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