Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Проблема с настройкой генератора dsPIC33E
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Все остальные микроконтроллеры > PIC
Satellite2000
Здравствуйте.
Осваиваю dsPIC33EP128MC504. Первым делом нужно настроить генератор. Генератор работает от кварца на 8МГц. По даташиту максимальная частота генератора после PLL 140МГц при этом процессор выполняет 70MIPS. Набросал исходник тестовой прошивки - настройка генератора, включение PLL по даташиту и в бесконечном цикле переключение выхода RB9. Скомпилировал, прошил, запустил, к RB9 подключил осциллограф. На осциллографе ширина импульса ~30нс. Хотя по идее должен быть 14нс т.к. одна команда выполняется за 1 машинный такт (1 Tcy). В дизассемблере тоже одна команда на включение выхода одна на выключение.
Исходный код:
Код
#include <p33ep128mc504>

_FICD(
ICS_PGD3 &           // Communicate on PGEC3 and PGED3
JTAGEN_OFF           // JTAG is disabled
)

_FOSC(
POSCMD_XT &          // XT Crystal Oscillator Mode
IOL1WAY_OFF &        // Allow multiple reconfigurations
FCKSM_CSECMD         // Clock switching is enabled,Fail-safe Clock Monitor is disabled
)

_FOSCSEL(
FNOSC_PRI &          // Primary Oscillator (XT, HS, EC)
IESO_OFF             // Start up with user-selected oscillator source
)

_FGS(
GWRP_OFF &           // General Segment may be written
GCP_OFF              // General Segment Code protect is Disabled
)




void main (void)
{
   // Configure PLL prescaler, PLL postscaler, PLL divisor
   PLLFBD=68; // M=70
   CLKDIVbits.PLLPOST=0; // N2=2
   CLKDIVbits.PLLPRE=0; // N1=2

   // Initiate Clock Switch to Primary Oscillator with PLL (NOSC=0b011)
   __builtin_write_OSCCONH(0x03);
   __builtin_write_OSCCONL(OSCCON | 0x01);

   // Wait for Clock switch to occur
   while (OSCCONbits.COSC!= 0b011);

   // Wait for PLL to lock
   while (OSCCONbits.LOCK!= 1);

   _TRISB9=0;

   whle(1)
   {
      _LATB9=1;
      _LATB9=0;
   }
}

Компилятор Microchip C30. Что я делаю не так?
Satellite2000
Вопрос снят. Настроил таймер на тактирование от внутреннего генератора, а в прерывании уже дергал вывод _RB9. ширина импульса соответствовала расчетной. Т.е. если бы системная частота была бы в 2 раза меньшей, то и таймер (судя по схеме тактирования) работал бы в 2 раза медленее. А вот почему работает не так как надо если дергать из main на предельной скорости для меня осталось загадкой.
Nikolay_Po
Цитата(Satellite2000 @ Oct 26 2014, 12:51) *
...А вот почему работает не так как надо если дергать из main на предельной скорости для меня осталось загадкой.

Переферия в серии EP работает медленнее ядра. Обращение, в том числе и к регистрам специального назначения, занимает два такта, а не один, как в предыдущих сериях dsPIC и PIC24. Таймер же имеет прямую связь с выводом, поэтому результат совпадает с ожидаемым.
Вдруг кому пригодится.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.