Satellite2000 0 23 октября, 2014 Опубликовано 23 октября, 2014 · Жалоба Здравствуйте. Осваиваю 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 0 26 октября, 2014 Опубликовано 26 октября, 2014 · Жалоба Вопрос снят. Настроил таймер на тактирование от внутреннего генератора, а в прерывании уже дергал вывод _RB9. ширина импульса соответствовала расчетной. Т.е. если бы системная частота была бы в 2 раза меньшей, то и таймер (судя по схеме тактирования) работал бы в 2 раза медленее. А вот почему работает не так как надо если дергать из main на предельной скорости для меня осталось загадкой. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Nikolay_Po 0 10 февраля, 2015 Опубликовано 10 февраля, 2015 · Жалоба ...А вот почему работает не так как надо если дергать из main на предельной скорости для меня осталось загадкой. Переферия в серии EP работает медленнее ядра. Обращение, в том числе и к регистрам специального назначения, занимает два такта, а не один, как в предыдущих сериях dsPIC и PIC24. Таймер же имеет прямую связь с выводом, поэтому результат совпадает с ожидаемым. Вдруг кому пригодится. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться