1 Wprowadzenie 1.1 Architektura ARM

Transkrypt

1 Wprowadzenie 1.1 Architektura ARM
Białostocka
Politechnika
WYDZIAŁ ELEKTRYCZNY
KATEDRA TELEKOMUNIKACJI I APARATURY ELEKTRONICZNEJ
Instrukcja do zajęć laboratoryjnych
Temat ćwiczenia: Środowisko Keil. Arytmetyka stałoprzecinkowa.
Numer ćwiczenia: 1
Laboratorium z przedmiotu:
Systemy mikroprocesorowe w zastosowaniach przemysłowych i sieciowych
KOD: TS1C6
Opracowali:
dr inż. Maciej Szumski
dr inż. Krzysztof Konopko
2017
1
Wprowadzenie
1.1 Architektura ARM
Obecnie ponad 75% rynku 32-bitowych mikroprocesorów stosowanych w systemach
wbudowanych stanowią procesory z architekturą ARM. Używa się ich między innymi w
telefonach komórkowych, routerach, systemach przemysłowych, a nawet w zabawkach
dziecięcych. Procesory ARM wyposażone w rdzenie Cortex zostały podzielone na trzy grupy:
• A przeznaczona do implementacji aplikacji z systemami operacyjnymi, wymagających
dużych mocy obliczeniowych i obsługi pamięci wirtualnej z MMU (Memory
Management Unit),
• R stworzona do systemów czasu rzeczywistego, w których czas reakcji jest krytyczny
(np. ABS),
• M oferująca bardzo korzystny stosunek ceny do możliwości, przeznaczona do
zastosowań konsumenckich i przemysłowych.
Procesory ARM wspierają cztery różne zestawy instrukcji:
• Thumb stworzony w celu zwiększenia gęstości kodu, stosuje instrukcje 16-bitowe,
ograniczoną różnorodność operandów oraz ograniczony zakres dostępnych rejestrów,
• ARM32 zawiera instrukcje 32-bitowe, większy zakres wartości operandów i zakres
skoków relatywnych oraz dostęp do wszystkich rejestrów,
• Thumb-2. stanowi kompromisem pomiędzy Thumb i ARM32, zawiera cały zestaw
Thumb i wybrane instrukcje ARM32 (celem jest duża gęstość, zbliżona do Thumb i
wydajność porównywalna z A RM 32).
• ARM64 zawiera zestaw instrukcji 64-bitowych wykorzystywany w procesorach o
największych mocach obliczeniowych, stosowanych np. w serwerach.
1.2 ZL29ARM - zestaw uruchomieniowy z mikrokontrolerem
STM32F107VCT6
Rys. 1.1. ZL29ARM - zestaw uruchomieniowy z mikrokontrolerem STM32F107VCT6
ZL29ARM jest uniwersalnym zestawem uruchomieniowym, przeznaczonym do
testowania aplikacji realizowanych na mikrokontrolerach STM32F107 (rodzina
Connectivity Line). Podstawowe właściwości zestawu:
 mikrokontroler STM32F107VCT6 w obudowie LQFP100 (m.in. 256 kB
pamięci Flash, 64 kB pamięci SRAM, 2xSPI, 1xI2C, 5xUART, USB-OTG,
2xCAN, MAC Ethernet, ADC, 2xDAC)
 złącze dla modułu PHY (ZL3ETH)
 złącze dla alfanumerycznego wyświetlacza LCD 2x16 znaków (LCD1602)
 złącze dla graficznego wyświetlacza LCD 128x64 pikseli ze sterownikiem
KS0108 (LCD12864)
 5-pozycyjny joystick
 2 przyciski
 2 diody LED
 20-stykowe złącze JTAG umożliwiające programowanie pamięci oraz
debugowanie programu
 złącze host USB
 złącze device USB
 wbudowany klucz prądowy do zasilania device USB
 złącze z wyprowadzoną magistralą I2C
 złącze z wyprowadzoną magistralą SPI
 zworki służące do wyboru typu pamięci, z której zostanie uruchomiony
mikrokontroler
 potencjometr umożliwiający zmianę napięcia podawanego na wejście
