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

42. Zobacz na oscyloskopie przebieg sygnału XCLKOUT (rysunek 27).

Wykonanie ustawienia modułu PLL na generowanie systemowego sygnału zegarowego SYSCLKOUT= 10MHz * 12/2 = 60MHz daje sygnał wyjściowy XCLKOUT=60MHz.

 

Rys. 27. Sygnał XCLKOUT układu procesorowego Piccolo F28027 po skonfigurowaniu modułu PLL na pracę z maksymalną częstotliwością systemowego sygnału zegarowego oraz z podzielnikiem sygnału wyjściowego XCLKOUT ustawionym na jeden. XCLKOUT = SYSCLKOUT

 

43. Wykonaj ponowne uruchomienie programu. Kliknij na przycisk pracy krokowej Restart  na pasku narzędziowym okna Debug. Praca programu zostanie zatrzymana na pierwszej linii kodu funkcji main(). 44. Zobacz w oknie Registers brak zmiany zawartości rejestrów PLLSTS i CLKCTL modułu PLL. Nie ma też zmiany zawartości rejestru XCLK ustawienia podzielnika sygnału XCLKOUT. 45. Zobacz na oscyloskopie przebieg sygnału XCLKOUT. Sygnał wyjściowy XCLKOUT dalej ma 60MHz.

Po wykonaniu ponownego uruchomienia programu przez debuger układ procesorowy Piccolo F28027 rozpoczął pracę z poprzednio ustawioną częstotliwością systemowego sygnału zegarowego. W tym przypadku jest SYSCLKOUT = 10MHz * 12/2 = 60MHz oraz sygnał wyjściowy XCLKOUT=60MHz.

46. Kliknij na przycisk Reset CPU  na pasku narzędziowym okna Debug .

W ten sposób została wykonana debugowa operacja RESET układu procesorowego Piccolo F28027 bez utraty programu wpisanego do pamięci RAM.

47. Zobacz w oknie Registers zmianę zawartości rejestru XCLK ustawienia podzielnika sygnału XCLKOUT (rysunek 28). Została ustawiona wartość domyślna. Zobacz w oknie Registers brak zmiany zawartości rejestrów PLLSTS i CLKCTL modułu PLL.

 

  Rys. 28. Stan perspektywy CCS debug po wykonaniu debugowej operacji RESET

Rys. 28. Stan perspektywy CCS debug po wykonaniu debugowej operacji RESET

 

48. Wykonaj ponowne uruchomienie programu. Kliknij na przycisk pracy krokowej Restart  na pasku narzędziowym okna Debug. Praca programu zostanie zatrzymana na pierwszej linii kodu funkcji main().

49. Ponownie wykonaj program do linii z wywołaniem funkcji CLK_setClkOutPreScaler. Zaznacz tą linię, kliknij na nią lewym klawiszem myszy.

50. Kliknij prawym klawiszem na zaznaczoną linię (poza tekstem kodu) i wybierz pozycję Run to Line.

Program zostanie uruchomiony i zatrzymany na zaznaczonej linii kodu.

51. Zobacz na oscyloskopie przebieg sygnału XCLKOUT (rysunek 29). Sprawdź częstotliwość sygnału.

 

Rys. 29. Sygnał XCLKOUT układu procesorowego Piccolo F28027 po po wykonaniu debugowej operacji RESET. Podzielnik sygnału wyjściowego XCLKOUT jest ustawiony na domyślny podział przez cztery

 

Po wykonaniu debugowej operacji RESET układ procesorowy Piccolo F28027 rozpoczął pracę z poprzednio ustawioną częstotliwością systemowego sygnału zegarowego. W tym przypadku jest SYSCLKOUT = 10MHz * 12/2 = 60MHz oraz sygnał wyjściowy XCLKOUT=60MHz. Jednak zmienił się podzielnik sygnału XCLKOUT w rejestrze XCLK na podział przez cztery. Dlatego XCLKOUT = 60 MHz/4=15 MHz.

Wartość domyślna jest wpisywana do rejestrów sterujących modułu PLL (PLLCR i PLLSTS) tylko podczas operacji RESET układu procesorowego spowodowanej przez zewnętrzny sygnał /XRS lub moduł CPU Watchdog.

Operacja RESET układu procesorowego wymuszona przez emulator sprzętowy (przez port JTAG) lub moduł wykrywania zaniku sygnału zegarowego (NMI Watchdog) nie powoduje zmiany zawartości rejestrów sterujących modułu PLL. Ale ustawia wartość domyślną innych rejestrów sterujących, np. modułu GPIO oraz podzielnika dla sygnału XCLKOUT.

