LinkedIn YouTube Facebook
Szukaj

Newsletter

Proszę czekać.

Dziękujemy za zgłoszenie!

[KURS] Aplikacje DSP na przykładzie mikrokontrolerów C2000 firmy Texas Instruments inicjalizacja systemowa procesora serii Piccolo F2802x, część 3

Tab. 1. Rejestry układu oscylatora, układu PLL, układu włączania sygnałów zegarowych modułów peryferyjnych, układu sterowania trybu niskiego poboru prądu (LPM) oraz układu CPU Watchdog układów procesorowych serii Piccolo TMS320F2802x [5]

Nazwa Adres Opis (1) Zmienna wskazująca strukturę opisu
XCLK 0x0000 7010 Rejestr sterujący XCLKOUT/XCLKIN myCLK
PLLSTS 0x0000 7011 Rejestr stanu PLL myPLL
CLKCTL 0x0000 7012 Rejestr sterujący zegara  
PLLOCKPRD 0x0000 7013 Rejestr okresu stabilizacji sygnału PLL  
INTOSC1TRIM 0x0000 7014 Rejestr trymowania wewnętrznego oscylatora 1  
INTOSC2TRIM 0x0000 7016 Rejestr trymowania wewnętrznego oscylatora 2  
LOSPCP 0x0000 701B Rejestr preskalera zegara LSPCLK  
PCLKCR0 0x0000 701C Rejestr sterujący 0 włączania zegarów modułów peryferyjnych.  
PCLKCR1 0x0000 701D Rejestr sterujący 1 włączania zegarów modułów peryferyjnych.  
LPMCR0 0x0000 701E Rejestr sterujący modułu LPM  
PCLKCR3 0x0000 7020 Rejestr sterujący 3 włączania zegarów modułów peryferyjnych.  
PLLCR 0x0000 7021 Rejestr sterujący PLL  
SCSR 0x0000 7022 Rejestr sterujący i stanu systemu myWdog
WDCNTR 0x0000 7023 Rejestr zegara modułu CPU Watchdog  
WDKEY 0x0000 7025 Rejestr klucza modułu CPU Watchdog  
WDCR 0x0000 7029 Rejestr sterujący modułu CPU Watchdog  
BORCFG 0x985 Rejestr konfiguracyjny modułu BOR  

(1) Wszystkie rejestry mają ochronę EALLOW.

 

Deklaracje dla obsługi modułu CPU Watchdog znajdują się w pliku nagłówkowym wdog.h w ścieżce

C:\TI\controlSUITE\device_support\f2802x\v210\f2802x_common\include

Funkcje biblioteczne obsługi modułu CPU Watchdog znajdują się z pliku źródłowym wdog.c w ścieżce

C:\TI\controlSUITE\device_support\f2802x\v210\f2802x_common\source

14. W pliku Example_F2802xGpioSetup.c odszukaj linię (62) kodu WDOG_Handle myWDog; Przyciśnij klawisz Ctrl , najedź kursorem na nazwę typu WDOG_Handle i kliknij na nią lewym klawiszem myszy. Zostanie otwarty plik deklaracji wdog.h oraz pokazana linia z deklaracją typu WDOG_Handle.

Wskazanie na strukturę WDOG_Obj (jako nowy typ WDOG_Handle ) jest zdefiniowane w pliku wdog.h

typedef struct WDOG_Obj * WDOG_Handle;

Struktura WDOG_Obj opisu modułu CPU Watchdog jest zdefiniowana w pliku wdog .h . Jest to zdefiniowanie nowego typu.

//! \brief Defines the watchdog (WDOG) object
typedef struct _WDOG_Obj_
{
    volatile uint16_t   SCSR;      //!< System Control & Status Register
    volatile uint16_t   WDCNTR;    //!< Watchdog Counter Register
    volatile uint16_t   rsvd_1;    //!< Reserved
    volatile uint16_t   WDKEY;     //!< Watchdog Reset Key Register
    volatile uint16_t   rsvd_2[3]; //!< Reserved
    volatile uint16_t   WDCR;      //!< Watchdog Control Register
} WDOG_Obj;

Struktura obejmuje wszystkie rejestry sterujące modułu CPU Watchdog układów procesorowych serii Piccolo F2802x (patrz tab.1). Pomiędzy rejestrami modułu znajdują się obszary nieistotne deklarowane jako rsvd_x.

15. W oknie edycyjnym wróć do pliku głównego Example_F2802xGpioSetup.c.

Dalej w na początku funkcji main() jest definiowana zmienna myWdog typu WDOG _Handle określająca główny wskazanie (handle) na strukturę opisu dla modułu CPU Watchdog