przetwornika analogowo-cyfrowego wbudowanego w mikrokontroler
 interfejs RS232 wraz z konwerterem napięć MAX232 ze złączem DB9 (dzięki
wbudowanemu w mikrokontroler bootloaderowi możliwe jest również
programowanie przez RS232)
 interfejs CAN (układ L9616) ze złączem DB9
 złącze kart SD
 przetwornik piezoelektryczny
 zasilanie ze złącza USB lub z zewnętrzengo zasilacza (9...12 V)
 18 linii GPIO wyprowadzonych na złącza szpilkowe
1.3 Środowisko programistyczne (IDE Integrated
Development Environment)
Do wygodnej pracy przy tworzeniu projektów programistycznych nieodzowne jest
funkcjonalne i wspierające użytkownika środowisko programistyczne. Dla platformy ARM
powstało wiele takich środowisk. Na rynku prym wiodą komercyjne pakiety: MDK-ARM
produkowany przez firmę Keil (należącą obecnie do ARM), Embedded Workbench
oferowany przez firmę IAR, CrossWorks firmy Rowley oraz bezpłatny (dystrybuowany na
licencji GPL) zestaw narzędzi programistycznych, składający się z kompilatora ARM-GCC
oraz środowiska Eclipse.
W trakcie ćwiczeń laboratoryjnych wykorzystywane będzie środowisko
programistyczne oferowane przez firmę Keil. Bezpłatną wersję środowiska można pobrać ze
strony https://www.keil.com/demo/eval/arm.htm. Po instalacji należy jeszcze zaktualizować
środowisko przy pomocy Pack Installer’a.
Rys. 1.1. Okno środowiska programistycznego firmy Keil
Konfiguracja środowiska firmy „Keil” do symulacji i współpracy z zestawem
wyposażonym w procesor STM320F107VC
Przed rozpoczęciem tworzenia projektu należy w oknie Pack Installer’a wybrać
nazwę mikrokontrolera STM32F107VC (All Devices → STMicroelectronics → STM32F1
Series → STM32F107 → STM32F107VC). Zainstalować paczkę Keil::STM32F1xx_DFP i
zaktualizować paczkę ARM::CMSIS. Utworzenie projektu należy zacząć od założenia
katalogu roboczego. Do utworzonego katalogu należy skopiować biblioteki (katalog
Libraries) oraz dokumentacje (katalog Dokumentacja) ze wskazanego przez prowadzącego
źródła. Na koniec należy utworzyć katalog projektem – (np. Projekt00) i skopiować do niego
pliki:
 stm32f10x_conf.h
 stm32f10x_it.c
 stm32f10x_it.h
Aby utworzyć nowy projekt należy: wybrać menu Project → New Vision Project... . Plik
projektu należy zapisać w przygotowanym katalogu Projekt00, pod nazwa projekt00. Jako
platformę docelowa należy z drzewa dostępnych platform wybrać STMicroelectronics →
STM32F1Series → STM32F107 → STM32F107VC. Manage Run-Time Environment należy
zamknąć przyciskiem OK.
Inicjalizacje projektu należy rozpocząć od stosownego podziału plików na katalogi. W tym
celu w katalogu głównym Target 1 należy utworzyć katalogi (kliknąć prawym przyciskiem
myszy na Target 1 i wybrac opcje Add Group...): UserCode (na kod użytkownika),
StdPeriphDrv (na biblioteki do obsługi peryferii), CMSIS (na biblioteki do obsługi rdzenia)
oraz RVMDK (na plik startowy mikrokontrolera). Katalog, który domyślnie zostaje
utworzony w nowym projekcie Source Group 1 można usunąć.
Następnie trzeba uzupełnić utworzone katalogi odpowiednimi plikami. Warto utworzyć
najpierw plik main.c poprzez klikniecie prawym przyciskiem myszy katalogu UserCode, a
następnie wybranie opcji Add New Item to Group ’UserCode’. Z okna, które się pojawiło
należy wybrać plik typu C File (.c), nazwać go main.c i zatwierdzić przyciskiem OK. Plik
ten automatycznie zostanie otwarty w edytorze.
Można teraz uzupełnić zawartość pliku przykładowym kodem:
#include "stm32f10x .h"
int main ( void ){
return 0;
}
Należy jeszcze dodać następujące pliki (dwukrotnie klikając lewym przyciskiem myszy na
odpowiednie katalogi):
 do UserCode dodać:
