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

 
 
> Проблема с настройкой генератора dsPIC33E
Satellite2000
сообщение Oct 23 2014, 14:43
Сообщение #1





Группа: Новичок
Сообщений: 4
Регистрация: 3-04-11
Пользователь №: 64 102



Здравствуйте.
Осваиваю 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. Что я делаю не так?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 2)
Satellite2000
сообщение Oct 26 2014, 08:51
Сообщение #2





Группа: Новичок
Сообщений: 4
Регистрация: 3-04-11
Пользователь №: 64 102



Вопрос снят. Настроил таймер на тактирование от внутреннего генератора, а в прерывании уже дергал вывод _RB9. ширина импульса соответствовала расчетной. Т.е. если бы системная частота была бы в 2 раза меньшей, то и таймер (судя по схеме тактирования) работал бы в 2 раза медленее. А вот почему работает не так как надо если дергать из main на предельной скорости для меня осталось загадкой.
Go to the top of the page
 
+Quote Post
Nikolay_Po
сообщение Feb 10 2015, 19:51
Сообщение #3





Группа: Участник
Сообщений: 9
Регистрация: 6-03-14
Пользователь №: 80 822



Цитата(Satellite2000 @ Oct 26 2014, 12:51) *
...А вот почему работает не так как надо если дергать из main на предельной скорости для меня осталось загадкой.

Переферия в серии EP работает медленнее ядра. Обращение, в том числе и к регистрам специального назначения, занимает два такта, а не один, как в предыдущих сериях dsPIC и PIC24. Таймер же имеет прямую связь с выводом, поэтому результат совпадает с ожидаемым.
Вдруг кому пригодится.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 17:22
Рейтинг@Mail.ru


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