Zawartość rejestru XCLK z polem bitowym podzielnika dla sygnału XCLKOUT oraz ustawienia portów GPIO nie jest zmieniania podczas ponownego uruchamiania programu (polecenie Restart ).

 

Kalibracja oscylatorów wewnętrznych INTOSC1 i INTOSC2 oraz modułu ADC

Procedura Device_cal jest umieszczona w pamięci Boot ROM układów procesorowych serii F2802x [7, 14].

Procedura Device_cal() wykonuje kalibrację oscylatorów wewnętrznych INTOSC1 i INTOSC2 oraz modułu ADC. Wartości do kalibracji są pobierane z pamięci OTP.

Kalibracja jest wykonywana automatycznie podczas normalnego wykonania procedury bootowania i nie jest potrzebna żadna akcja wykonywana przez użytkownika. Jeśli jednak zostanie pominięta inicjalizacja wykonywana z pamięci Boot ROM (np. w środowisku CCS) to kalibracja musi być wykonana przez program użytkownika. Błąd inicjalizacji układu procesorowego powoduje, że oscylatory i moduł ADC będą pracować z parametrami poza specyfikacją.

Programowe wywołanie procedury Device_cal() w kodzie użytkownika jest wykonywane w kilku krokach:

  • Utwórz wskaźnik do funkcji Device_cal(). Jest to realizowane poprzez deklarację procedury.
  • Włącz zegar modułu ADC (w rejestrze PCLKR0)
  • Wywołaj funkcję wskazywaną przez Device_cal.
  • Wyłącz zegar modułu ADC (w rejestrze PCLKR0)

Funkcje CLK_enableAdcClock(myClk) oraz CLK_disableAdcClock(myClk) z biblioteki driverlib stosowane są do włączania i wyłączania sygnału zegarowego modułu peryferyjnego ADC.

Wywołanie procedury Device_cal w programie głównym projektu wygląda następująco

Deklaracja procedury Device_cal jest zamieszczona w pliku F2802x_Examples.h w ścieżce

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

Procedura Device_cal jest zrealizowana w języku asemblerowym rodziny procesorów C2000 (rysunek 30).

 

Rys. 30. Kod proceduryDevice_cal kalibracji oscylatorów wewnętrznych INTOSC1 i INTOSC2 oraz modułu ADC

Rys. 30. Kod procedury Device_cal kalibracji oscylatorów wewnętrznych INTOSC1 i INTOSC2 oraz modułu ADC

 

Obsługa przerwań i modułu PIE

CPU procesorów rodziny TMS320C2000 obsługuje tylko 16 przerwań maskowalnych z przypisanymi priorytetami sprzętowymi INT1-INT14, DLOGINT oraz RTOSINT. Procesor posiada wiele modułów peryferyjnych dlatego CPU nie może bezpośrednio obsłużyć wszystkich tych przerwań. Do tego służy specjalny moduł – sterownik przerwań układów peryferyjnych PIE (Peripheral Interrupt Expansion).

Procesory rodziny TMS320C2000 posiadają moduł PIE, który multipleksuje przerwania generowane przez wiele modułów peryferyjnych i dołącza je do niewielu przerwań rdzenia CPU procesora. Dokładny opis działania modułu PIE jest zamieszczony w [5, 14].

W dalszej części programu wykonywana jest podstawowa inicjalizacja układu przerwań i modułu PIE:

  • Wywołanie funkcji PIE_disable(myPie) powoduje wyłączenie modułu PIE – sterownika przerwań układów peryferyjnych.
  • Wywołanie funkcji PIE_disableAllInts(myPie); powoduje zablokowanie obsługi przerwań należących do wszystkich 12-tu grup przerwań peryferalnych.
  • Wywołanie funkcji CPU_disableGlobalInts(myCpu); pwoduje globalne wyłączenie obsługi przerwań procesora.
  • Wywołanie funkcji CPU_clearIntFlags(myCpu); powoduje wyzerowanie wszystkich pozycji znacznika przerwań CPU.
  • Wywołanie funkcji PIE_setDebugIntVectorTable(myPie); powoduje wypełnienie wektorów przerwań w tablicy wektorów przerwań PIE adresami domyślnych procedur obsługi.
  • Wywołanie funkcji PIE_enable(myPie); powoduje włączenie modułu PIE.

Aby użyć przerwań trzeba jeszcze włączyć globalnie obsługę przerwań.

W programie znajduje się również fragment kodu dla konfiguracji budowania projektu z użyciem pamięci Flash. Gdy ustawiona jest wartość _FLASH to kod sekcji pamięci przepisywany jest z pamięci Flash do pamięci RAM.

