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

Установка тактовой частоты PIC32

Есть кварц 16MHz.

Настраиваю тактовую частоту PIC32 следующим образом:

 

#pragma config FWDTEN = OFF

#pragma config POSCMOD = HS, FNOSC = PRI, FPBDIV = DIV_8

 

#define SYS_FREQ (80000000L)

 

.........

 

main()

{

SYSTEMConfig(SYS_FREQ, SYS_CFG_WAIT_STATES | SYS_CFG_PCACHE);

.......

while(1)

{

PORTD=1;

PORTD=0;

}

}

Смотрю частоту дерганий ножки проца на осциллографе, и вижу ,что время между передним фронтом 1-го и 2-го включения составляет 870нс .

Это явно не 80MHz.

 

Помогите пожалуйста настроить тактовую частоту!

Заранее спасибо!

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


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

Есть кварц 16MHz. ...

Смотрим конфигурацию осцилятора (стр.3).

Видим, что для того, что бы на входе PLL была частота 4 .. 5MHz, нужно сначала разделить эти 16 на 4. Так что должна быть директива в прагме:

FPLLIDIV = DIV_4. Потом эти 4 (которые получаем на входе PLL) нужно умножить на 20, значить FPLLMUL = MUL_20. Дальше, эту частоту без изменений нужно подавать дальше, т.е. FPLLODIV = DIV_1:

#pragma config FPLLODIV = DIV_1, FPLLMUL = MUL_20, FPLLIDIV = DIV_4, POSCMOD = HS, FPBDIV = DIV_1, FNOSC = PRIPLL

А потом, что бы "выжать" максимальную частоту, нужно пользоваться не "PORTX =", а "PORTXINV =":

while(1){
     PORTDINV = 1;
}

При такой конфигурации, частота на выводе получается около 16МГц. Это из-за того, что цикл, организованный С инструкцией while, тоже занимает несколько машинных циклов. На самом деле самую высокую частоту можно увидеть вот таким кодом:

while(1){
    PORTDINV = 1;
    PORTDINV = 1;
    PORTDINV = 1;
    PORTDINV = 1;
    PORTDINV = 1;
    PORTDINV = 1;
    PORTDINV = 1;
    PORTDINV = 1;
    PORTDINV = 1;
    PORTDINV = 1;
    PORTDINV = 1;
    PORTDINV = 1;
    PORTDINV = 1;
    PORTDINV = 1;
    PORTDINV = 1;
    PORTDINV = 1;
    PORTDINV = 1;
    PORTDINV = 1;
    PORTDINV = 1;
    PORTDINV = 1;
    PORTDINV = 1;
    PORTDINV = 1;
    PORTDINV = 1;
    PORTDINV = 1;
    PORTDINV = 1;
     ....
}

конечно, только во время исполнения тела цикла.

 

ПП Некоторые образцы 32-го допускают небольшой (без экстремизма, конечно) "оверклокинг"... но это отдельная тема.

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


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

То есть как я понял конфигурационные биты которые вы написали соответствуют тактовой частоте проца в 80MHz.

Я пробовал так писать но при выставление FNOSC = PRIPLL девайс не определяется (MPLAB_ICD3).

Я обязательно еще так попробую!

А как насчет альтернативной установки частоты?

Изменено пользователем ZEbr

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


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

А что pic умеет дергать ножками с частотой 80 мгц?

P.s. а чего это старые сообщения повылезали в непрочтенные.

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


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

А что pic умеет дергать ножками с частотой 80 мгц?

P.s. а чего это старые сообщения повылезали в непрочтенные.

Максимальная частота переферии 50 МГц.

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


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

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

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

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

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

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

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

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

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

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