Procesory osadzone ETD 7211 W

Podobne dokumenty
Procesory osadzone ETD 7211 W

Procesory osadzone ETD 7211 ADC, DAC, UART, CLK W

Szkolenia specjalistyczne

Struktura i działanie jednostki centralnej

Architektura komputerów

Technika mikroprocesorowa I Studia niestacjonarne rok II Wykład 2

Wstęp Architektura... 13

Zygmunt Kubiak Instytut Informatyki Politechnika Poznańska

Metody obsługi zdarzeń

XMEGA. Warsztaty CHIP Rok akademicki 2014/2015

Mikrokontroler ATmega32. System przerwań Porty wejścia-wyjścia Układy czasowo-licznikowe

Technika mikroprocesorowa I Wykład 2

Spis treœci. Co to jest mikrokontroler? Kody i liczby stosowane w systemach komputerowych. Podstawowe elementy logiczne

MOŻLIWOŚCI PROGRAMOWE MIKROPROCESORÓW

Układ sterowania, magistrale i organizacja pamięci. Dariusz Chaberski

Poradnik programowania procesorów AVR na przykładzie ATMEGA8

Przerwania, polling, timery - wykład 9

Organizacja typowego mikroprocesora

2. PORTY WEJŚCIA/WYJŚCIA (I/O)

Wykład 4. Przegląd mikrokontrolerów 16-bit: - PIC24 - dspic - MSP430

Technika Mikroprocesorowa Laboratorium 5 Obsługa klawiatury

Technika Mikroprocesorowa

Memory Map for LPC2138

LABORATORIUM PROCESORY SYGNAŁOWE W AUTOMATYCE PRZEMYSŁOWEJ. Mechanizm przerwań i menadżer zdarzeń procesora sygnałowego F/C240

Timery w mikrokontrolerach STM32F3

PROGRAMOWALNE SYSTEMY MECHATRONIKI

Architektura Systemów Komputerowych. Jednostka ALU Przestrzeń adresowa Tryby adresowania

Rejestry procesora. Nazwa ilość bitów. AX 16 (accumulator) rejestr akumulatora. BX 16 (base) rejestr bazowy. CX 16 (count) rejestr licznika

Programowanie mikrokontrolerów AVR

Architektura systemu komputerowego. Działanie systemu komputerowego. Przerwania. Obsługa przerwań (Interrupt Handling)

Podstawowe urządzenia peryferyjne mikrokontrolera ATmega8 Spis treści

Charakterystyka mikrokontrolerów. Przygotowali: Łukasz Glapiński, Mateusz Kocur, Adam Kokot,

