Newest Viewed Downloaded

Övning 5Parallellport, Timer

Övning 5

Parallellport, Timer

Repris: Minnesdisposition

Gles adressrymd Endast en liten del av minnet är utbyggt. (vanligt för inbyggda system) Mellan adresserna 0x800 till 0xA20 finns I/O-kretsar – med allt det roliga på DE2-kortet code motsvarar .text

IO-adresserna är speciella

Även om IO-enheternas register adresseras som vanligt minne så har dom ju helt andra egenskaper än vad vanligt minne har! Om man skriver talet 17 till DE2-kortets toggle-switchar, så är det ingen magisk kraft som förflyttar dom till ett läge som motsvarar talet 17! Om Du däremot ställer switcharna för hand så att det motsvarar talet 17 så kommer man att kunna läsa talet 17 på denna minnesadress. I C-program bör man använda ordet volatile (flyktigt) om sådana minnesadresser. Då talar man om för kompilatorn att den inte kan räkna med att ett lagrat tal på en sådan minnesadress är det man får tillbaka om man senare läser adressen!

5.1 de2_pio_toggles18

IO är mappade till minnesadresser. 0x850 … 0x85C

5.1 inmatning från ”toggles” Get_Data()

.equ toggles18, 0x850 # toggles18’s adress .text # Datasegmentet .align 2 .global Get_Data # label synligt utanför filen Get_Data: movia r8,toggles18 # adressen till toggles i R8 ldw r2,0(r8) # läs toggles till R2 movia r8,0x3ffff # mask med 18 ettor (movia) and r2,r2,r8 # maska bort oanvända bitar ret int Get_Data( void );

5.2 de2_pio_geenled9

IO är mappade till minnesadresser. 0xA10 … 0xA1C

5.2 Utmatning till ”greenled” Green_Light()

.equ greenled9, 0xA10 # greenled9’s adress .text # Datasegmentet .align 2 .global Green_Light # label synligt utanför filen Green_Light: andi r4,r4,0x1ff # 0:ställ oanvända bitar movia r8,greenled9 # adressen till greenled i R8 stw r4,0(r8) # skriv till LED ret void Green_Light( int );

de2_pio_redled18

IO är mappade till minnesadresser. 0x810 … 0x81C

5.3 Sjusegmentdisplayer

IO är mappade till minnesadresserna 0xA00 och 0x9F0

5.3 Segmentöversikt

5.3 Teckenöversikt

Kan Du nu gissa varför simulatorn redovisar att alla oanvända register innehåller ”deadbeef” (dökött)? nörd-humor …

5.3 Siffran ”0”

5.3 Siffran ”1”

5.3 omvandling hex7seg()

int tabell[] = { 0x40, 0x79, 0x24, 0x30, 0x19, 0x12, 0x02, 0x78, 0x00, 0x10, 0x08, 0x03, 0x46, 0x21, 0x06, 0x0e }; int hex7seg( int hex) { register int tmp = hex & 0xf; return tabell[ tmp ]; } C-funktion som omvandlar en hex-siffra till motsvarande 7-bitskod (för utmatning på 7-segmentdisplay).

5.4 Utmatning 4 st 7-segment siffror

void PutLow7SegDisp( int ); .equ hex_low28,0x9f0 # adressen till hex_low28 .text # Datasegmentet .align 2 .global PutLow7SegmDisp # label synligt i andra filer PutLow7SegmDisp: movia r8,hex_low28 # adressen till hex_low i R8 stw r4,0(r8) # skriv till 4 st 7-segm siffror ret

Simulatorn har inga 7-segmentdisplayer?

Ett hjälpmedel kan vara att låta utskriften i console-fönstret efterlikna 7-segmentdisplayen! Programmet: put_hexsim(in_value) är skrivet för att uppföra sig exakt som displayen kommer att göra vid laborationen. – Fungerar det med simulatorn, är chansen stor att ditt program även fungerar vid laborationen!

5.5 toggles  4  7-Segment display

main: # main kör evighetsloop – returnerar ej call GetData # hämta värde från toggles, R2 mov r16,r2 # spara värdet i R16 mov r4,r2 # kopiera värdet till R4 call hex7seg # kodomvandling 1:a siffran (C-funktion) mov r17,r2 # spara resultat i R17 srli r4,r16,4 # skifta fram andra hex-siffran call hex7seg # kodomvandling 2:a siffran slli r8,r2,7 # skifta fram till nästa 7 bitar or r17,r17,r8 # lägg till 7 skiftade bitar # fortsättning följer ...

5.5 toggles  4  7-Seg forts.

srli r4,r16,8 # skifta fram tredje hex-siffran call hex7seg # kodomvandling 3:e siffran slli r8,r2,14 # skifta fram till nästa 7 bitar or r17,r17,r8 # lägg till de skiftade 7 bitarna srli r4,r16,12 # skifta fram fjärde hex-siffran call hex7seg # kodomvandling 4:e siffran slli r8,r2,21 # skifta fram till nästa 7 bitar or r17,r17,r8 # lägg till de skiftade 7 bitarna mov r4,r17 # kopiera till R4, parameter call PutLow7SegmDisp # skriv på displayen br main # main är evighets-loop

Showing 1 - 20 of 37 items Details

Name: 
DaTek5
Author: 
N/A
Company: 
N/A
Description: 
Övning 5Parallellport, Timer
Tags: 
timer | timeout | hex | movia | call | bitar | hex7seg | siffran
Created: 
2/5/2010 9:00:54 AM
Slides: 
37
Views: 
4
Downloads: 
0
Rating: 
0


> Comment



Share this presentation
|

Comments

Share this presentation:

|
Sitemap