Demonstration och konsultation Arbetsbokens avsnitt 7 Händelsestyrt processbyte Förberedande inför laboration 4



Relevanta dokument
Maskinorienterad programmering

Undantag, avbrott. Avsnitt 7. Undantag, avbrott

Tentamen med lösningsförslag

Tentamen med lösningsförslag

Tentamen med lösningsförslag

Tentamen med lösningsförslag

GPIO - General Purpose Input Output

Demonstration och konsultation Arbetsbokens avsnitt 5 och 6 LCD Grafisk display Introduktion till laboration 3

Beskrivning av porthantering i mikroprocessorn SAM3U som används på vårt labkort SAM3U- EK.

Tentamen med lösningsförslag

Tentamen med lösningsförslag

Programmering av inbyggda system

Microprocessor / Microcontroller. Industrial Electrical Engineering and Automation

Tentamen med lösningsförslag

Maskinorienterad programmering

Digitala Projekt(EITF40) - Larm

Övning 7. Timer, serieport

Maskinorienterad programmering

GPIO - General Purpose Input Output

Effektpedal för elgitarr

Tentamen med lösningsförslag

Tentamen med lösningsförslag

Programmering av inbyggda system

Maskinorienterad programmering

Realtidsprogrammering. En introduktion Implementering (med exempel från PIC)

Tentamen med lösningsförslag

Laboration 4: Knappstuds Drivrutiner för att eliminera störningar.

IS1500 Lösningar övning CE_O CE_O7. Programmerad in/utmatning. Serieport. Förberedelser till nios2io.

Tentamen med lösningsförslag

Tentamen med lösningsförslag

Skizz till en enkel databas

Växtviskaren EITF11 Digitala projekt VT15, I12

#include <avr/io.h> #include <avr/interrupt.h> #include <util/delay.h> unsigned char num;

Ett program som frågar regelbundet om något skall utföras. Exempelvis om spänningen på ett batteri sjunkit under en viss nivå.

Att använda pekare i. C-kod

Maskinorienterad Programmering LP3-2017/2018

Programmering av grafisk display

#include <pic.h> #include <sys.h> char LEFT,RIGHT,MOTORHASTIGHET;

EDA480/EDA485 - Maskinorienterad programmering, tentamen 2006-xx-xx 1(7)

Tentamen med lösningsförslag

Microprocessor / Microcontroller

Programmering av grafisk display

Övning 6. Parallellport, timer

Digitala Projekt (EITF11) Hemlarm

Översikt Introduktion DST 1. Nicholas Wickström. IDE, Högskolan i Halmstad. N. Wickström

INGENJÖRSHÖGSKOLAN INGENJÖRSHÖGSKOLAN

Elektroteknik MF1016 föreläsning 9 MF1017 föreläsning 7 Mikrodatorteknik

Enkla datatyper minne

F6: I/O hantering. Typer av I/O i ett datorsystem. Protokoll för synkronisering. Drivrutiner. Memory mapped Port mapped. Polling Timed Interrupt DMA

Svar till Övning3 Datorteknik, HH vt12 Avbrott och timers

Projektlaboration 4, synkronisering av klockan

LEU500-Maskinorienterad programmering LP3-2016/2017

Seriekommunikation. Ur innehållet: Nätverkstopologier Nätverksprotokoll Asynkron/synkron seriell överföring Programmering av USART-krets

AVR 3 - datorteknik. Avbrott. Digitala system 15 hp. Förberedelser

Quick Guide Laborationsdator MD407 med tillbehör

Maskinorienterad Programmering IT2, LP2-2016/2017

LARMANLÄGGNING. Digitala Projekt, EITF11. Oskar von Knorring Emin Karimov Henrik Akej Handledare: Bertil Lindvall

Datorteknik 2 (AVR 2)

Maskinorienterad Programmering LP2-2017/2018

(Lösningsförslag finns sist i denna fil.)

Ansvarig lärare: Olof Andersson, Telefon (besöker skrivsalen)


Larmcentral. Digitala Projekt. Cecilia Olsson & Erika Björck Handledare: Bertil Lindvall LUNDS TEKNISKA HÖGSKOLA

Dessa komponenter plus några motstånd, klockkrets, kondensatorer och annat smått och gott har åstadkommit ett fungerande POV-hjul.

LEGO Robot programmering och felsökning Hur svårt ska det vara att följa den svarta linjen?

SMD 134 Objektorienterad programmering

Projektrapport - Roterande digital LED-klocka

