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

 
 
> Проблемы тактирования периферии LPC1768
GetSmart
сообщение Oct 28 2010, 23:58
Сообщение #1


.
******

Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753



Вот вырезка из инициализации PLL0 проца LPC1768 в последней FreeRTOS (6.1.0). насколько я понял, в ней PLL работает на 400 МГц (что в разрешённом диапазоне 275-550). CCLKCFG равен 3, значит проц работает на 400/4 = 100 МГц.
Код
    /* select main OSC, 12MHz, as the PLL clock source. */
    SC->CLKSRCSEL = 0x1;        
    
    SC->PLL0CFG = 0x20031;
    SC->PLL0FEED = PLLFEED_FEED1;
    SC->PLL0FEED = PLLFEED_FEED2;
          
    /* Enable PLL, disconnected. */
    SC->PLL0CON = 1;                
    SC->PLL0FEED = PLLFEED_FEED1;
    SC->PLL0FEED = PLLFEED_FEED2;
    
    /* Set clock divider. */
    SC->CCLKCFG = 0x03;
    
    /* Configure flash accelerator. */
    SC->FLASHCFG = 0x403a;

Кварц у меня на плате (как и в исходниках фриртоса) = 12 МГц.

После этого я запускаю таймер 3, у которого ставлю делитель PCLK = 1/2 и следующее
Код
    SC->PCONP |= 1<<23;
    SC->PCLKSEL1 = (SC->PCLKSEL1 & ~(0x3<<14)) | (0x02 << 14);

    TIM3->TCR = 0x02;
    TIM3->CTCR = 0;
    TIM3->PR = 0;
    TIM3->MR0 = 100000000UL/2/100;

    TIM3->MCR = 0x03;
    TIM3->TCR = 0x01;
    TIM3->IR = 0xff;

    NVIC_SetPriority( TIMER3_IRQn, 6 );
    NVIC_EnableIRQ( TIMER3_IRQn );

А далее я вижу, что прерывание от таймера 3 происходит не 100, а 200 раз в секунду. Изменением делителя в PCLKSEL1 можно ускорить в 2 раза или замедлить в 2/4 раза. То есть он нормально работает. Получается, что тактирование таймера происходит не от CCLK (то есть от ядра проца), а от частоты в 2 раза выше.

У меня мануал кривой или что это за глюк?


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
bseyur
сообщение Oct 29 2010, 06:14
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 65
Регистрация: 8-01-07
Из: Томск
Пользователь №: 24 208



Требования эрраты не соблюдаете? PCLKSEL нужно инициализировать до включения PLL0.
Go to the top of the page
 
+Quote Post



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

 


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


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