Akademia Górniczo-Hutnicza w Krakowie Katedra Elektroniki WIET

Transkrypt

Akademia Górniczo-Hutnicza w Krakowie Katedra Elektroniki WIET
Akademia Górniczo-Hutnicza
w Krakowie
Katedra Elektroniki
WIET
Laboratorium mikrokontrolerów
Ćwiczenie 3
Fast GPIO, magistrale i zegar
Autor: Paweł Russek
http://www.fpga.agh.edu.pl/pm
ver. 9.11.16
1/12
1. Cel ćwiczenia
Celem tego ćwiczenia jest zapoznanie studenta z budową i celem stosowania architektury
wielomagistralowej mikrokontrolerów z rodziny Kinetis L. Zalety tej architektury zostaną
zaprezentowane poprzez porównanie modułów peryferyjnych GPIO i Fast GPIO.
Następnie student zapozna się ze sposobem użytkowania wielofunkcyjnego urządzenia
laboratoryjnego Analog Discovery. Urządzenie Analog Discovery pozwala na pomiary wartości
analogowych i cyfrowych, wizualizację i zapis mierzonych wartości, oraz generowanie
zaprogramowanych przebiegów.
Na zakończenie student dokona pomiarów mocy elektrycznej i wydajności mikrokontrolerów
w różnych trybach konfiguracji zegara systemowego i dla różnych modułów peryferyjnych
GPIO.
2. Moduł Fast GPIO
Architektura układów ARM składa się z dwóch magistral: APB (Advanced Peripheral Bus)
i AHB (Advanced High-Performance Bus). Magistrala AHB jest znacznie szybsza od magistrali
APB, ponieważ pozwala CPU na wykonanie cyklu dostępu (zapisu/odczytu) do modułów
peryferyjnych w jednym cyklu zegara. Magistrala APB jest wolniejsza i potrzebuje na dostęp
dwóch cykli zegara. Magistrala AHB jest bezpośrednio podłączona do CPU, a APB jest
połączone z CPU poprzez AHB (patrz rys. poniżej).
Schemat blokowy architektury Cortex-M0 wraz z modułami Fast GPIO (Low Latency
GPIO), oraz magistralami AHB i APB
W Kinetis L każdy z portów we/wy (Porty A-E) posiada dwa modułu poprzez które można się
do niego odwoływać. Jeden moduł jest adresowany, jak pozostałe urządzenia peryferyjne,
poprzez APB, a drugi przez AHB.
2/12
Zauważ, że w dokumentacji moduły, które są odpowiedzialne za dostęp do GPIO poprzez
magistralę AHB są nazwane FGPIO (Fast GPIO). Port A jest nazywany FGPIOA, port B to
FGPIOB itd. W nagłówku MKL25Z4.h nazwy odpowiednich struktur to FPTA, FPTB, FPTC,
FPTD i FPTE.
Ważnym praktycznym wnioskiem, który można wysnuć z tego paragrafu instrukcji jest
to, że w prosty sposób można przyśpieszyć działanie aplikacji na Kineti L poprzez
prostą zmianę nazw PTAx na FPTAx w kodzie programu.
Ćwiczenie 2.1
Wyszukaj adresy bazowe modułów FAST GPIOx w nagłówku “MKL25Z4.h”
FPTA
FPTB
FPTC
FPTD
FPTE
3. Zegar systemowy, a wydajność mikrokontrolera
Typowo zegar systemowy mikrokontrolera może być generowany na kilku rożnych sposobów.
Źródłem zegara mogą być:
•
wewnętrzny oscylator RC, który dostarcza sygnału o nieprecyzyjnej i niestabilnej
częstotliwości, ale nie wymaga żadnych elementów zewnętrznych,
•
zewnętrzny oscylator kwarcowy, który oferuje bardzo stabilną i precyzyjną
częstotliwość, ale jest rozwiązaniem drogim (w szczególności przy częstotliwościach w
okolicy 100 MHz),
•
wewnętrzna pętla fazowa PLL, która jest kompromisowym rozwiązaniem wobec
bardzo taniego oscylatora RC i kwarcu o bardzo dobrych parametrach. W tym
rozwiązaniu stosuje się niedrogi kwarc jako źródło sygnału o niskiej częstotliwości,
który jest następnie powielany za pomocą pętli fazowej. To rozwiązanie jest szeroko
stosowane w systemach mikroprocesorowych pracujących z częstotliwościami ponad
20 MHz. Dodatkową zaletą jest to, że PLL pozwala na programowanie wartości
częstotliwości zegara. Dzięki temu, można na przykład stosować szybki zegar podczas
wykonywania złożonych obliczeniowo zadań, a zegar powolny kiedy można oszczędzać
energię.
Mikrokontroler na płytce FRDM-KL25Z jest wyposażony w kwarc o częstotliwości 8 MHz, co
umożliwia programowanie zegara systemowego na kilka sposobów. Kiedy programista tworzy
nowy projekt w Keil uVision5 system automatycznie dodaje kod startowy, który jest
wykonywany po uruchomieniu mikrokontrolera, zanim jeszcze zostanie uruchomiona funkcja
„main()”. Częścią kodu startowego jest opisana w pliku „system_MKL25Z4.c”. Plik nagłówkowy
„system_MKL25Z4.h” udostępnia rożne tryby konfiguracji zegara poprzez definicję symbolu
„CLOCK_MODE”.
3/12
CLOCK_SETUP
MODE
Reference clock
CPU clock
Bus clock
0
FLL Engaged Internal
mode (FEI)
32 kHz Slow Internal
Reference Clock
20.97152 MHz
20.97152 MHz
1 (Max. clock
freq.)
PLL Engaged External
(PEE)
External crystal
8 MHz
48 MHz
24 MHz
2
Bypassed Low Power
Internal (BLPI)
4 MHz Fast Internal
Reference Clock
4 MHz
0.8 MHz
3
Bypassed Low Power
External (BLPE)
External
External crystal
8 MHz
4 MHz
1 MHz
Jako domyślny jest ustawiony tryb 0, ale można także wybrać inny tryb zmieniając wartość
definicji #define CLOCK_SETUP w pliku „system_MKL25Z4.h”.
Wydajność mikrokontrolera zależy od częstotliwości zegara systemowego oraz od pracy
kompilatora. Kiedy mikrokontroler współpracuje z urządzeniami peryferyjnymi szybkość
pracy zależy również od szybkości magistrali systemowej. W tym ćwiczeniu kompilatorem nie
będzie my się zajmować, zbadamy natomiast wpływ zegara.
4. Analog Discovery
Urządzenie wielofunkcyjne Analog Discovery firmy Digilent pozwala na przeprowadzanie
pomiarów, wizualizację wyników, generowanie przebiegów, zapisywanie zebranych danych i
kontrolowanie urządzeń analogowych i cyfrowych różnego rodzaju. Urządzenie jest małe, ale
oferuje ogromne możliwości studentom, którzy chcą samodzielnie eksperymentować z
układami elektronicznymi. Wejścia analogowe i cyfrowe mogą być podłączane za pomocą
krótkich uniwersalnych przewodów, które można łatwo podłączyć do złącz typu „goldpin”.
Komputer PC współpracuje z Analog Discovery za pomocą złącza USB i jest kontrolowany
poprzez oprogramowanie WaveForm 2015. WaveForm pozwala na konfigurację urządzenia i
prowadzenie eksperymentów.
4/12
Najprostszą metodą korzystania z Analog Discovery jest użycie aplikacji WaveForm. Aplikację
należy uruchomić, kiedy urządzenie jest już podpięte do złącza USB komputera. WaveForm
automatycznie wykryje urządzenie i się skonfiguruje. Jeżeli uruchomienie przebiegnie
poprawnie, to w głównym oknie aplikacji, w pasku statusu po prawej stronie, pojawi się
numer seryjny Analog Discovery.
5. Pomiar zużycia energii na płytce FRDM-25Z
Złącze J4 na płytce FRDM-KL25Z umożliwia wygodne przeprowadzenie pomiaru prądu
pobieranego przez mikrokontroler, a pośrednio także wartości rozpraszanej mocy.
5/12
Pomiar spadek napięcia na zworze J4 jest proporcjonalny do prądu pobieranego przez
mikrokontoler. Opornik połączony równolegle do zwory J4 to 10 ohm.
Ćwiczenie 5.1
Zapisz wzór na moc rozpraszaną przez mikrokontroler w funkcji napięcia na zworze J4.
P(UJ4)=???
6. Wydajność mikrokontrolera, czas odpowiedzi i moc.
W następnym ćwiczeniu zbadamy jak zmienia się wydajność mikrokontrolera. Będziemy
mierzyć czas odpowiedzi mikrokontrolera w różnych konfiguracjach częstotliwości zegara.
Mikrokontroler będzie wykonywał aplikację, która będzie sprawdzała stan logiczny na
jednym z wejść GPIO. W momencie zmiany stanu wejścia z poziomu niskiego na wysoki,
aplikacja wykona zmianę stanu na innym wyjściu GPIO. Jako wejście użyjemy pin 0 portu D, a
jako wyjście pin 0 portu B. Mierzony czas odpowiedzi to czas pomiędzy zmianą sygnału na
wejściu i wyjściu układu.
Ćwiczenie 6.1
1. Podłącz FRDM-25Z do Analog Discovery 2 zgodnie z diagramem
2. Uruchom “WaveForms” i skonfiguruj Analog Discovery.
2A. Ustaw przebieg prostokątny na wyjściu cyfrowym IO1 (podłączone do PTD0).
•
Kliknij “Patterns” w głównym oknie.
6/12
•
Wybierz “Add channels->Signal->DIO1” i kliknij “Add” (Uwaga: Na rysunku pokazano
DIO0.)
•
Aby skonfigurować dodane wyjście kliknij ikonę
w polu IO sygnału DIO1.
Następnie w oknie „Edit” wybierz „Clock” w polu „Type” i “10 kHz” w polu „Frequency”.
Kliknij „Close”
7/12
•
Na końcu kliknij przycisk „Run”, aby uruchomić przebieg prostokątny na wyjściu DIO1.
2B. Skonfiguruj podgląd stanów logicznych na wejściach cyfrowych IO0 i IO1 (podłączone do
PTB0 i PTD0).
•
Wybierz “Logic” w oknie “Welcome”.
•
Wybierz “Add channels->Signal->DIO0” i kliknij “Add”
8/12
•
Powtórz procedurę dodanie sygnału dla sygnału DIO1.
3B. Aby dokonać pomiaru różnicowego na zworze J4, skonfiguruj oscyloskop
•
Wybierz okno “Welcome” i kliknij przycisk “Scope”.
•
Wybierz „Channel 1” i ustaw wzmocnienie sygnału wejściowego w polu „Range” na
“20mV/div”.
Uwaga. Podczas wykonywania ćwiczenia dobieraj wartość wzmocnienia w taki sposób
9/12
aby maksymalnie wzmocnić sygnał i aby pomiar był możliwie najdokładniejszy.
3. Według kodu podanego poniżej, uruchom aplikację na płytce FRDM-25Z.
/*----------------------------------------------------------------------------* Name:
main.c
* Purpose: Toggling_LEDs application
* Author:
Student
*----------------------------------------------------------------------------*/
#include "MKL25Z4.h" /*Device header*/
#define LED_1
#define SW_1
0
0
int main()
{
//Enable clock for Port B and Port D
SIM->SCGC5|=SIM_SCGC5_PORTB(1)|SIM_SCGC5_PORTD(1);
//Configure Port B pin 0 as GPIO, Output
PORTB->PCR[LED_1]|=PORT_PCR_MUX(1);
PTB->PDDR|=(1<<LED_1);
//Configure Port D pin 0 as GPIO, Input, Pull-up resistor
PORTD->PCR[SW_1]|=PORT_PCR_MUX(1) | PORT_PCR_PE(1) | PORT_PCR_PS(0);
PTD->PDDR&=~(1<<SW_1);
while(1){
if( (PTD->PDIR & (1<<SW_1))==0){
if(PTB->PDOR & (1<<LED_1))
PTB->PDOR&=~(1<<LED_1);
else
10/12
FPTB->PDOR|=(1<<LED_1);
while((PTD->PDIR & (1<<SW_1))==0); //Wait for SW_1 release
}
}
}
4. Uruchom pomiar poprzez naciśnięcie przycisku “Single” w zakładce “Logic”.
Pamiętaj, aby dostosować ustawienie szybkości próbkowania w polu 'Base” w taki sposób, aby
najlepiej odpowiadała ona spodziewanemu opóźnieniu. Wartość przedstawiona na rysunku
poniżej jest jedynie orientacyjna.
Na podstawie uzyskanego przebiegu odczytaj opóźnienie.
5. Oblicz moc mikrokontrolera na podstawie odczytu napięcia na zworze J4 w oknie „Scope”.
6. Zmień konfigurację
“system_MKL25Z.h”.
zegara
poprzez
edycję
definicji
CLOCK_MODE
w
pliku
#define CLOCK_SETUP 1
/* Define clock source values */
#define CPU_XTAL_CLK_HZ
oscillator clock frequency in Hz */
#define CPU_INT_SLOW_CLK_HZ
clock frequency in Hz */
#define CPU_INT_FAST_CLK_HZ
clock frequency in Hz */
8000000u
/* Value of the external crystal or
32768u
/* Value of the slow internal oscillator
4000000u
/* Value of the fast internal oscillator
/* RTC oscillator setting */
/* Low power mode enable */
/* SMC_PMPROT: AVLP=1,ALLS=1,AVLLS=1 */
11/12
#define SYSTEM_SMC_PMPROT_VALUE
0x2AU
/* Internal reference clock trim */
/* #undef SLOW_TRIM_ADDRESS */
Commented out for MISRA compliance. */
/* #undef SLOW_FINE_TRIM_ADDRESS */
Commented out for MISRA compliance. */
/* #undef FAST_TRIM_ADDRESS */
out for MISRA compliance. */
/* #undef FAST_FINE_TRIM_ADDRESS */
Commented out for MISRA compliance. */
/* SMC_PMPROT */
/* Slow oscillator not trimmed.
/* Slow oscillator not trimmed.
/* Fast oscillator not trimmed. Commented
/* Fast oscillator not trimmed.
#ifdef CLOCK_SETUP
#if (CLOCK_SETUP == 0)
#define DEFAULT_SYSTEM_CLOCK
20971520u
/* Default System clock value */
#define MCG_MODE
MCG_MODE_FEI /* Clock generator mode */
/* MCG_C1: CLKS=0,FRDIV=0,IREFS=1,IRCLKEN=1,IREFSTEN=0 */
6. Zamiast GPIO użyj Fast GPIO. W tym celu zmień PTB na FPTB i PTD na FPTD w kodzie
programu.
7. Powtarzaj czynności 4-6 tak aby wypełnić tablę poniżej.
MODE
0
CPU
Frequency
Bus
Frequency
Port type
GPIO
Fast GPIO
1
2
GPIO
Fast GPIO
GPIO
Fast GPIO
12/12
Response
time
Power

Podobne dokumenty