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