Kontrollskrivning Mikrodatorteknik CDT S2-704

Dagens föreläsning. Repetition. Repetition - Programmering i C. Repetition - Vad C består av. Repetition Ett första C-program

Källkod. #include <avr/io.h> #include <util/delay.h> #include <avr/interrupt.h> #define green_diode PD5. #define RS PD4

NXT LEGO-robot laboration Programmering och felsökning av en LEGOrobot

Att läsa en manual. Exempel Timern ECT_16B8C. Läs den allmänna beskrivningen (Overview) Vi ser att grundfunktionen är en räknare med prescaler

Arduinokurs. Kurstillfälle 4

Fö 5+6 TSEA81. Real-time kernel + Real-time OS

PC-teknik, 5 p LABORATION FILHANTERING

Source code. #undef F_CPU. #define F_CPU UL. #include <avr/io.h> #include <avr/delay.h> #include <string.h> #include <avr/eeprom.

Exempelsamling Assemblerprogrammering

Programmering av inbyggda system. Kodningskonventioner. Viktor Kämpe

LEU240 Mikrodatorsystem

Föreläsning 2: Avlusning och antilustekniker

Digitala Projekt(EITF40) - Larm

Varför behövs det? I Allegro finns t.ex. stöd för:

Laboration 5 C-programmering på AVR TSEA57 Datorteknik I

Lösningar till tentamen i EIT070 Datorteknik

Lathund. C för inbyggda system

Realtidsprogrammering

Programallokering. Programtyper. Att placera program i flashrespektive. Program i FLASH-minne. Program i RAM-minne

4 Sammansatta datatyper

Lösningar till övning CE_O CE_O6. Parallell in/utmatning (I/O). Förberedelser till laboration nios2io.

Att bekanta dig med NetBeans programmeringsmiljö och skriva några enkla program med programmeringsspråket Java.

The Phenomenal Doorbell Bilaga 2. Källkod

A-del motsvarande KS1

Programmering, grundkurs, 8.0 hp, Elektro, KTH, hösten Nu till dagens ämne: Vi rekapitulerar det första problemet ur ProblemI:

6 Lågnivåprogrammering

Design av inbyggda system

Assemblerprogrammering för ARM del 3

Programmeringsteknik för Ingenjörer VT06. Föreläsning 10

Rapport. Fyra i rad-spel. Rapport Digitala Projekt EITF11 Grupp 9 Emma Rasmusson & Louise Ragnarsson Handledare: Bertil Lindvall

Utkast. Programmering. Signals. Olika typer av program. Sommarkurs Avbrott i mjukvara.

Maskinorienterad Programmering /2011. Maskinorienterad Programmering 2010/11. Maskinnära programmering C och assemblerspråk

Transkript:

Avbrott Demonstration och konsultation Arbetsbokens avsnitt 7 Händelsestyrt processbyte Förberedande inför laboration 4 Demonstrationsövning 5 1

Arbetsbok avsnitt 7: Undantag, avbrott - Uppgift 41 + enable_interrupt + disable_interrupt - Uppgift 43 + irq_handler + app_init + main Demonstrationsövning 5 2

Demonstrationsövning 5 3

Enable/Disable Interrupts Demonstrationsövning 5 4

Demonstrationsövning 5 5

Konfigurera för att kunna hantera interrupts (app_init): - Hårdvaran: syscfg clock ska slås på! - Port E bit 3 skall konfigureras som external interrupt. - Interrupt Mask Register skall konfigureras for att aktivera avbrott på avbrottslinan av intresse. - Konfigurera för avbrott på negativ flank. - Lägg in en funktions pekare i avbrotts vektor tabellen. - konfigurera Nested Vectored Interrupt Controller Demonstrationsövning 5 6

SYSCFG clock on: Demonstrationsövning 5 7

Port E b3 EXTI3 Demonstrationsövning 5 8

Aktivera avbrott på avbrottslinan av intresse Demonstrationsövning 5 9

Konfigurera för avbrott på fallande flank Demonstrationsövning 5 10

Avbrotts vektor tabellen (irq_handler funktions pekaren?) Demonstrationsövning 5 11

Konfigurera NVIC Demonstrationsövning 5 12

Konfigurera NVIC: SETENA[9] skall sättas. Demonstrationsövning 5 13

irq_handler: Demonstrationsövning 5 14

EXTI Pending Register Demonstrationsövning 5 15

Kod Demonstrationsövning 5 16

