LABORATORIUM Procesory i komputery przemysłowe Katedra Systemów Elektroniki Morskiej Wydział Elektroniki Telekomunikacji i Informatyki Politechnika Gdańska Temat nr 5 System czasu rzeczywistego bazujący na stałopozycyjnym procesorze sygnałowym Prowadzący: Mariusz Rudnicki Opracowali: Jan H. Schmidt Aleksander Schmidt
Cel ćwiczenia Celem ćwiczenia jest zapoznanie studenta z możliwościami procesora sygnałowego TMS320F2808 firmy Texas Instruments. Ćwiczenie realizowane będzie z wykorzystaniem zestawu uruchomieniowego firmy Spectrum Digital zawierającego w/w procesor. Omawiany układ stanowi hybrydę mikrokontrolera oraz procesora sygnałowego. Jego bogate zasoby peryferyjne umożliwiają samodzielną pracę a znaczna moc obliczeniowa pozwala na implementację złożonych algorytmów. Jest to przedstawiciel serii 32 bitowych procesorów z wbudowaną pamięcią Flash oraz charakteryzujących się mocą obliczeniową 100 MIPS. Płyta zestawu uruchomieniowego posiada złącza jak przedstawiono na poniższym zdjęciu: Rys. 1. Rozmieszczenie elementów, wyprowadzeń oraz bloków funkcjonalnych na płycie zestawu uruchomieniowego TMS320F2808 DSK Płyta zawiera następujące elementy: procesor sygnałowy TMS320F2808, taktowany zegarem 100 MHz; 2 układy interfejsów linii RS232C (SCI-A, SCI-B); 2 układy interfejsów szyny ecan (CAN-A, CAN-B); złącze rozszerzające analogowe; złącze rozszerzające wejścia/wyjścia; złącze interfejsu JTAG. 2
Praca z modułem uruchomieniowym 1. Diagnostyka Rozpoczęcie pracy z modułem uruchomieniowym należy rozpocząć od uruchomienia programu diagnostycznego. Jego zadaniem jest przetestowanie połączenia pomiędzy komputerem PC (zintegrowanych środowiskiem programistycznym) a modułem uruchomieniowym jak i pracę najważniejszych elementów takich jak procesor oraz współpracujące z nim układy. Aby uruchomić program diagnostyczny należy użyć ikony umieszczonej na pulpicie: Rys. 2. Ikona programu diagnostycznego mudułu uruchomieniowego Rys. 3. Okno rozpoczęcia procesu diagnostycznego Rys. 4. Okno z poprawnym wynikiem diagnostyki 3
2. Zintegrowane środowisko programistyczne W celu uruchomienia zintegrowanego środowiska programistycznego należy skorzystać z ikony umieszczonej na pulpicie. Rys. 5. Ikona zintegrowanego środowiska programistycznego Rys. 6. Okno główne 4
Pierwszą czynnością po uruchomieniu środowiska jest nawiązanie połączenia z modułem uruchomieniowym - można tego dokonać poprzez wybranie opcji z menu Debug Connect (Alt+C). Rys. 7. Nawiązanie połączenia z modułem Wszystkie pliki projektowe oraz program terminala są umieszczone w następującej lokalizacji: C:\CCStudio_v3.1\MyProject\ Aby odczytać wcześniej przygotowany projekt należy wybrać opcję Project Open 5
Rys. 8. Odczyt pliku projektowego Po odczytaniu pliku projektowego z katalogu ProgramNr1 i wybraniu okna z plikiem źródłowym okno środowiska będzie wyglądało następująco: Rys. 9. Okno środowiska po odczycie pliku projektowego 6
Tworzenie programu wykonywalnego (*.out) znajdującego się w podkatalogu Debug dokonuje się poprzez: a.) Kompilację projektu: - opcja Rebuild All ikona poziomego Toolbaru: - opcja Rebuild All z menu Project: b.) Weryfikację tworzenia pliku wykonywalnego w oknie wyjściowym: 7
Ładowanie programu do pamięci procesora sygnałowego dokonuje się poprzez wybranie opcji z menu File Load Program: Plik wykonywalny (*.out) zwykle znajduje się w podkatalogu Debug tworzonego projektu. 8
Aby uruchomić program lub śledzić jego kod krok po kroku można użyć różnych ikon pionowego Toolbara, skrótów klawiszowych lub opcji z menu Debug: 9
Zadanie 1. Zmodyfikować szablon programu (Katalog projektu Program 1) tak, aby procesor zmieniał stan zadanego przez prowadzącego pinu wejścia/wyjścia dla odpowiedniego portu procesora. Zadanie wykonaj dla obu sposobów realizacji zadania patrz przykłady. Zmierz uzyskane czasy. Materiały pomocnicze zamieszczono w Załączniku 1. W sprawozdaniu należy: 1. Umieścić zestawiony kod programu, 2. Umieścić zarejestrowane oscylogramy i zamieścić pomierzone czasy zmiany stanu a.) wysoki niski, b.) niski wysoki, 3. Skomentuj uzyskane czasy i ich różnice. Powyższe czynności należy wykonać dla obu sposobów realizacji zadania Przykład: Zestawić program tak aby pin GPIO0 zmieniał stan wysoki niski, niski wysoki, wysoki niski ). Stan wysoki poziom napięcia 3.3V, stan niski 0V. Poprawność działania programu zweryfikować podglądając przebieg sygnału na pinie GPIO0 korzystając z oscyloskopu. Fragment kodu programu (pierwszy sposób): EALLOW; GpioCtrlRegs.GPAMUX1.bit.GPIO0 = 0; GpioCtrlRegs.GPADIR.bit.GPIO0 = 1; EDIS; //Multiplekser ustawiono na funkcję GPIO //GPIO0 ustawiono jako wyjście while(1){ GpioDataRegs.GPATOGGLE.bit.GPIO0 = 1; } //Zmiana stanu pinu GPIO0 Fragment kodu programu (sposób drugi): EALLOW; GpioCtrlRegs.GPAMUX1.bit.GPIO0 = 0; GpioCtrlRegs.GPADIR.bit.GPIO0 = 1; EDIS; while(1){ GpioCtrlRegs.GPASET.bit.GPIO0 = 1; GpioCtrlRegs.GPACLEAR.bit.GPIO0 = 1; } //Multiplekser ustawiono na funkcję GPIO //GPIO0 ustawiono jako wyjście //Ustaw stan wysoki na pinie GPIO0 //Ustaw stan niski na pinie GPIO0 10
Zadanie 2. Zmień szablon programu (Katalog projektu Program 2) tak, aby procesor, wykorzystując układ Timer0, odmierzył czas zadany przez prowadzącego. Moment startu odliczania i jego zakończenie należy zasygnalizować zaświeceniem diody LED sterowanej z pina GPIO34. W szablonie programu zamieszczono odpowiednie funkcje do wykorzystania: void LED_On(void); void LED_Off(void); void LED_Toggle(void); Materiały pomocnicze zamieszczono w Załączniku 2. W sprawozdaniu należy: 1. Umieścić zestawiony kod programu 11
Zadanie 3. Zmodyfikować szablon programu (Katalog projektu Program 3) tak, aby procesor wykorzystując interfejs SCI (RS232C) wysyłał zadany znak z określonymi parametrami transmisji zadanymi przez prowadzącego. Używając programu Terminal na komputerze PC podejrzeć poprawność wysyłanych znaków. Materiały pomocnicze zamieszczono w Załączniku 3,4 i 5. W sprawozdaniu należy: 1. Zamieścić zestawiony kod programu. 2. Zamieścić zarejestrowane oscylogramy przebiegu linii TxD (RS232C) i zidentyfikować na nim bit startu, stopu, parzystości oraz bity przesyłanego znaku. 3. Zamieścić zrzut ekranu z odebranymi znakami okna programu Terminal. Rys. 10. Schemat połączeń Przykład: Zestawić programu z następującymi parametrami transmisji: 1 bit stopu, bez kontroli parzystości, dana 8-bitowa, prędkość transmisji 9600 bitów/s. Dla: f CPU = 100 000 000 Hz Prędkość transmisji = 9600 bit/s 12
Otrzymujemy: SCIHBAUD = 0x01; SCILBAUD = 0x44; Fragment kod programu: //Parametry transmisji SciaRegs.SCICR.bit.STOPBITS = 0; SciaRegs.SCICR.bit.PARITY = 0; SciaRegs.SCICR.bit.PARITYENA=0; SciaRegs.SCICR.bit.SCICHAR = 7; //1 stop bit //Odd Parity //Parity enabled //Character length control //Prędkość transmisji: SciaRegs.SCIHBAUD = 0x01; SciaRegs.SCILBAUD = 0x44; 13
Zadanie 4. Korzystając z interfejsu SCI (RS232C) zmodyfikować programu (Katalog projektu Program 4) tak, aby realizował zadany program. Działanie programu polega na odbieraniu znaku, odpowiednim zinterpretowaniu go i odpowiedzi. Parametry transmisji oraz schemat reakcji - wg wytycznych prowadzącego. Do komunikacji z modułem procesora należy na komputerze uruchomić program Terminal. Materiał pomocnicze zamieszczono w Załączniku 3. W sprawozdaniu należy: 1. Umieścić kod programu. 2. Umieścić zrzut ekranu wyników transmisji programu Terminal Rys. 11. Schemat połączeń Przykład: Zestawić program, który będzie realizował, po odebraniu znaku, odpowiednie zadania wg załączonej tabeli reakcji: Odebrany znak w kodzie ASCII Zadanie do realizacji 1 Zapal diodę LED i wyślij znak A 2 Zgać diodę LED i wyślij znak B Inne Wyślij znak C 14
Fragment kodu programu: Status = SciaRegs.SCIFFRX.bit.RXFFST; If(Status!= 0){ //Jest odebrany znak w buforze odbiorczym ReceivedChar = SciaRegs.SCIRXBUF.all; } If(ReceivedChar == 1 ){ LED_On(); SCIA_WyslijZnak( A ); while((sciaregs.scictl2.bit.txempty!= 1)&&(SciaRegs.SCIFFTX.bit.TXFFST >=16)); } else if(receivedchar == 2 ){ LED_Off(); SCIA_WyslijZnak( B ); while((sciaregs.scictl2.bit.txempty!= 1)&&(SciaRegs.SCIFFTX.bit.TXFFST >=16)); } else{ SCIA_wyslijZnak( C ); while((sciaregs.scictl2.bit.txempty!= 1)&&(SciaRegs.SCIFFTX.bit.TXFFST >=16)); } 15
Załącznik 1 Sygnały portów procesora Sygnały cyfrowe Rys. 12. Widok złącza P8 z cyfrowymi sygnałami I/O DSP Rys. 13. Szczegółowy opis pinów złącza P8 16
Sygnały analogowe Rys. 14. Widok złącz P5 i P9 z analogowymi sygnałami wejściowymi DSP Rys. 15. Szczegółowy opis pinów złącz P5 i P9 17
Procesor umożliwia multipleksowanie do 3 niezależnych sygnałów peryferyjnych na pojedynczym pinie GPIO co przedstawia poniższy rysunek. Rys. 16. Schemat blokowy konfiguracji pinu Definiując pin do pracy należy określić jego funkcję oraz rodzaj (wejście/wyjście). 18
Tabela 1. Możliwe ustawienia multiplexera 19
Załącznik 2 Zegary procesora Procesor posiada trzy 32-bitowe zegary, które mogą być użyte w aplikacjach użytkownika. Rys. 17. Schemat funkcjonalny timera Timer pracuje w następujący sposób: 32-bitowy rejestr licznika TIMH:TIM zostaje załadowany wartością z rejestru PRDH:PRD. Po uruchomieniu licznika rejestr licznika jest dekrementowany z taktem zegara SYSCLKOUT. Po osiągnięciu wartości zero generowane jest przerwanie. Zależność na generacje przerwania po upływie określonego czasu: PRD = f CPU [MHz]*żądany czas [us]. Maksymalna wartość PRD= 2 32 ; 20
Załącznik 3 Asynchroniczny port szeregowy SCI RS232C Rys. 18. Schemat blokowy modułu komunikacji szeregowej 21
Rys. 19. Rejestr parametrów transmisji 22
Załącznik 4 Ramka przesyłanej danej interfejs RS232C 1 bit startu; 7 bitów danej znak A 41 HEX ; Bit parzystości; dwa bity stopu. 23
Załącznik 5 Tabela ASCII 24