Zaprezentowane w artkule postępowanie pozwala na zapoznanie się z inicjowanie systemowym procesorów serii Piccolo F2802x z użyciem biblioteki driverlib w środowisku programowym CCSv5. Uruchamianie przykładowych programów pakietu programowego controlSUITEv3 umożliwia poznanie sposobów programowania układów procesorowych Piccolo F2802x.

Przedstawione postępowanie pokazuje typowy sposób działania projektu dla większości instalacji środowiska programowego. Jednak mogą występować różnice zachowania się środowiska dla instalacji na różnych komputerach.

Henryk A. Kowalski

kowalski@ii.pw.edu.pl

 

Bibliografia

[1] Code Composer Studio, strona produktu http://www.ti.com/ccs

[2] controlSUITE Getting Started Guide (Rev. B), SPRUGU2B , 09 June 2011

[3] TMS320F28027, TMS320F28026, TMS320F28023, TMS320F28022, TMS320-F28021, TMS320F280200, Piccolo Microcontrollers, Data Sheet, SPRS523I, 31 Jul 2012

[4] TMS320F28027, TMS320F28026, TMS320F28023, TMS320F28022, TMS320-F28021, TMS320F280200, Piccolo MCU, Silicon Errata, SPRZ292J, 31 Jan 2012

[5] TMS320x2802x Piccolo System Control and Interrupts, SPRUFN3C, 29 Oct 2009

[6] TMS320x2802x, 2803x Piccolo Analog-to-Digital Converter (ADC) and Comparator, SPRUGE5F, 31 Dec 2011

[7] TMS320x2802x Piccolo Boot ROM Reference Guide (Rev. A), ), SPRUFN6A, 28 Oct 2009

       kod źródłowy w ramach pakietu controlSUITE w ścieżce C:\TI\controlSUITE\libs\utilities\boot_rom\2802x

[8] F2802x Firmware Development Package USER’S GUIDE v. 210 [ f2802x-FRM-EX-UG.pdf], pakiet controlSUITE

[9] F2802x Peripheral Driver Library USER’S GUIDE v. 210 [f2802x-DRL-UG.pdf], pakiet controlSUITE

[10] LAUNCHXL-F28027 C2000 Piccolo LaunchPad Experimenter Kit, User’s Guide, SPRUHH2, 25 Jul 2012

[11] C2000 Piccolo Workshop, Workshop Guide and Lab Manual, December 2010, Texas Instruments

[12] Henryk A. Kowalski, ”Zestaw ewaluacyjny C2000 Piccolo LaunchPad”, Elektronika Praktyczna 01/2013

[13] Henryk A. Kowalski, „C2000 Piccolo LanuchPad (1) – Pierwszy program w środowisku programowym CCSv5”, Elektronika Praktyczna 02/2013

[14] Henryk A. Kowalski, Procesory DSP dla praktyków, Wydawnictwo BTC, Warszawa, 2011  http://ii.pw.edu.pl/kowalski/dsp/book/

[15] Henryk A. Kowalski, Procesory DSP w przykładach, Wydawnictwo BTC, Warszawa, 2012  http://ii.pw.edu.pl/kowalski/dsp/book/

[16] Henryk A. Kowalski, Zestaw ewaluacyjny C2000 Piccolo LaunchPad, MIKROKONTROLER.PL

[17] Henryk A. Kowalski, C2000 Piccolo LanuchPad – Praca w środowisku programowym Code Composer Studio v5, MIKROKONTROLER.PL

[18] Henryk A. Kowalski, C2000 Piccolo LanuchPad – Inicjalizacja systemowa procesora serii Piccolo F2802x, MIKROKONTROLER.PL

[19] Henryk A. Kowalski, C2000 Piccolo LanuchPad – Budowanie biblioteki drivelib dla procesorów serii Piccolo F2802x, MIKROKONTROLER.PL

[20] Henryk A. Kowalski, C2000 Piccolo LanuchPad – Obsługa modułu GPIO procesora serii Piccolo F2802x, MIKROKONTROLER.PL

[21] Henryk A. Kowalski, C2000 Piccolo LanuchPad – Praca z modułem ADC procesora, MIKROKONTROLER.PL

[22] Henryk A. Kowalski, C2000 Piccolo LanuchPad – Programowanie pamięci Flash procesora Piccolo, MIKROKONTROLER.PL

[23] Henryk A. Kowalski, C2000 Piccolo LanuchPad – Obsługa wyświetlacza LCD ze sterownikiem typu HD44780, MIKROKONTROLER.PL

 

O autorze