– .\stm32f10x_it.c
 do StdPeriphDrv dodać:
– .\Libraries\STM32F10x_StdPeriph_Driver\src\misc.c
– .\Libraries\STM32F10x_StdPeriph_Driver\src\stm32f10x_flash.c
– .\Libraries\STM32F10x_StdPeriph_Driver\src\stm32f10x_gpio.c
– .\Libraries\STM32F10x_StdPeriph_Driver\src\stm32f10x_rcc.c
 do CMSIS dodac:
– .\Libraries\CMSIS\CM3\CoreSupport\core_cm3.c
– .\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\system_stm32f10x.c
 do RVMDK dodac:
– .\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\startup\arm\startup_stm32f10x_cl.s
Po dodaniu plików można przystąpić do konfiguracji projektu. W tym celu należy dwukrotnie
kliknąć Target 1 z drzewa projektu, a następnie wybrać menu Project → Options for Target
’Target 1’....
Rys. 1.2. Okno konfiguracji projektu
Konfiguracja powinna uwzględniać:
 w zakładce Device:
– wybór odpowiedniego mikrokontrolera, tj. STM32F107VB,
 w zakładce Target:
– ustawienie odpowiedniej częstotliwości kwarcu Xtal (MHz), tj. na 10.0 (taki właśnie
jest zamontowany w stosowanym w laboratorium zestawie uruchomieniowym),
 w zakładce Output:
– zaznaczenie opcji Browse Information, w celu umożliwienia wyszukiwania funkcji i
zmiennych w plikach źródłowych,
 w zakładce C/C++
– uzupełnienie pola Define o definicje USE_STDPERIPH_DRIVER, pozwalające na
wykorzystanie standardowej biblioteki do obsługi peryferii,
– wybór poziomu optymalizacji na zerowy, tj. Level 0 (-O0),
– zaznaczenie opcji One ELF Secion per Function,
– wybór wyświetlania wszystkich ostrzeżeń, tj. All Warnings,
– dodanie ścieżek do plików nagłówkowych (kliknąć lewym przyciskiem myszy na
trzy kropki, na prawo od Include Paths, utworzyć rekord klikając klawisz Insert,
wpisać ścieżkę):
..\Libraries\CMSIS\CM3\CoreSupport
..\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x
..\Libraries\STM32F10x_StdPeriph_Driver\inc
..\Projekt00
 w zakładce Linker
– zaznaczenie opcji Use Memory Layout from Target Dialog,
 w zakładce Debug (Rys. 12)
– zaznaczenie opcji Use Simulator.
Powyższa konfiguracja pozwala na kompilację utworzonego projektu. Odbywa się to poprzez
wybór z menu Project → Build Target (lub wciśnięcie klawisza F7).
2
Cel i zakres ćwiczenia
Celem ćwiczenia jest ugruntowanie wiedzy studentów oraz nabycie przez nich
umiejętności z zakresu podstaw programowania mikroprocesorów. W ramach zajęć studenci
nabywają podstawowe umiejętności z zakresu posługiwania się zintegrowanym środowiskiem
programistycznym Keil. Studenci zdobywają umiejętność tworzenia, uruchamiania i
testowania oprogramowania mikrokontrolerów na przykładzie zestawu ZL29ARM z
mikrokontrolerem STM32F107VCT6 oraz poznają asembler mikroprocesora z rodziny
Cortex M3. Realizowanymi zadaniami w bieżącym ćwiczeniu są podstawowe działania
arytmetyczne i logiczne z wykorzystaniem działań stałoprzecinkowych.
3
Zagadnienia do opracowania przed
przystąpieniem do zajęć
Przed przystąpieniem do zajęć należy opracować następujące zagadnienia:
 architekturę mikroprocesorów z rdzeniem Cortex M3 [4] w tym stosowanego na
zajęciach mikroprocesora z STM32F107VC [3],
 sposób konfiguracji zastawu ZL29ARM [2] za pomocą zworek,
 stałoprzecinkowe reprezentacje liczb:
- liczby całkowite (zinterpretować ciąg bitów o długości 8, 16, 32 i 64 w różnych
formatach) [1 rozdz. 2],
- liczby ułamkowe ze znakiem – format Qn.m [1 rozdz. 14],
 składnia asemblera procesorów z rodziny Cortex M3 [6] w szczególności lista i
