Laboration 4: Undantagshantering
- Inlämningsdatum 5 mar 2023 av 23.59
- Poäng 1
- Lämnar in en filuppladdning
- Filtyper zip
Under denna laboration utförs tre uppgifter som behandlas utförligt i läroboken där de beskrivs i form av deluppgifter som successivt måste klaras av innan själva laborationsuppgifterna kan lösas.
För att kunna genomföra hela laborationen måste du ha arbetat igenom hela kapitel 4 i läroboken. Du kan dock dela upp det så här:
- Studera avsnitten t.o.m 4.2, speciellt exemplen och utför uppgifter t.o.m 4.3.
- Avsnitten 4.3, 4.4 och 4.5 kan du sedan läsa kursivt. Dom är inte centrala för förståelsen av nästa uppgift.
- Avsnitt 4.6 och 4.7 är grundläggande för laborationsuppgifter 4.2 – 4.3. Försäkra dig om att du förstår avsnitten. Utför därefter dessa laborationsuppgifter.
Ni som gör laborationen på distans lämnar in laborationsuppgifterna 4.1, 4.2 och 4.3 nedan. Följ inlämningsformatet som specificeras på sidan Laborationsinformation (läs först!) under avsnittet "Inlämningsformat"
Laborationsuppgift 4.1: Meddelandeskickning (Uppgift 4.3 i läroboken)
Uppgiften är att konstruera en avbrottsdriven fördröjningsrutin med SysTick-räknaren.
- Kontrollera programmets funktion med CodeLite och SimServer (hemma) eller MD407/USBDM (vid laborationsplatsen.)
OBS! Vid debugging med USBDM behöver vi relokera vektortabellen samt starta klockorna för port D, E, och SYSCFG. Lägg till följande i början av app_init()
/* starta klockor port D och E */
* ( (unsigned long *) 0x40023830) = 0x18;
/* starta klockor för SYSCFG */
* ((unsigned long *)0x40023844) |= 0x4000;
/* Relokera vektortabellen */
* ((unsigned long *)0xE000ED08) = 0x2001C000;
Följande video visar hur programmet bör fungera i simulatorn:
Laborationsuppgift 4.2: Externavbrott, en avbrottsvektor (Uppgift 4.9 i läroboken)
Uppgiften är att konstruera en applikation med flera externa enheter som genererar avbrott och där samma avbrottsrutin används för att hantera samtliga avbrott.
Hint: Eftersom vi bara använder en avbrottslina (EXTI3) i denna uppgift, kan vi inte använda EXTI Pending Register för att avgöra om IRQ0, IRQ1, eller IRQ2 har orsakat ett avbrott. Istället måste vi läsa pinnarna på E-porten (pin 0, 1, och 2) och avgöra vilka pinnar som är ettställda.
Hint: RST-signalerna som återställer vipporna på IRQ FlipFlop-kortet måste togglas, d.v.s., först ettställas och därefter nollställas (i simulatorn räcker det med att ettställa dem.)
- Kontrollera programmets funktion med CodeLite och SimServer (hemma) eller MD407/USBDM (vid laborationsplatsen.)
Följande video visar hur programmet bör fungera i simulatorn:
Laborationsuppgift 4.3: Externavbrott, flera avbrottsvektorer (Uppgift 4.10 i läroboken)
I denna uppgift modifieras föregående applikation så att varje avbrott dirigeras till en egen avbrottsrutin.
- Kontrollera programmets funktion med CodeLite och SimServer (hemma) eller MD407/USBDM (vid laborationsplatsen.)
Se demonstrationvideo för uppgift 4.2. Applikationerna beter sig identiskt men har implementerats på olika sätt.