instrukcja

Komentarze

Transkrypt

instrukcja
MUS
dr inż. Paweł Szczepankowski, [email protected], EM320, tel. 3471139
(1)Projekt procesora NIOSII w strukturze
programowalnego
układu
logicznego
CYCLONEII EP2C35F672C6
Laboratorium Mikroprocesorowych Układów Sterowania – instrukcja wspomagająca realizację projektu
MUS
dr inż. Paweł Szczepankowski, [email protected], EM320, tel. 3471139
Przed przystąpieniem do pracy lub w przypadku wystąpienia problemów z kompilacją
proszę sprawdzić:
a. Nazwy plików nie mogą zawierać spacji oraz polskich znaków
b. Nazwy folderów nie mogą zawierać spacji oraz polskich znaków
c. Nazwa pliku oraz nazwa folderu nie może zaczynać się cyfrą
d. Grupa otwiera projekt nie plik. Najpierw uruchomić środowisko Quartus a
następnie menu File, Open Project
e. Grupa otwiera swoją przestrzeń roboczą w środowisku NiosII EDS. Kiedy
pojawi się okno Select Workspace proszę wskazać odpowiednią ścieżkę do
swojego katalogu. Jeśli okno się nie pojawi proszę przełączyć workspace:
menu File, Switch Workspace
f. Nazwy plików oraz folderów nie mogą być takie same jak nazwy bloków
cyfrowych i symboli tworzonych przez projektanta systemu
g. Bez względu na ilustracje zawarte w instrukcji proszę sprawdzić czy
używane (wprowadzone przez Państwa) nazwy wyprowadzeń znajdują się na
zaimportowanej liście
h. Proszę sprawdzić czy płytka DE2 jest zasilona oraz czy wtyczka przewodu
USB znajduje się w miejscu przeznaczonym dla programatora USB BLASTER
i.
W razie wystąpienia błędu polegającego na nierozpoznawaniu elementów
wprowadzonych przez użytkownika proszę odszukać i wskazać właściwy
folder zawierający układy i bloki cyfrowe zaprojektowane przez Państwa:
menu Project, Add/Remove Files in Project
j.
W przypadku tworzenia elementów za pomocą tzw. wizzarda (kreatora
elementów) proszę bezwzględnie wskazywać ścieżkę do swojego katalogu
k. Nazwy elementów tworzonych przez wizzarda nie mogą być takie jak nazwy
elementów istniejących już w bibliotece
l.
Jeśli nie można programować układu należy sprawdzić, czy nie jest
przypadkiem aktywna sesja w środowisku NIOSII EDS. Aby programować
układ FPGA trzeba przerwać debagowanie układu z poziomu NIOSII EDS
m. Zawsze gdy struktura procesora NIOS zmieni się należy przed generacją
nowego układu zaktualizować adresy: menu System, Assign Base Addresses.
Należy również pamiętać o aktualizacji biblioteki BSP w projekcie NIOSII EDS
MUS
dr inż. Paweł Szczepankowski, [email protected], EM320, tel. 3471139
1. Wstęp
Laboratorium Mikroprocesorowych Układów Sterowania składa się jedynie z kilku spotkań,
na których realizowany jest projekt polegający na:
a) utworzeniu struktury cyfrowej zawierającej wejścia, wyjścia, układ PLL oraz procesor
NIOSII
b) wyborze i parametryzacji modułów procesora takich jak CPU, pamięć, układy
transmisji szeregowej, układy portów równoległych oraz ustawieniu właściwych
połączeń logicznych i adresów w powstałej strukturze procesora
c) napisaniu programu w języku C wykonywanego przez procesor NIOSII służącego
testom wybranych układów elektronicznych umieszczonych na płytce edukacyjnej
DE2
Na wstępnie należy pobrać i zainstalować program Quartus13.0sp1 ze strony www.altera.com
Wybrać Design Tools & Services, Design Software
i wybrać Quartus II Web Edition Software
MUS
dr inż. Paweł Szczepankowski, [email protected], EM320, tel. 3471139
Nacisnąć przycisk Download Software Web Edition – Free. Wskazać na wersję 13.0sp1
MUS
dr inż. Paweł Szczepankowski, [email protected], EM320, tel. 3471139
Można pobrać pełne oprogramowanie w postaci obrazu DVD lub zdecydować się na pobranie
wersji minimalnej ale wystarczającej. Sprowadza się to do wyboru jedynie dwóch
komponentów i naciśnięciu przycisku Download Selected File.
Następnie program należy zainstalować przy zachowaniu jego defaultowych ustawień i
podpowiedzi. Gdyby pojawiła się potrzeba zainstalowania sterowników dla programatora
Byte-Blaster należy odszukać te sterowniki w folderze “c:\altera\13.0sp1\quartus\drivers\” lub
podobnym.
MUS
dr inż. Paweł Szczepankowski, [email protected], EM320, tel. 3471139
Istalacja powinna spowodować, że w menu start pojawi się folder „Altera 13.0.1.232 Web
Edition”. Proszę zwrócić uwagę na dwa środowiska:
a) Quartus II 13.0sp1 (63-bit) --- tutaj powstaje struktura cyfrowa oraz procesor
b) Nios II 13.0sp1 Software Build Tool For Eclipse --- tutaj piszemy kod program dla
procesora NIOSII
2. Materiały pomocnicze oraz literatura
Na stanowisku komputerowym w folderze MUS_NS umieszczono materiały pomocnicze:
a) Procesory_NiosII_cz1.pdf,
Procesory_NiosII_cz2.pdf,
Procesory_NiosII_cz3.pdf,
Procesory_NiosII_cz4.pdf – artykuły poświęcone tworzeniu procesora NIOS II
b) DE2_System_v1.5.zip – pakiet przykładowych projektów, ćwiczeń oraz dokumentacji
dla zestawu DE2, znajdują się tu między innymi DE2_UserManual.pdf,
DE2_schematics.pdf oraz DE2_Pin_Table.pdf
c) RAPID_SOPC.pdf – książka napisana w języku angielskim wprowadzająca do
projektowania i prototypowania z wykorzystaniem układów FPGA
d) Materiały do wykładu w postaci plików pdf
Materiały pomocnicze znajduje się również w zasobach internetowych.
MUS
dr inż. Paweł Szczepankowski, [email protected], EM320, tel. 3471139
3. Projekt struktury startowej w środowisku Quartus II
1. Uruchomić z menu START program Quartus II 13.0sp1 (64-bit)
2. Wybrać z menu górnego głównego paska File, New Project Wizard
3. Po pojawieniu się nowego okna, w odsłonie 1/5 (Directory, Name, Top-Level Entity…)
należy wprowadzić ścieżki i nazwy projektu, krótkie, bez spacji oraz polskich
czcionek
4. W odsłonie Add Files [page 2 of 5] wybieramy next
5. W odsłonie Family & Device Settings [page 3 of 5] należy zaznaczyć opcje jak na
ilustracji poniżej i kliknąć Next
6. W odsłonie EDA Tool Settings [page 4 of 5] wybieramy next a następnie kończymy
naciskając przycisk Finish
7. Tworzymy plik struktury cyfrowej, wybieramy menu New a następnie zaznaczamy
Desing Files, Block Diagram/Schematic File. Naciskamy OK.
8. Zapisujemy plik z nazwą sugerowaną przez system
9. Należy teraz zaimportować listę nazw wyprowadzeń – jest to plik, który znajduje się w
materiałach pomocniczych, w pliku DE2_System_v1.5.zip. Należy rozpakować i
odszukać plik „…\DE2_demonstrations\DE2_Default\DE2_Default.qsf”. Wskazówki
umieszczone są na następnej ilustracji
MUS
dr inż. Paweł Szczepankowski, [email protected], EM320, tel. 3471139
Wybrać Import Assigments…
Wskazać plik DE2_Default.qsf
Upewnić się, że import zostały zakończony – powinien pojawić się napis w oknie konsoli
środowiska QUARTUS II
10. Na tym etapie można przystąpić do budowy procesora NIOS, która raczej przypomina
składanie procesora z dostępnych komponentów. Wybrać menu Tools a następnie
nacisnąć Qsys – pojawi się nowe okno, w którym projektant tworzy procesor NIOSII
MUS
dr inż. Paweł Szczepankowski, [email protected], EM320, tel. 3471139
11. W małym oknie po lewej stronie o nazwie Component Library, w gałęzi Embedded
Processors wybieramy Nios II Processor i klikamy przycisk znajdujący się poniżej
+Add
12. Pojawi się okno parametryzacji modułu CPU, który został właśnie wybrany. Proszę
zwrócić uwagę na zakładki, zwłaszcza na zakładkę Core Nios II, w której wybieramy
wersję rdzenia CPU (zaznaczyć wybór Nios II/e) oraz wskazujemy pamięci, z którymi
rdzeń CPU będzie współpracował. Jednakże pamięci te pojawią się dopiero po ich
dodaniu do projektu procesora oraz skonfigurowaniu połączeń logicznych między
wszystkimi modułami. Należy więc nastawić się na parametryzację iteracyjną. W
niniejszym punkcie wybieramy jedynie Nios II/e i klikamy Finish
13. W małym oknie po lewej stronie o nazwie Component Library, w gałęzi Memories
and Memory Interfaces wybieramy SDRAM Interfaces, SDRAM Control i klikamy
przycisk znajdujący się poniżej +Add. Tutaj zmieniamy jedynie szerokość szyny
danych z 32 bitów na 16 i zatwierdzamy przyciskiem Finish
14. Teraz postępując analogicznie, należy odszukać komponent JTAG UART i dodać do
struktury
15. Dodać ostatni element jakim jest port PIO (Parallel I/O) 8-bitowy
16. Ustanowić połączenia logiczne między komponentami, na ten czas należy zaznaczyć
wszystkie punkty gdzie krzyżują się ścieżki powiązań. Po zaznaczeniu (kropki,
miejsca przecięcia powinny być czarne) należy wybrać z menu System, Assign Base
Addresses – służy to uporządkowaniu adresów komponentów. Liczba błędów
powinna być teraz zredukowana do dwóch – tak jak jest to pokazane na ilustracjach
MUS
dr inż. Paweł Szczepankowski, [email protected], EM320, tel. 3471139
Przez zaznaczeniem powiązań
Po zaznaczeniu powiązań oraz uporządkowaniu adresów
17. Teraz należy powrócić do edycji i parametryzacji modułu CPU. Kliknąć na moduł
„nios2_qsys_0” oraz wskazać oraz wybrać pamięć SDRAM w zakładce Core Nios II
MUS
dr inż. Paweł Szczepankowski, [email protected], EM320, tel. 3471139
18. Po wskazaniu pamięci, z którymi współpracuje CPU powinny pozostać jedynie trzy
ostrzeżenia. Aby je usunąć należy wykonać trzy czynności polegające na podwójnym
kliknięciu w miejsca oznaczone na ilustracji czerwoną strzałką
19. Aktualizujemy adresy modułów tak jak w punkcie 16 a następnie w zakładce
Generation naciskamy przycisk Generate. Po udanej kompilacji struktury procesora
zamykamy okno główne narzędzia Qsys i przechodzimy do głównego okna projektu w
środowisku Quartus.
20. Wprowadzić do schematu symbol procesora klikając dwukrotnie lewym przyciskiem
myszy. Otworzy się okno biblioteki elementów. Wskazujemy na procesor i
zatwierdzamy. Następnie na schemacie klikamy prawym przyciskiem myszy
wskazując na procesor i wybieramy z menu kontekstowego Generate Pins For Symbol
Ports. Aby sprawdzić poprawność projektu na tym etapie wybieramy z menu
głownego Processing, Analyze Current File. Jeśli pojawi się błąd jak na ilustracji
MUS
dr inż. Paweł Szczepankowski, [email protected], EM320, tel. 3471139
Należy dodać plik opisujący procesor. Menu Project, Add/Remove Files In Project. Na
ilustracji poniżej nazwa procesora jest “px”, tutaj należy wskazać pliki własne.
21. Jeśli sprawdzenie schematu zakończyło się bez błędów należy zmienić nazwy
wyprowadzeń na takie, które występują w mapie wyprowadzeń, które została
zaimportowana w punkcie 9
22. Dodanie układu PLL z dwoma zegarami 50MHz. Należy wprowadzić element z
biblioteki o nazwie ALTPLL i ustawić jego parametry tak, by były one zgodne z
poniższą ilustracją. Zegar C0: 50MHz, faza 0, zegar C1: 50MHz, faza -60. Następnie
należy uruchomić pełną kompilację – menu Procesing, Start Compilation
23. Po kompilacji włączyć zasilanie płytki i zaprogramować ją. Wybrać z menu Tools,
Programmer a następnie nacisnąć przycisk START
24. W tej chwili rozpoczyna się etap programowania procesora NIOSII, którego struktura
cyfrowa została „wgrana” do zestawu DE2. Proszę uruchomić z menu Tools, Nios II
Software Build Tools For Eclipse. Bezwzględnie należy wskazać swój folder, czyli
workspace. W przeciwnym razie środowisko otworzy strukturę projektu innej grupy
laboratoryjnej
MUS
dr inż. Paweł Szczepankowski, [email protected], EM320, tel. 3471139
25. Po uruchomieniu nowego środowiska do pisania kodu w języku C i pisania
programów dla procesora NIOSII należy utworzyć nowy projekt, menu File, New,
Nios II Application and BSP form Template
26. Po otwarciu okna dialogowego należy podać ścieżkę do pliku opisu procesora, nazwę
właśnie tworzonego projektu oraz wybrać template projektu (wzorzec). Ilustruje to
rysunek na następnej stronie
MUS
dr inż. Paweł Szczepankowski, [email protected], EM320, tel. 3471139
Proszę pamiętać o wskazaniu swojego procesora, może on mieć nazwę różną od „px”
27. Teraz można przystąpić do kompilacji wzorca (później można ten kod zmienić na
swój). Prawym przyskiem myszy wskazać na folder projektu w oknie drzewa projektu.
Następnie z menu kontekstowego wybrać Run As, Nios II Hardware
MUS
dr inż. Paweł Szczepankowski, [email protected], EM320, tel. 3471139
28. Przed finałowym połączeniem z procesorem NIOSII znajdującym się w układzie
CYCLONEII na płytce DE2 może wystąpić potrzeba wskazania urzadzenia
ByteBlaster. Sprowadza się do naciśnięcia REFRESH CONNCECTION
29. Po połączeniu środowiska NiosII Build Tools… oraz załadowaniu kodu programu, w
konsoli systemowej powinien pojawić się napis wysłany z procesora NIOSII/e do
komputera PC: „Hello from Nios II”
Celem ćwiczenia jest utrwalenie postępowania wg instrukcji oraz wstępna zmiana kodu
programu procesora.
MUS
dr inż. Paweł Szczepankowski, [email protected], EM320, tel. 3471139
(2)Projekt procesora NIOSII w strukturze
programowalnego
układu
logicznego
CYCLONEII EP2C35F672C6 – podłączenie i
obsługa wyświetlacza LCD.
Laboratorium Mikroprocesorowych Układów Sterowania – instrukcja wspomagająca realizację projektu
MUS
dr inż. Paweł Szczepankowski, [email protected], EM320, tel. 3471139
1. Otworzyć projekt. Nacisnąć prawy przycisk myszy i wybrać Open Design File. Wybrać
plik z rozszerzeniem qsys.
2. Po otwarciu głównego okna narzędzia Q-SYS zawierającego projekt struktury
procesora należy dodać moduł Altera Avalon LCD 16207.
3. W kolumnie Connection zaznaczyć punkty przecięcia się powiązań logicznych.
4. Uwzględniając uwagę programu należy wyeksportować opis LCD_16207_0-external
poprzez dwukrotne kliknięcie w kolumnie export.
5. Uaktualnić adresy modułów: menu System, Assign Base Addresses
6. Wygenerować strukturę procesora
7. Przejść do scheamtu głownego projektu w środowsku Quartus a następnie kliknąć
prawym przyciskiem myszy i z menu wybrać Update Symbol or Block a nstępnie
potwierdzić, że zmiana dotyczy jedynie zaznaczonych elementów
MUS
dr inż. Paweł Szczepankowski, [email protected], EM320, tel. 3471139
8. Po zmianie wyglądu symbolu procesora należy dodać wyprowadzenia wyświetlacza
LCD
9. Aby wyświetlacz działał należy do schematu głównej struktury dodać dwa pojedyncze
wyprowadzenia typu output. Jedno o nazwie LCD_ON, drugie o nazwie LCD_BLON.
Nazwy sugerują, że piny te odpowiadają za zasilanie i opcjonalne podświetlenie
wyświetlacza. Oba piny połączyć ze stanem wysokim, czyli elementem o nzawie
VCC.
10. Aby uniknąć błędu kompilacji należy na nowo nadać oznaczenie porządkujące dla
procesora, na przykład „procesor1” zamiast „inst”
11. Aby upewnić się, że zostały wykorzystane odpowiednie wyprowadzenia można
właczyć lub/i wyłączyć znaczniki lokalizacji zgodnie z poniższą ilustracją
12. Po kompilacji zakończonej bez błędów nową strukturę cyfrową należy wgrać do
układu FPGA a następnie otworzyć środowisko do tworzenia kodu dla procesora,
czyli NiosII EDS.
13. Sprawdzić tzw. „workspace” i ewentualnie wybrać swój katalog roboczy.
14. Usunąć istniejące projekty w swoim obszarze roboczym. Po wybraniu DELETE
zaznaczyć usuwanie z dysku.
MUS
dr inż. Paweł Szczepankowski, [email protected], EM320, tel. 3471139
15. Postępując tak jak w poprzednim ćwiczeniu dodać dwa projekty o nazwie „drugi” oraz
„pomoc”. Pierwszy z nich utworzyć ze wzorca „Hello Word” drugi z wzorca „Board
Diagnostic”.
16. W drugim projekcie odszukać fragment kodu programu związany z obsługą
wyświetlacza LCD. Proszę przeanalizować ten fragment i ewentualnie go skopiować
do projektu „drugi”. Następnie należy doprowadzić do tego, by kod programu był
następujący:
#include <stdio.h> #include "system.h" FILE *lcd; int main() { printf("Hello from Nios II!\n"); lcd = fopen(LCD_16207_0_NAME, "w"); if (lcd != NULL ) { fprintf(lcd, "\nThis is the LCD Display.\n"); fprintf(lcd, "123456789.\n"); printf("LCD is opened!\n"); } else { printf("ERROR!\n"); } return 0; } 17. Uruchomić wgrywanie programu Rus As… Nios II Hardware. Może pojawić się okno
konfiguracji połączenia tak jak poniżej.
Należy zignorować i pominąć sprawdzenie ID (krok 1 oraz 2 na ilustracji) oraz odświeżyć
połączenie (krok trzeci na ilustracji w dalszej części instrukcji).
MUS
dr inż. Paweł Szczepankowski, [email protected], EM320, tel. 3471139
18. Po połączeniu oraz uruchomieniu programu, w tym wyświetlacza LCD należy
przeanalizować kod i utrwalić sobie zasady obsługi tego modułu. Proszę przypomnieć
sobie funkcje sprintf, fprintf oraz zasady formatowania tekstów zawierających
wartości całkowite, zmiennoprzecinkowe albo heksadecymalne.
MUS
dr inż. Paweł Szczepankowski, [email protected], EM320, tel. 3471139
(3)Projekt procesora NIOSII w strukturze
programowalnego
układu
logicznego
CYCLONEII EP2C35F672C6 – podłączenie i
obsługa wyświetlacza siedmiosegmentowego.
Laboratorium Mikroprocesorowych Układów Sterowania – instrukcja wspomagająca realizację projektu
MUS
dr inż. Paweł Szczepankowski, [email protected], EM320, tel. 3471139
Zakłada się, że podstawowe czynności związane z narzędziem Q-SYS oraz środowiskami
QUARTUS oraz NIOSII EDS są już opanowane. Dlatego też niniejsza instrukcja nie będzie
miała charakteru szczegółowego przewodnika określającego czynności krok po kroku. W
razie problemów należy przeczytać i zastosować się do sugestii zawartych na początku
instrukcji w poprzednim ćwiczeniu.
Plan działania jest następujący:
1. Dodać 8 portów wyjściowych 7-bitowych o wartości wstępnej 0x7f. Można
wprowadzić i sparametryzować jeden port a następnie zduplikować go – oszczędzi to
czasu przy projektowaniu struktury procesora.
2. Wygenerować procesor i zaktualizować jego wygląd w projekcie w środowisku
QUARTUS a następnie wprowadzić piny typu OUTPUT o nazwach HEX0, …,
HEX7.
3. Zatwierdzić zmiany po czym skompilować strukturę a następnie wgrać do układu
FPGA.
4. Nie trzeba tworzyć nowego projektu środowisku NIOSII EDS, można pracować na
jednym ale trzeba pamiętać o aktualizacji biblioteki BSP – patrz ilustracja poniżej.
5. Dodać do programu dla procesora NIOSII/e kod umożliwiający obsługę dołączonych 8
wyświetlaczy siedmiosegmentowych. Wartości potrzebne do transkodowania formatu
binarnego na kod wyświetlacza można umieścić w tablicy. Wartość, która ma być
wizualizowana adresuje odpowiedni element poniższej tablicy
const unsigned char segments [16] = { 0x81,0xCF,0x92,0x86,0xCC,0xA4,0xA0,0x8F,0x80,0x84,/* 0‐9 */ 0x88, 0xE0, 0xF2, 0xC2, 0xB0, 0xB8 };/* a‐f */
6. Dołączyć następujące biblioteki lub załączyć brakujące.
#include "alt_types.h" #include <stdio.h> #include <unistd.h> #include "system.h" #include "sys/alt_irq.h" #include "altera_avalon_pio_regs.h"
MUS
dr inż. Paweł Szczepankowski, [email protected], EM320, tel. 3471139
7. Poniżej podano fragment kodu program realizującego wyświetlenie liczb od 0 do 7.
Proszę zwrócić uwagę na sposób zapisu do portu równoległego typu „output”
wykorzystujący wskaźnik oraz STAŁE zdefiniowane w pliku „system.h” znajdującym
się w bibliotece BSP.
*(int*)HEX_0_BASE=segments[0]; *(int*)HEX_1_BASE=segments[1]; *(int*)HEX_2_BASE=segments[2]; *(int*)HEX_3_BASE=segments[3]; *(int*)HEX_4_BASE=segments[4]; *(int*)HEX_5_BASE=segments[5]; *(int*)HEX_6_BASE=segments[6]; *(int*)HEX_7_BASE=segments[7];
8. Napisać i zastosować funkcję służącą do wyświetlenia wartości 32-bitowej w kodzie
szesnastkowym na 8 wyświetlaczach siedmiosegmentowych.
MUS
dr inż. Paweł Szczepankowski, [email protected], EM320, tel. 3471139
(4)Projekt procesora NIOSII w strukturze
programowalnego
układu
logicznego
CYCLONEII EP2C35F672C6 – podłączenie i
obsługa przerwania zewnętrznego.
Laboratorium Mikroprocesorowych Układów Sterowania – instrukcja wspomagająca realizację projektu
MUS
dr inż. Paweł Szczepankowski, [email protected], EM320, tel. 3471139
Zakłada się, że podstawowe czynności związane z narzędziem Q-SYS oraz środowiskami
QUARTUS oraz NIOSII EDS są już opanowane. Dlatego też niniejsza instrukcja nie będzie
miała charakteru szczegółowego przewodnika określającego czynności krok po kroku. Plan
działania:
1. Dodać jednobitowe wejście do procesora o nazwie „BUTTON_PIO”. Skonfigurować je
tak jak na rysunku poniżej.
2. Wygenerować procesor. Zaktualizować symbol procesora na schemacie. Podłączyć
wejście jednobitowe o nazwie „KEY[2]” do wejścia „BUTTON_PIO”. Po poprawnej
kompilacji wgrać strukturę do układu FPGA.
3. W środowisku NIOSII EDS utworzyć projekt tymczasowy, z którego przekopiować
fragmenty kodu związanego z obsługą przerwania zewnętrznego podłączonego do
wyprowadzenia BUTTON_PIO. Następnie zaktualizować bibliotekę BSP. Kod
programu, w którym wykorzystany jest LCD, wskaźniki siedmiosegmentowe oraz
pojedyncze przerwanie zewnętrzne reagujące na zmianę stanu na pinie, może
wyglądać następująco:
MUS
dr inż. Paweł Szczepankowski, [email protected], EM320, tel. 3471139
#include "alt_types.h" #include <stdio.h> #include <unistd.h> #include "system.h" #include "sys/alt_irq.h" #include "altera_avalon_pio_regs.h" FILE *lcd; const unsigned char segments [16] = {0x81,0xCF,0x92,0x86,0xCC,0xA4,0xA0,0x8F,0x80,0x84, /* 0‐9 */ 0x88, 0xE0, 0xF2, 0xC2, 0xB0, 0xB8 }; /* a‐f */ #ifdef BUTTON_PIO_BASE /* A variable to hold the value of the button pio edge capture register. */ volatile int edge_capture,x=0; #ifdef ALT_ENHANCED_INTERRUPT_API_PRESENT static void handle_button_interrupts(void* context) #else static void handle_button_interrupts(void* context, alt_u32 id) #endif { /* Cast context to edge_capture's type. It is important that this be * declared volatile to avoid unwanted compiler optimization.*/ volatile int* edge_capture_ptr = (volatile int*) context; /* Store the value in the Button's edge capture register in *context. */ *edge_capture_ptr = IORD_ALTERA_AVALON_PIO_EDGE_CAP(BUTTON_PIO_BASE); /* Reset the Button's edge capture register. */ IOWR_ALTERA_AVALON_PIO_EDGE_CAP(BUTTON_PIO_BASE, 0); /* * Read the PIO to delay ISR exit. This is done to prevent a spurious * interrupt in systems with high processor ‐> pio latency and fast * interrupts. */ IORD_ALTERA_AVALON_PIO_EDGE_CAP(BUTTON_PIO_BASE); //funkcja uzytkownika wykonywana w przerwaniu #ifdef LEDG_BASE *(int *)LEDG_BASE=x++; #endif } /* Initialize the button_pio. */ static void init_button_pio() { /* Recast the edge_capture pointer to match the alt_irq_register() function * prototype. */ void* edge_capture_ptr = (void*) &edge_capture; /* Enable all 4 button interrupts. */ IOWR_ALTERA_AVALON_PIO_IRQ_MASK(BUTTON_PIO_BASE, 0xf); /* Reset the edge capture register. */ IOWR_ALTERA_AVALON_PIO_EDGE_CAP(BUTTON_PIO_BASE, 0x0); /* Register the interrupt handler. */ #ifdef ALT_ENHANCED_INTERRUPT_API_PRESENT alt_ic_isr_register(BUTTON_PIO_IRQ_INTERRUPT_CONTROLLER_ID,BUTTON_PIO_IRQ,handle_button_interrupts, edge_capture_ptr, 0x0); #else alt_irq_register( BUTTON_PIO_IRQ, edge_capture_ptr,handle_button_interrupts); #endif } #endif /* BUTTON_PIO_BASE */ int main() { printf("Hello from Nios II!\n"); lcd = fopen(LCD_16207_0_NAME, "w"); if (lcd != NULL ) { fprintf(lcd, "\nThis is the LCD Display.\n"); MUS
dr inż. Paweł Szczepankowski, [email protected], EM320, tel. 3471139
fprintf(lcd, "123456789.\n"); printf("LCD is opened!\n"); } else { printf("ERROR!\n"); } *(int*)HEX_0_BASE=segments[0]; *(int*)HEX_1_BASE=segments[1]; *(int*)HEX_2_BASE=segments[2]; *(int*)HEX_3_BASE=segments[3]; *(int*)HEX_4_BASE=segments[4]; *(int*)HEX_5_BASE=segments[5]; *(int*)HEX_6_BASE=segments[6]; *(int*)HEX_7_BASE=segments[7]; #ifdef BUTTON_PIO_BASE init_button_pio(); #endif return 0; } Zadania te kończą etap ćwiczeń. Na następnych spotkaniach realizowane będą zadania
projektowe.
MUS
dr inż. Paweł Szczepankowski, [email protected], EM320, tel. 3471139
1. Zaprojektować następujący system mikroprocesorowy oraz napisać funkcje odczytu i
zapisu:
a) niezależne trzy szyny systemowe,
b) szyna danych dwukierunkowa 8-bitowa,
c) szyna adresów 4-bitowa,
d) sygnały sterujące OE, WR, RD,
e) adresacja zgodna z tabelą poniżej.
adres dziesiętnie
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
zapis
LEDR[7..0]
LEDR[15..8]
LEDR[17..16]
LEDG[7..0]
LEDG[8]
HEX0[6..0]
HEX1[6..0]
HEX2[6..0]
HEX3[6..0]
HEX4[6..0]
HEX5[6..0]
HEX6[6..0]
HEX7[6..0]
-------
odczyt
SW[7..0]
SW[15..8]
SW[17..16]
KEY[2]
KEY[3]
HEX0[6..0]
HEX1[6..0]
HEX2[6..0]
HEX3[6..0]
HEX4[6..0]
HEX5[6..0]
HEX6[6..0]
HEX7[6..0]
-------
MUS
dr inż. Paweł Szczepankowski, [email protected], EM320, tel. 3471139
2. Zaprojektować następujący system mikroprocesorowy oraz napisać funkcje odczytu i
zapisu:
a) niezależne trzy szyny systemowe,
b) szyna danych dwukierunkowa 8-bitowa,
c) szyna adresów 4-bitowa,
d) sygnały sterujące OE, WR, RD,
e) adresacja zgodna z tabelą poniżej.
adres dziesiętnie
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
zapis
HEX0[6..0]
HEX1[6..0]
HEX2[6..0]
HEX3[6..0]
HEX4[6..0]
HEX5[6..0]
HEX6[6..0]
HEX7[6..0]
LEDG[0]
LEDG[1]
LEDG[2]
LEDG[3]
LEDG[4]
LEDG[5]
LEDG[6]
LEDG[7]
odczyt
HEX0[6..0]
HEX1[6..0]
HEX2[6..0]
HEX3[6..0]
HEX4[6..0]
HEX5[6..0]
HEX6[6..0]
HEX7[6..0]
SW[0]
SW[1]
SW[2]
SW[3]
SW[0]
SW[5]
SW[6]
SW[7]
MUS
dr inż. Paweł Szczepankowski, [email protected], EM320, tel. 3471139
3. Zaprojektować następujący system mikroprocesorowy oraz napisać funkcje odczytu i
zapisu:
a) niezależne trzy szyny systemowe,
b) szyna danych dwukierunkowa 8-bitowa,
c) szyna adresów 4-bitowa,
d) sygnały sterujące OE, WR, RD,
e) adresacja zgodna z tabelą poniżej.
adres dziesiętnie
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
zapis
HEX0[6..0]
HEX1[6..0]
HEX2[6..0]
HEX3[6..0]
HEX4[6..0]
HEX5[6..0]
HEX6[6..0]
HEX7[6..0]
LEDR[1..0]
LEDR[3..2]
LEDR[5..4]
LEDR[7..6]
LEDR[9..8]
LEDR[11..9]
LEDR[13..12]
LEDR[15..14]
odczyt
HEX0[6..0]
HEX1[6..0]
HEX2[6..0]
HEX3[6..0]
HEX4[6..0]
HEX5[6..0]
HEX6[6..0]
HEX7[6..0]
SW[1..0]
SW[3..2]
SW[5..4]
SW[7..6]
SW[9..8]
SW[11..9]
SW[13..12]
SW[15..14]
MUS
dr inż. Paweł Szczepankowski, [email protected], EM320, tel. 3471139
4. Zaprojektować następujący system mikroprocesorowy oraz napisać funkcje zapisu:
a) szyna danych tylko do zapisu 8-bitowa,
b) multipleksowana szyna dane/adres,
c) sygnały WR, ALE,
d) adresacja niepełna zgodna z tabelą poniżej.
adres dziesiętnie
0
1
2
3
4
5
6
7
zapis
LEDR[7..0]
LEDR[15..8]
LEDR[17..16]
LEDG[7..0]
LEDG[8]
HEX0[6..0]
HEX1[6..0]
HEX2[6..0]
MUS
dr inż. Paweł Szczepankowski, [email protected], EM320, tel. 3471139
5. Zaprojektować następujący system mikroprocesorowy oraz napisać funkcje zapisu:
a) szyna danych tylko do zapisu 16-bitowa,
b) multipleksowana szyna dane/adres,
c) sygnały WR, ALE,
d) adresacja niepełna zgodna z tabelą poniżej.
adres dziesiętnie
0
1
2
3
4
zapis
LEDR[15..0]
HEX1[6..0], HEX0[6..0]
HEX3[6..0], HEX2[6..0]
HEX5[6..0], HEX4[6..0]
HEX7[6..0], HEX6[6..0]
MUS
dr inż. Paweł Szczepankowski, [email protected], EM320, tel. 3471139
6. Zaprojektować następujący system mikroprocesorowy oraz napisać funkcje odczytu:
a) szyna danych tylko do odczytu 8-bitowa,
b) multipleksowana szyna dane/adres,
c) sygnały WR, ALE,
d) adresacja niepełna zgodna z tabelą poniżej.
adres dziesiętnie
0
1
2
3
odczyt
SW[7..0]
SW[15..8]
KEY[1..0]
KEY[3..2]
MUS
dr inż. Paweł Szczepankowski, [email protected], EM320, tel. 3471139
7. Zaprojektować następujący system mikroprocesorowy oraz napisać funkcje odczytu i
zapisu:
a) niezależne trzy szyny systemowe,
b) szyna danych dwukierunkowa 8-bitowa,
c) szyna adresów 4-bitowa,
d) sygnały sterujące OE, WR, RD,
e) adresacja zgodna z tabelą poniżej.
adres dziesiętnie
0
1
2
3
4
5
6
7
8
9
10
11
12
zapis
HEX0[6..0]
HEX1[6..0]
HEX2[6..0]
HEX3[6..0]
HEX4[6..0]
HEX5[6..0]
HEX6[6..0]
HEX7[6..0]
LEDR[7..0]
LEDR[15..8]
LEDR[17..16]
LEDG[7..0]
LEDG[8]
odczyt
HEX0[6..0]
HEX1[6..0]
HEX2[6..0]
HEX3[6..0]
HEX4[6..0]
HEX5[6..0]
HEX6[6..0]
HEX7[6..0]
SW[7..0]
SW[15..8]
SW[17..16]
KEY[2]
KEY[3]
MUS
dr inż. Paweł Szczepankowski, [email protected], EM320, tel. 3471139
8. Zaprojektować następujący system mikroprocesorowy oraz napisać funkcje odczytu i
zapisu:
a) niezależne trzy szyny systemowe,
b) szyna danych dwukierunkowa 4-bitowa,
c) szyna adresów 2-bitowa,
d) sygnały sterujące OE, WR, RD,
e) adresacja zgodna z tabelą poniżej.
adres dziesiętnie
0
1
2
3
zapis
LEDG[3..0]
LEDG[7..4]
LEDR[3..0]
LEDR[7..0]]
odczyt
SW[3..0]
SW[7..4]
SW[11..8]
SW[15..12]
MUS
dr inż. Paweł Szczepankowski, [email protected], EM320, tel. 3471139
9. Zaprojektować następujący system mikroprocesorowy oraz napisać funkcje odczytu i
zapisu:
a) niezależne trzy szyny systemowe,
b) szyna danych dwukierunkowa 16-bitowa,
c) szyna adresów 2-bitowa,
d) sygnały sterujące OE, WR, RD,
e) adresacja zgodna z tabelą poniżej.
adres dziesiętnie
0
1
2
3
zapis
LEDR[15..0]
LEDR[17..16]
HEX1[6..0],HEX0[6..0]
HEX3[6..0],HEX2[6..0]
odczyt
SW[15..0]
KEY[3..0]
-----
MUS
dr inż. Paweł Szczepankowski, [email protected], EM320, tel. 3471139
10. Zaprojektować następujący system mikroprocesorowy oraz napisać funkcje zapisu:
a) tylko szyna danych do zapisu 7-bitowa,
b) 8 niezależnych sygnałów aktywacji zapisu, po jednym na każdy wskaźnik HEX,
c) 1 globalne wyjście aktywujące świecenie HEX,
d) wykorzystać bloki DFFE.

Podobne dokumenty