instrukcja
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.