Określanie częstotliwości taktowania układu

Nasze polecane książki, kursy, strony internetowe, fora itp. pomocne przy przyswajaniu wiedzy związanej z PIC i pisaniem programów dla nich.
Awatar użytkownika
Antystatyczny
Geek
Geek
Posty: 1117
Rejestracja: czwartek 03 wrz 2015, 22:02

Określanie częstotliwości taktowania układu

Postautor: Antystatyczny » sobota 24 paź 2015, 14:53

Witam,

Jak wiadomo, by poprawnie działały makra __delay_ms() i __delay_us(), kompilator musi znać częstotliwość pracy wykorzystywanego przez nas układu. O prędkości pracy układu informujemy poprzez zdefiniowanie odpowiedniego makra lub we właściwościach projektu, co de facto również sprowadza się do zdefiniowania makra. Najpierw sposób pierwszy i łatwiejszy, ale obarczony pewną niedogodnością w przypadku pisania wieloplikowego projektu. Celowo pominąłem ustawienia bitów konfiguracyjnych, bo to nie ma dla nas w tej chwili znaczenia.

Kod: Zaznacz cały

#include <xc.h>
#include <stdint.h>
#include <stdbool.h>
#include "mpu_config.h"

#define _XTAL_FREQ 48000000UL

void main(void)
{
    while(true)
    {
       
    }
}


Oprócz plików nagłówkowych i standardowego punktu wejścia widzimy zdefiniowane makro _XTAL_FREQ, które informuje kompilator, że nasz układ taktowany jest sygnałem o częstotliwości 48MHz. Jest to sposób najprostszy i najszybszy, ale jeśli stworzymy sobie kilka plików i w każdym z nich będziemy mieli zdefiniowane takie makro (bo pliki te są np. naszymi libsami pisanymi kiedyś tam... i wtedy było nam potrzebne makro _XTAL_FREQ), kompilator "strzeli fochem" i poinformuje nas, że nastąpiła redefinicja makra _XTAL_FREQ. Ok, w porządku...jest na to sposób:

Kod: Zaznacz cały

#include <xc.h>
#include <stdint.h>
#include <stdbool.h>
#include "mpu_config.h"

#ifndef _XTAL_FREQ
    #define _XTAL_FREQ 48000000UL
#endif


void main(void)
{
    while(true)
    {
       
    }
}


Jak widać zabezpieczyliśmy się przed wielokrotnym definiowaniem makra _XTAL_FREQ poprzez sprawdzenie, czy już jest zdefiniowane. Jeśli tak, kolejna definicja nie zostanie zrealizowana. Niestety i tutaj mogą się pojawić problemy z widocznością tego makra w innych plikach projektu i trzeba będzie kombinować, inkludować jakiś inny plik stworzony specjalnie na jakieś "globalne makra" itp.

Drugim i lepszym sposobem jest ustalenie prędkości pracy układu wprost we właściwościach projektu. W oknie z drzewem projektu klikamy na jego nazwę prawym klawiszem myszy i wybieramy Properties.
Zrzut ekranu 2015-10-24 14.48.04.png


Następnie, w nowym okienku, klikamy w xc compiler. Zerkamy na prawą stronę okna, by w tabelce dostrzec wiersz o nazwie Define macros. Klikamy w wiersz, by otwarło się kolejne okienko.

Zrzut ekranu 2015-10-24 14.49.39.png


Wpisujemy _XTAL_FREQ=48000000UL i od tej pory w całym naszym projekcie będzie dostępne to makro bez żadnych kombinacji alpejskich ;)

Zrzut ekranu 2015-10-24 14.52.26.png


Pozdrawiam!
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.
"The true sign of intelligence is not knowledge but imagination" Albert Einstein.

Wróć do „Źródła wiedzy na temat PIC”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 1 gość