składnia rozkazów stałoprzecinkowych (dodawanie, odejmowanie, mnożenie, operacje
logiczne) [1 rozdz. 5 – 8].
4
Przebieg ćwiczenia
Ćwiczenia laboratoryjne prowadzone są w oparciu o zestaw ZL29ARM [2] umożliwiający
realizację aplikacji dla mikrokontrolera STM32F107 (rodzina Connectivity Line).
Środowisko Keil:
a) Przeanalizować ustawienia zworek zamontowanych na płycie zestawu.
b) Uruchomić komputer i utworzyć pierwszy projekt zgodnie z informacjami zawartymi
w instrukcji (rozdz. 1.3).
c) Napisać program kopiujący n-elementowy łańcuch tekstowy (przykładowa realizacja
procedury znajduje się w [1 rozdz. 4.8].
d) W trybie debugowania prześledzić wykonywanie programu krok po kroku
obrazując, przy wykorzystaniu narzędzi środowiska Keil, zmiany wartości
zmiennych, zawartości rejestrów, zawartości wykorzystywanych obszarów
pamięci.
Arytmetyka stałoprzecinkowa:
a) Przy wykorzystaniu asemblera zrealizować proste procedury: odczytującą z pamięci
do rejestru i zapisującą z rejestru do pamięci liczby 8, 16 i 32, dodającą dwie liczby
16-bitowe i dwie 32-bitowe, mnożącą dwie liczby 16-bitowe.
b) Wykonać zestaw zadań przydzielony grupie przez prowadzącego. Realizacja zadań
wymaga znajomości działań arytmetycznych w kodach NKB, U2, Qm.n. Przykładowe
zadania znajdują się w [1 rozdz. 10.5, 14.3]. Każde zrealizowane zadanie należy
przedstawić prowadzącemu.
5
Opracowanie sprawozdania
Przygotowane sprawozdanie z zajęć powinno zawierać opis przebiegu ćwiczenia
laboratoryjnego w tym kody źródłowe procedur wraz z opisem i analizą działania (stan i
zmiany wartości rejestrów i komórek pamięci). Sprawozdanie powinno też zawierać wnioski
dotyczące realizacji poszczególnych punktów ćwiczenia laboratoryjnego.
6
Wymagania BHP
W trakcie realizacji programu ćwiczenia należy przestrzegać zasad omówionych we
wstępie do ćwiczeń, zawartych w: „Regulaminie porządkowym w laboratorium” oraz
w „Instrukcji obsługi urządzeń elektronicznych znajdujących się w laboratorium z
uwzględnieniem przepisów BHP”. Regulamin i instrukcja są dostępne w
pomieszczeniu laboratoryjnym w widocznym miejscu.
7
Literatura
Maciej Szumski, „Systemy Mikroprocesorowe w Sterowaniu. Część I.
ARM Cortex-M3”, PLUM, 2016
2. Dokumentacja zestawu ZL29ARM: http://kamami.pl/dl/zl29arm.pdf
3. STM32F107VC Datasheet: http://www.st.com/resource/en/datasheet/stm32f107vc.pdf,
2015
4. RM0008: STM32F101xx, STM32F102xx, STM32F103xx, STM32F105xx and
STM32F107xx advanced ARM®-based 32-bit MCUs:
http://www.st.com/resource/en/reference_manual/cd00171190.pdf, 2015
5. PM0075: STM32F10xxx Flash memory microcontrollers:
http://www.st.com/resource/en/reference_manual/cd00171190.pdf, 2012
6. PM0056: STM32F10xxx/20xxx/21xxx/L1xxxx Cortex-M3 programming manual:
http://www.st.com/resource/en/programming_manual/cd00228163.pdf, 2013
7. STM32F105xx and STM32F107xx revision Z connectivity line device limitations:
http://www.st.com/resource/en/errata_sheet/cd00238166.pdf, 2013
8. Krzysztof Paprocki, „Mikrokontrolery STM32 w praktyce”, BTC, 2011.
9. Marek Galewski, „STM 32 : aplikacje i ćwiczenia w języku C”, BTC, 2011.
10. William Hohl, „Asembler dla procesorów ARM : podręcznik programisty”, Helion, 2014.
1.