Перейти к содержанию
    

Проблема с настройкой генератора dsPIC33E

Здравствуйте.

Осваиваю 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. Что я делаю не так?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вопрос снят. Настроил таймер на тактирование от внутреннего генератора, а в прерывании уже дергал вывод _RB9. ширина импульса соответствовала расчетной. Т.е. если бы системная частота была бы в 2 раза меньшей, то и таймер (судя по схеме тактирования) работал бы в 2 раза медленее. А вот почему работает не так как надо если дергать из main на предельной скорости для меня осталось загадкой.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

...А вот почему работает не так как надо если дергать из main на предельной скорости для меня осталось загадкой.

Переферия в серии EP работает медленнее ядра. Обращение, в том числе и к регистрам специального назначения, занимает два такта, а не один, как в предыдущих сериях dsPIC и PIC24. Таймер же имеет прямую связь с выводом, поэтому результат совпадает с ожидаемым.

Вдруг кому пригодится.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...