#define SYSCFG_BASE 0x40013800 volatile unsigned int* syscfg_exticr1 = (volatile unsigned int*) (SYSCFG_BASE + 8); volatile unsigned int* rcc_apb2enr = (volatile unsigned int*) (0x40023844); #define EXTI_BASE 0x40013C00 volatile unsigned int *exti_imr = (volatile unsigned int*) EXTI_BASE; /* interrupt mask register */ volatile unsigned int *exti_emr = (volatile unsigned int*) (EXTI_BASE + 4); /* Event mask register */ volatile unsigned int *exti_rtsr = (volatile unsigned int*) (EXTI_BASE + 8); /* rising trigger */ volatile unsigned int *exti_ftsr = (volatile unsigned int*) (EXTI_BASE + 0xC); /* falling trigger */ volatile unsigned int *exti_pr = (volatile unsigned int*) (EXTI_BASE + 0x14); /* pending register */ #define EXTI3_IRQVEC 0x2001C064 Demonstrationsövning 5 17

volatile unsigned int *nvic_iser0 = (volatile unsigned int*) (0xE000E100); volatile unsigned int *nvic_ipr0 = (volatile unsigned int*) (0xE000E400); Demonstrationsövning 5 18

#define PORT_BG_BASE 0x40020C00 /* Port D */ #define PORT_FF_BASE 0x40021000 /* port E */ volatile unsigned int *p_ff_moder = (volatile unsigned int*) PORT_FF_BASE; volatile unsigned short *p_ff_otyper = (volatile unsigned short*) (PORT_FF_BASE + 0x4); volatile unsigned int *p_ff_ospeedr = (volatile unsigned int*) (PORT_FF_BASE + 0x8); volatile unsigned int *p_ff_pupdr = (volatile unsigned int*) (PORT_FF_BASE + 0xC); volatile unsigned char *p_ff_idrlow = (volatile unsigned char*) (PORT_FF_BASE + 0x10); volatile unsigned char *p_ff_odrlow = (volatile unsigned char*) (PORT_FF_BASE + 0x14); volatile unsigned int *p_bg_moder = (volatile unsigned int*) (PORT_BG_BASE); volatile unsigned short *p_bg_otyper = (volatile unsigned short*) (PORT_BG_BASE + 0x4); volatile unsigned int *p_bg_ospeedr = (volatile unsigned int*) (PORT_BG_BASE + 0x8); volatile unsigned char *p_bg_odrlow = (volatile unsigned char*) (PORT_BG_BASE + 0x14); Demonstrationsövning 5 19

void enable_interrupt( void ){ asm volatile( " cpsie i\n" ); } void disable_interrupt( void ){ asm volatile( "cpsid i\n" ); } Demonstrationsövning 5 20

/* global räknare */ char count; void irq_handler(void){ if (*exti_pr & 0x8){ /* kolla bit 3 */ count ++; *exti_pr = 0x8; /* ränsa interrupt */ } } Demonstrationsövning 5 21

void app_init(void){ /* bar graph output */ /* bits 0-7 utgångar */ *p_bg_moder = 0x00005555; *p_bg_ospeedr = 0x00005555; /* medium speed */ /*avbrotts generator plattan*/ *p_ff_moder = 0x00005500; /* b 7-4 ut, b 3-0 in */ *p_ff_ospeedr = 0x0000FF00; /* hög fart */ count = 1; /* FORTSÄTTER NÄSTA SLIDE */ Demonstrationsövning 5 22

/* port E bit 3 interrupt input, negativ flank */ *rcc_apb2enr = 0x4000; /*syscfg clock på*/ *syscfg_exticr1 = 0x4000; /* PE3 -> EXTI3 */ /* konfigurera mask */ *exti_imr = 0x8; /* konfigurera fallande flank */ *exti_ftsr = 0x8; *exti_rtsr &= ~0x8; /* set vektor */ *((void (**)(void) ) EXTI3_IRQVEC) = irq_handler; } *nvic_iser0 = (1 << 9); Demonstrationsövning 5 23

int main(void) { app_init(); enable_interrupt(); while(1) { *p_bg_odrlow = count; } } Demonstrationsövning 5 24

Extra: Inför labben Demonstrationsövning 5 25

/* global räknare */ char count; void irq_handler(void){ if (*exti_pr & 0x8){ /* kolla bit 3 */ count ++; *exti_pr = 0x8; /* ränsa interrupt */ } } *p_ff_odrlow = 0x70; *p_ff_odrlow &= ~0x70; Demonstrationsövning 5 26