Zaliczenie Termin zaliczenia: Sala IE 415 Termin poprawkowy: > (informacja na stronie:

Hardware mikrokontrolera X51

PRZERWANIA. P1 - Procedura obslugi przerwania. Obsługa zdarzenia Z1 poprzez procedurę obsługi przerwania P1

Podstawy techniki cyfrowej i mikroprocesorowej II. Urządzenia wejścia-wyjścia

Układ wykonawczy, instrukcje i adresowanie. Dariusz Chaberski

Mikroprocesor Operacje wejścia / wyjścia

ARCHITEKTURA PROCESORA,

Inż. Kamil Kujawski Inż. Krzysztof Krefta. Wykład w ramach zajęć Akademia ETI

PRZERWANIA. 1. Obsługa zdarzeń, odpytywanie i przerwania Obsługa zdarzeń jest jedną z kluczowych funkcji w prawie każdym systemie czasu rzeczywistego.

Przerwania w systemie mikroprocesorowym. Obsługa urządzeo wejścia/wyjścia

2. Architektura mikrokontrolerów PIC16F8x... 13

Wyświetlacz alfanumeryczny LCD zbudowany na sterowniku HD44780

(Rysunek z książki T.Starecki. Mikokontrolery jednoukładowe rodziny 51. NOZOMI W-wa 1996)

Porty GPIO w mikrokontrolerach STM32F3

SYSTEM PRZERWAŃ ATmega 32

1. Wprowadzenie Programowanie mikrokontrolerów Sprzęt i oprogramowanie... 33

Systemy wbudowane. Przykłady kodu Assembler

Wykład 2. Przegląd mikrokontrolerów 8-bit: -AVR -PIC

architektura komputerów w 1 1

Architektura typu Single-Cycle

Niektóre piny mogą pełnić różne role, zależnie od aktualnej wartości sygnałów sterujących.

dokument DOK wersja 1.0

Kurs Zaawansowany S7. Spis treści. Dzień 1

Programowanie mikrokontrolerów. 3 stycznia 2008

Programowanie mikrokontrolerów AVR z rodziny ATmega.

Wstęp: Interfejs portu równoległego 6821 i portu szeregowego 6850 firmy Motorola

LABORATORIUM UKŁADÓW PROGRAMOWALNYCH. PROCESORY OSADZONE kod kursu: ETD 7211 SEMESTR ZIMOWY 2017

Adresowanie obiektów. Adresowanie bitów. Adresowanie bajtów i słów. Adresowanie bajtów i słów. Adresowanie timerów i liczników. Adresowanie timerów

Architektura mikroprocesorów z rdzeniem ColdFire

Architektura mikroprocesorów z rdzeniem ColdFire

Licznik rewersyjny MD100 rev. 2.48

Wprowadzenie do podstaw programowania AVR (na przykładzie mikrokontrolera ATmega 16 / 32)

Techniki mikroprocesorowe i systemy wbudowane

1. Wstęp Różnice pomiędzy mikrokontrolerami ST7 a ST7LITE Rdzeń mikrokontrolerów ST7FLITE... 15

Architektura komputerów. Układy wejścia-wyjścia komputera

STM32Butterfly2. Zestaw uruchomieniowy dla mikrokontrolerów STM32F107

Podstawy techniki mikroprocesorowej. Dr inż. Grzegorz Kosobudzki p.311a A-5. Tel

Architektura komputerów. Asembler procesorów rodziny x86

Architektura systemów komputerowych Laboratorium 14 Symulator SMS32 Implementacja algorytmów

Systemy wbudowane. Wprowadzenie. Wprowadzenie. Mikrokontroler 8051 Budowa

Programowanie mikrokontrolerów 2.0

Instytut Teleinformatyki

Kurs Elektroniki. Część 5 - Mikrokontrolery. 1/26

Podstawowe urządzenia peryferyjne mikrokontrolera ATmega8 Spis treści

Architektura komputerów. Komputer Procesor Mikroprocesor koncepcja Johna von Neumanna

Opis procedur asemblera AVR

Programowanie w asemblerze ARM wprowadzenie

Architektura komputera

Architektura komputerów

Systemy wbudowane. Uniwersytet Łódzki Wydział Fizyki i Informatyki Stosowanej. Witold Kozłowski

Programowalne układy logiczne

Sprawozdanie z projektu MARM. Część druga Specyfikacja końcowa. Prowadzący: dr. Mariusz Suchenek. Autor: Dawid Kołcz. Data: r.

UTK ARCHITEKTURA PROCESORÓW 80386/ Budowa procesora Struktura wewnętrzna logiczna procesora 80386

Wbudowane układy komunikacyjne cz. 1 Wykład 10

MIKROKONTROLERY I MIKROPROCESORY

Budowa systemów komputerowych

4 Transmisja szeregowa, obsługa wyświetlacza LCD.

Mikrokontrolery STR91x od podstaw, część 1

Mikroprocesory i Mikrosterowniki

Ćwiczenie 7 Matryca RGB

o Instalacja środowiska programistycznego (18) o Blink (18) o Zasilanie (21) o Złącza zasilania (22) o Wejścia analogowe (22) o Złącza cyfrowe (22)

Architektura mikrokontrolera MCS51

Programowanie w językach asemblera i C

Wykład 3. Przegląd mikrokontrolerów 8-bit: STM8

Architektura mikrokontrolera MCS51

Programowanie niskopoziomowe

Embedded Solutions Automaticon Efektywne pomiary i sterowanie przy użyciu systemu wbudowanego MicroDAQ

Wykład 12. Przetwornik ADC

Transkrypt:

Procesory osadzone ETD 7211 W4 05.11.2018

Przypomnienie Barrel shifter Instrukcje warunkowe ARM magistrale połączeniowe GPIO FGPIO

ARM7 - przesuwnik bitowy (ang. Barrel shifter) Barrel shifter wielopozycyjny przesuwnik bitowy, wykonujący przesunięcia arytmetyczne, logiczne oraz rotacje użytego w rozkazie operandu. Co daje: uzupełnia możliwości rdzenia o brakujące na liście rozkazów przesunięcia i rotacje, służy do skalowania jednego z argumentów w rozkazach arytmetycznych i logicznych (operacje mnożenia/dzielenia przez potęgę liczby 2 bez potrzeby wykonywania osobnej operacji) Rd rejestr przeznaczenia, Rn, Rm rejestry źródłowe 3 http://www.davespace.co.uk/arm/introduction-to-arm/organisation.html

ARM7 - przesuwnik bitowy (ang. Barrel shifter) Użycie przesuwnika bitowego zdefiniowane jest w 2 operandzie, za pomocą dodatkowego mnemonika kodującego Słowo wejściowe: a 3 a 2 a 1 a 0 Rn Rm LSL LSR ASR przesunięcie logiczne w lewo a 2 a 1 a 0 0 przesunięcie logiczne w prawo 0 a 3 a 2 a 1 przesunięcie arytmetyczne w prawo 0 a 3 a 2 a 1 5 bitowa stała natychmiastowa, lub 8 najmłodszych bitów rejestru specyfikującego ROR rotacja w prawo a 0 a 3 a 2 a 1 RRX Rotacja w prawo z uwzględnieniem flagi C, flaga C jest wsuwana do najstarszego bitu rejestru Rm, zaś najmłodszy bit rejestru Rm jest przesuwany do C 4 SUB R4, R5, R6, ASR #2 ASR - przesunięcie operandu w rejestrze R6 MOV R4, #0 MOV R5, #100 MOV R6, #16 Jaka wartość zostanie umieszczona w rejestrze R4?

ARM7 - przesuwnik bitowy (ang. Barrel shifter) SUB R4, R5, R6, ASR #2 ASR - przesunięcie operandu w rejestrze R6 MOV R4, #0 MOV R5, #100 MOV R6, #16 W rejestrze R4 zostanie umieszczona wartość??? R4 R5 R6 0 100 16 0 0 0 0 0 0 0 0 0 1 1 0 0 1 0 0 0 0 0 1 0 0 0 0 R6, ASR #2 5 R6 4 SUB R4, R5, R6 R4 96 0 0 0 0 0 1 0 0 R4 = R5 - R6 0 1 1 0 0 0 0 0

LPC2368 - sterowanie portami wyjściowymi - UM10211 Chapter 8 Układów LPC2368 posiada 4 porty I/O, Każda z linii może spełniać jedną z wielu funkcji np.: 6 http://www.nxp.com/documents/user_manual/um10211.pdf

LPC2368 - sterowanie portami wyjściowymi - UM10211 Chapter 9 GPIO P0.0 RD1 TXD3 SDA1 00 01 10 11 P0.0/RD1/TXD3/SDA1 PINSEL0 bity 1 0 RESET 0x00000000 http://www.nxp.com/documents/user_manual/um10211.pdf s158 7 Stany Opis funkcji 00 domyślnie, port GPIO 01 odbiornik linii CAN, RD1 10 nadajnik UART, TXD3 11 Linia danych I2C, SDA1 Za wybór odpowiedniej funkcji linii wyjściowej odpowiada odpowiedni rejestr PINSELx, a dokładniej bity 1 i 0 Po włączeniu zasilania i po każdym resetowaniu układu wszystkie linie I/O działają jako GPIO (General Purpose Input/Output)

GPIO Magistrala Local Bus ARM 7TDMI nfiq nirq Kontroler przerwań VIC PLL F XTAL F CLK Magistrala AHB SRAM Flash Most AHB/VPB RAM USB, Ethernet Magistrala VPB (VLSI Peripheral Bus) Szybkie porty GPIO ADC, CA, PWM, SPI, I2C, RTC, USB, Timer porty GPIO

PORT P0 LPC2368 - sterowanie portami wyjściowymi - UM10211 Chapter 9 IOPIN0 P0.0/RD1/TXD3/SDA1 IODIR0 IOCLR0 IOSET0 Każda linia I/O jest sterowana za pomocą bitów w rejestrach: 9 IODIR odpowiada za kierunek portu: 1 wyjście, 0 - wejście IOPIN pozwala odczytać stan linii portu skonfigurowanego jako wejście, zapis wartości powoduję zmianę stanu portu IOCLR odpowiada za zerowanie stanu linii wyjściowej IOSET odpowiada za ustawienie wartości 1 na linii wyjściowej

GPIO Magistrala Local Bus ARM 7TDMI nfiq nirq Kontroler przerwań VIC PLL F XTAL F CLK Magistrala AHB SRAM Flash Most AHB/VPB RAM USB, Ethernet Magistrala VPB (VLSI Peripheral Bus) Szybkie porty GPIO ADC, CA, PWM, SPI, I2C, RTC, USB, Timer porty GPIO

FGPIO Nieco inną odmianę wyjść GPIO stanowią szybie wyjścia FGPIO, (Fast General Purpose Input/Output), Szybkie linie/porty wyjściowe komunikują się z rdzeniem ARM za pośrednictwem szybkiej magistrali local bus.

LPC2368 - sterowanie portami wyjściowymi - UM10211 Chapter 9 FIOnDIR rejestr kierunku FIOnPIN odczyt wartości panującej na porcie, zapis do tego rejestru zmienia stan portu FIOnSET ustawienie wartości 1 na danym pinie portu FIOnCLR ustawienie wartości 0 na danym pinie portu FIOnMASK rejestr maski portu, pozwala na określenie, które linie portu mogą być zmienione, zapis i odczyt jest możliwy tylko do/z tych linii portu, które odpowiadają bitom rejestru o wartości 0 Więcej rejestrów obsługi niż w GPIO IOPIN0 = (IOPIN0 && 0xFFFF00FF) 0x0000A500 FIO0MASK = 0xFFFF00FF; FIO0PIN = 0x0000A500; 12

AVR vs ARM ATmega ARM CLK 16 MHz 60 MHz Czas 1-CLK ~62 ns ~17 ns Czas zmiany I/O 1 CLK Klika CLK (4xCLK = ~66 ns)

Ciekawostka o GPIO Operowanie na 32-bitowych słowach Każdy GPIO ma: 4 pary rejestrów 8-bitowych 2 pary rejestrów 16-bitowych 8bit: FIO0DIR FIO0DIR0, FIO0DIR1 FIO0DIRn 16bit: FIO0DIRL (P0.0...P0.15), DI0DIRH

Load and store

Programowanie Zapis w C: IOSET1=0x00008000; IOSET1 = (1 << 15) Pętla opóźniająca: for (i=0; i <1000000, i++); Pętla nieskończona: while(1) lub for (; ;); W asemblerze już tak kolorowo nie jest, ponieważ: operuje się na adresach pamięci a nie na nazwach symbolicznych, zapalenie diody wygląda tak: załaduj do rejestru ogólnego przeznaczenia R0 adres rejestru kierunku IODIR, załaduj do innego rejestru ogólnego np. R1 konfigurację bitów, umieść wartość z R1 pod adresem R0 IODIR = 0xE002 8008 IOSET = 0xE002 8004 IOCLR = 0xE002 800C IOPIN = 0xE002 8000 LDR R0, =0xE0028004 LDR R1, =(1<<15) STR R1, [R0]

Rozkazy przesłań z/lub do pamięci Do przesyłania danych pomiędzy rejestrami a pamięcią służą rozkazy: LDR Load Register: LDR Rd, adres STR Store Register: STR Rz, adres Adres zawiera: adres bazowy znajdujący się w jednym z rejestrów ogólnych R lub licznik rozkazów PC (mowa o adresowaniu względnym), przesunięcie względem adresu bazowego Wszystkie operacje wykonywane są na rejestrach a nie na pamięci!

Jak to działa LDR Load Register: LDR Rd, [adres = Rb] STR Store Register: STR Rz, [adres = Rb] Rejestry 0x0000 0011 0x0000 0A00 R0 R1 LDR R5, [R1] 0xFFFF FFFF R2 Pamięć 0xFEED C0DE R3 0x0000 0000 R4 0xAAAA AAAA 0x0000 09FC 0x0000 BEAD R5 0x0000 BEAD 0x0000 0A00 0x5555 5555 0x0000 0A04 R15

Jak to działa LDR Load Register: LDR Rd, [adres = Rb] STR Store Register: STR Rz, [adres = Rb] Rejestry 0x0000 0011 0x0000 0A00 R0 R1 STR R3, [R1] 0xFFFF FFFF R2 Pamięć 0xFEED C0DE R3 0x0000 0000 R4 0xAAAA AAAA 0x0000 09FC 0x0000 BEAD R5 0x0000 BEAD 0x0000 0A00 0x5555 5555 0x0000 0A04 R15

Jak to działa LDR Load Register: LDR Rd, [adres = Rb] STR Store Register: STR Rz, [adres = Rb] Rejestry 0x0000 0011 0x0000 0A00 R0 R1 STR R3, [R1] 0xFFFF FFFF R2 Pamięć 0xFEED C0DE R3 0x0000 0000 R4 0xAAAA AAAA 0x0000 09FC 0x0000 BEAD R5 0x0000 BEAD 0xFEED C0DE 0x0000 0A00 0x5555 5555 0x0000 0A04 R15

Jak to działa LDR Load Register: LDR Rd, [adres = Rb] STR Store Register: STR Rz, [adres = Rb] Rejestry 0x0000 0011 0x0000 0A00 R0 R1 STR R6, [R1,4] 0xFFFF FFFF R2 Pamięć 0xFEED C0DE R3 0x0000 0000 R4 0xAAAA AAAA 0x0000 09FC 0x0000 BEAD R5 0x0000 BEAD 0xFEED C0DE 0x0000 0A00 0x5555 5555 R6 0x5555 5555 0x0000 0A04

Przykład zastosowania LDR i STR LDR R0, =0xE0028008 LDR R1, =0xE0028004 LDR R2, =0xE002800C R0 IODIR - kierunek R1 IOSET ustawianie R2 IOCLR - zerowanie LDR R3, =0x00008000 R3 ustawienie bitu // Kod do wykonania STR R3, [R0] STR R3, [R1] STR R3, [R2] Ustawianie kierunku wyj Zapalanie diody Gaszenie diody

Rozkazy przesłań z/lub do pamięci Przesunięcie adresu można realizować: za pomocą wartości natychmiastowej, względem wartości w rejestrze, skalując wartość w rejestrze. Główne tryby adresowania: indeksowany, z preindeksowaniem, z postindeksowaniem.

Tryb indeksowany - do wartości bazowej dodajemy/odejmujemy przesunięcie LDR Load Register: LDR Rd, [adres = Rb] STR Store Register: STR Rz, [adres = Rb] Postać ogólna argumentu adres:

Tryb preindeksowany - do wartości bazowej dodajemy/odejmujemy przesunięcie, dodatkowo rejestr bazowy zostaje uaktualniony LDR Load Register: LDR Rd, [adres = Rb] STR Store Register: STR Rz, [adres = Rb] Postać ogólna argumentu adres:

Tryb postindeksowany - do wartości bazowej dodajemy/odejmujemy przesunięcie, dodatkowo rejestr bazowy zostaje uaktualniony LDR Load Register: LDR Rd, [adres = Rb] STR Store Register: STR Rz, [adres = Rb] Postać ogólna argumentu adres:

Przerwania

Rodzaje przerwań w układach ARM Przerwania ARM Programowe SWI SWI - Software Interrupt IRQ - Interrupt Request FIQ - Fast Interrupt Request Timer, ADC, External Interrupt, DMA. itp szybkie Sprzętowe IRQ, FIQ wektorowe niewektorowe

System przerwań w układach ARM - obsługa przerwań/wyjątków W momencie wystąpienia wyjątku: zawartość CPSR wędruje do SPSR_<mode> ustawione zostają odpowiednie bity zmianie ulega tryb pracy w razie potrzeby blokowane są przerwania adres powrotu w LR_<mode> Aby powrócić, obsługa wyjątku przywraca CPSR z SPSR_<mode> przywraca PC z LR_<mode> 0x1C 0x18 0x14 0x10 0x0C 0x08 0x04 0x00 FIQ IRQ (Reserved) Data Abort Prefetch Abort Software Interrupt Undefined Instruction Reset Tablica wektorów

VIC kontroler przerwań Magistrala Local Bus ARM 7TDMI nfiq nirq Kontroler przerwań VIC PLL F XTAL F CLK Magistrala AHB SRAM Flash Most AHB/VPB RAM USB, Ethernet Magistrala VPB (VLSI Peripheral Bus) Szybkie porty GPIO ADC, CA, PWM, SPI, I2C, RTC, USB, Timer porty GPIO

System przerwań w układach ARM Rdzeń ARM 7TDMI nfiq nirq Kontroler przerwań VIC FIQ wektorowe IRQ nie wektorowe IRQ źródła przerwań, np. peryferia VIC Vector Interrupt Controller IRQ - Interrupt Request FIQ - Fast Interrupt Request wyjścia przerwań z kontrolera VIC

Klasyfikacja przerwań Wszystkie przerwania, które nie zostały zakwalifikowane jako szybkie FIQ lub wektorowe IRQ są przerwaniami nie wektorowymi IRQ. do obsługi przerwań FIQ implementuje się jedną procedurę, do obsługi każdego przerwania wektorowego (16) tworzy się osobną procedurę - priorytet zależny od numeru, do obsługi przerwań nie-wektorowych przeznacza się jedną procedurę, która powinna rozpoznać źródło przerwania na podstawie zawartości rejestrów kontrolera VIC

System przerwań w układach ARM Kontroler VIC (Vectored Interrupt Controller) możliwość obsługi 32 przerwań, każde przerwanie można przyporządkować do FIQ lub IRQ, możliwość blokowania przerwań w rejestrze CPSR flaga F oraz I nfiq nirq Kontroler przerwań VIC FIQ Wektorowe IRQ Niewektorowe IRQ

System przerwań w układach ARM - przerwania wektorowe VIC wprowadza efektywny mechanizm przerwań wektorowych Wykonanie poleceń w momencie ich zgłoszenia (przez posiadanie własnej procedury każdego z przerwań) VIC ma 16 slotów (wektorów) Przypisanie dowolnego kanału przerwania (#0 #31)

System przerwań w układach ARM - rejestry kontrolera przerwań nfiq VICIRQStatus VICFIQStatus Status przerwania nirq Kontroler przerwań VIC VICRawIntr VICIntSelect VICIntEnable VICInEnClr VICSoftInt VICSoftIntClear Rejestracja przerwań zgłoszonych do obsługi Rejestr wyboru przerwania jako FIQ, IRQ Rejestr włączający/wyłączający przerwanie, należy ustawić bit odpowiadający numerowi kanału Programowa symulacja przerwań VICProtection Zabezpieczenie przed modyfikacją rej. VICSWPriorityMask Rejestr maskujący przerwanie progr. VICAddrress VICVecAdress0 32 Rejestr w którym w chwili zgłoszenia przerwanie umieszczony jest adres podprogramu Sloty w których umieszczono adresy podprogramów obsługi przerwań IRQ VICVecPriority0/Cntl0 32 Nadanie priorytetu przerwań wektorowych, możliwe 16 przerwań, priorytet 0 najważniejszy

System przerwań w układach ARM - rejestry kontrolera przerwań Mała uwaga: rejestr VIC: VICVectCntln (LPC2000) w dokumentacji występuję również jako: rejestr VIC: VICVectPriorityn (LPC23xx/24xx)

System przerwań w układach ARM - źródła przerwań kontrolera VIC

System przerwań w układach ARM - źródła przerwań kontrolera VIC

System przerwań w układach ARM - przerwania wektorowe Przerwania wektorowe wymagają przypisania przerwań do slotów. Każde z przerwań. Każdy slot konfigurowany jest 2 rejestrami: VICVectAddrn i VICVectCntln przypisanie do slotu procedury obsługi przerwania przypisanie źródła przerwania do slotu VICVectAddr VICVectPriorityn

System przerwań w układach ARM - szybkie przerwania FIQ Program obsługi przerwania FIQ jest tylko jeden Każde źródło może być zakwalifikowane jako szybkie przerwanie FIQ - VICIntSelect, W rejestrze VICFIQStatus możliwe jest sprawdzenie źródła przerwania W rejestrze VICIntEnable należy przerwanie odblokować Procedura obsługi przerwania FIQ: wystąpienie FIQ powoduje skok do adresu 0x0000001C tu rozpoczyna się podprogram obsługi, przed wyjściem należy skasować flagę urządzenie zgłaszającego przerwanie void FIQ_Handler fiq { // wyczyszczenie źródła przerwania // procedura, ciało funkcji // aktualizacja VIC, Vector Address Register } //obsługa przycisku na pinie P2.11 EINT1 PINSEL4 = 0x00200000; VICIntSelect = 0x00008000; VICIntEnable = 0x00008000; void FIQ_Handler fiq { // dowolna funkcja obsługi EXTINT = 0x00000002 }

System przerwań w układach ARM - szybkie przerwania FIQ PINSEL4 PINSEL4 = 0x0020 0000; Stany Opis funkcji 00 domyślnie, port GPIO 01 funkcja 1 10 funkcja 2 11 funkcja 3

System przerwań w układach ARM - szybkie przerwania FIQ VICIntSelect, VICIntEnable Ustaw kanał 15 VIC (EINT1) VICIntSelect = 0x0000 8000; Odblokowanie przerwania VICIntEnable = 0x0000 8000;

System przerwań w układach ARM - szybkie przerwania FIQ EXTINT Zerowanie flagi przerwania EXTINT = 0x0000 0002

System przerwań w układach ARM - przerwania wektorowe IRQ przypisanie kanału przerwania źródła przerwania Slot 0 Slot 1 Slot 15 VICVecCntl0 VICVecAddr0 VICVecCntl1 VICVecAddr1 VICVecCntl15 VICVecAddr15 VICAddrress adres procedury obsługi przerwania Wystąpienie przerwania o najwyższym priorytecie powoduje przepisanie zawartości rejestru VICVecAddrn do VICAddrress. W chwili wystąpienia przerwania wektorowego procesor przechodzi w tryb IRQ i wykonuje skok do adresu 0x00000018. Warunkiem obsługi przerwania jest załadowanie zawartości rejestru VICAddrress do PC

System przerwań w układach ARM - obsługa przerwań w C void IRQ_Handler irq { // wyczyszczenie źródła przerwania // procedura, ciało funkcji // aktualizacja VIC, Vector Address Register } irq void IRQ_Handler (void) { // wyczyszczenie źródła przerwania // procedura, ciało funkcji // aktualizacja VIC, Vector Address Register } Aby opuścić przerwania np. IRQ, należy: sprawdzić czy flaga przerwania urządzenia zgłaszającego przerwanie jest wyczyszczona, wyzerować rejestr VICVecAddr. Te czynności kończą obsługę przerwania i umożliwiają obsługę kolejnego.

System przerwań w układach ARM - obsługa przerwań wektorowych w C //obsługa przycisku na pinie P2.11 EINT1 PINSEL4 = 0x00200000; VICIntSelect = 0x00008000; VICVecAddr0 = (unsigned) EXTINTVectoredIRQ; VICVectPriority0 = 0x00000001; VICIntEnable = 0x00008000; //EXTINT=(1<<13); pin P2.11 jako EINT1 przypisanie adresu ustawienie priorytetu odblokowanie przerwania EINT1 void EXTINTVectoredIRQ (void) irq { // dowolna funkcja obsługi EXTINT = 0x00000002; VICVecAddr = 0x00000000; zerowanie flagi przerwania zerowanie Vector Addres Register }

System przerwań w układach ARM - przerwania programowe Przerwanie programowe wiąże się z wykonaniem instrukcji SWI #n Wykonanie tej instrukcji powoduje wywołanie podprogramu z pod adresu 0x00000008 jest to skok Tego rodzaju przerwanie nie mają nic wspólnego z VIC Instrukcja SWI może pojawić się w dowolnym miejscu programu void SWI_call1 (void) swi(5); void SWI_call2 (void) swi(11); int main (void) { } while(1){ } delay(1); SWI_call1(); delay(1); SWI_call2();

System przerwań zewnętrznych

System przerwań w układach ARM Aby obsługa przerwania FIQ była możliwa, należy: w pliku Startup.s zmodyfikować instrukcje definiujące etykiety procedury obsługi przerwań i wielkość stosu dla tej procedury FIQ_Stack_Size EQU 0x00000080 ; ; FIQ_Addr DCD MyFIQ_Handler ; ; ;FIQ_Handler B FIQ_Handler IMPORT MyFIQ_Handler B MyFIQ_Handler

Dziękuję za uwagę