WDOG_Handle myWDog;

16. Przyciśnij klawisz Ctrl i najedź kursorem na nazwę funkcji WDOG_init. Gdy nazwa jest podkreślona kliknij na nią lewym klawiszem myszy. Zostanie otworzony plik z deklaracją tej funkcji z krótkim opisem praktycznie identycznym z opisem w dokumentacji.

Funkcja WDOG_init realizuje inicjowanie zmiennej myWDog. Deklaracja funkcji WDOG_init jest zamieszczona w pliku wdog.h

//! \brief     Initializes the watchdog (WDOG) object handle
//! \param[in] pMemory     A pointer to the base address of the WDOG registers
//! \param[in] numBytes    The number of bytes allocated for the WDOG object, bytes
//! \return    The watchdog (WDOG) object handle
WDOG_Handle WDOG_init(void *pMemory,const size_t numBytes);

Wywołanie funkcji WDOG_init jest zamieszczone na początku programu w linii

myWDog = WDOG_init((void *)WDOG_BASE_ADDR, sizeof(WDOG_Obj));

Wywołanie funkcji WDOG_init jest zrealizowane z argumentami będącymi zdefiniowanymi wartościami:

  • Adres w przestrzeni danych określający początek obszaru adresowego rejestrów sterujących i danych modułu CPU Watchdog. Jest on zamieszczony w pliku wdog.h
//! \brief Defines the base address of the watchdog (WDOG) registers
#define WDOG_BASE_ADDR                  (0x00007022)
  • Wartość podająca liczbę bajtów struktury opisu modułu CPU Watchdog.

Uwaga: Dla procesorów serii Piccolo F2802x bajt ma rozmiar słowa, czyli 16 bitów.

17. W oknie edycyjnym wróć do pliku głównego Example_F2802xGpioSetup.c. 18. Zauważ przypadkową zawartość zmiennych pokazywanych w oknie Variables (rysunek 15). 19. Przejdź do linii (71) kodu w pliku głównym z wywołaniem funkcji WDOG_init. Kliknij kilka razy na przycisk pracy krokowej Step Over  na pasku narzędziowym okna Debug . 20. Kliknij na przycisk pracy krokowej Step Into  na pasku narzędziowym okna Debug .

 

  Rys. 16. Informacja o błędnych ścieżkach dostępu kodu źródłowego biblioteki driverlib

Rys. 16. Informacja o błędnych ścieżkach dostępu kodu źródłowego biblioteki driverlib

 

Wyświetlany jest komunikat pokazany na rysunku 16. Problem jest spowodowany wygenerowaniem biblioteki driverlib w lokalizacji innej niż standardowa ścieżka pakietu controlSUITE.

Można doraźnie zaradzić problemom dostępu.

21. Kliknij na przycisk Locate File. Wskaż ścieżkę

C:\ti\controlSUITE\device_support\f2802x\v210\f2802x_common\source

Definicja funkcji WDOG_init jest zamieszczona w pliku wdog.c

 
WDOG_Handle WDOG_init(void *pMemory, const size_t numBytes)
{
    WDOG_Handle wdogHandle;
    if(numBytes < sizeof(WDOG_Obj))
    return((WDOG_Handle)NULL);
    // assign the handle
    wdogHandle = (WDOG_Handle)pMemory;
    return(wdogHandle);
} // end of WDOG_init() function

Po wywołaniu funkcji WDOG_init można w oknie Variables zobaczyć aktualne wartości argumentów tego wywołania (rysunek 17).

 

Rys. 17. Stan perspektywy CCS Debug po wywołaniu funkcji WDOG_init.

Rys. 17. Stan perspektywy CCS Debug po wywołaniu funkcji WDOG_init.

 

22. Kliknij kilka razy na przycisk pracy krokowej Step Over  aż wykonanie powróci do pliku głównego.

Zmienna myWDog w rezultacie wywołania funkcji WDOG_init przyjmuje wartość adresową 0x00007022 (rysunek 18, porównaj z tablicą 1).

 

Rys. 18. Ustawienie wartości adresowej zmiennej myWDog po wywołaniu funkcji WDOG_init

 

Teraz można używać funkcji obsługi modułu CPU Watchdog z biblioteki driverlib. Każda funkcja obsługi modułu CPU Watchdog wymaga podania wskazania na strukturę opisu modułu CPU Watchdog jako pierwszy argument wywołania. Następne argumenty zależą od realizowanej funkcjonalności.

Linia (74) wywołania funkcji WDOG_disable w programie głównym projektu wygląda następująco

 WDOG_disable(myWDog);