 |
www.elektronik.si Forum o elektrotehniki in računalništvu
|
Poglej prejšnjo temo :: Poglej naslednjo temo |
Avtor |
Sporočilo |
klemen Član

Pridružen-a: Sre 01 Okt 2003 16:18 Prispevkov: 28 Aktiv.: 0.12 Kraj: Sežana
|
Objavljeno: Tor Maj 26, 2009 7:48 pm Naslov sporočila: Razlaga programa v ARM-u |
|
|
Kaj mi lahko razložite delovanje tega programa?
Kaj dela vsak ukaz:
- DELAY:
- LED_OFF:
- LED_ON:
- LED_INIT:
- XMCHAR:
- XMCODE:
- GETMCODE:
- XWORD:
- ZNAKI:
---------------------------------------------------------------------------------------------------
/* user code here */
.equ PIOC_BASE, 0xFFFFF800 /* Začetni naslov registrov za PIOC */
.equ PIO_PER, 0x00 /* Odmiki... */
.equ PIO_OER, 0x10
.equ PIO_SODR, 0x30
.equ PIO_CODR, 0x34
ZNAKI: .ascii ".-" @ A
.byte 0,0,0,0
.ascii "-..."@ B
.byte 0,0
.ascii "-·-·" @ C
.byte 0,0
.ascii "-.." @ D
.byte 0,0,0
.ascii "." @ E
.byte 0,0,0,0,0
.ascii "..-." @ F
.byte 0,0
.ascii "--." @ G
.byte 0,0,0
.ascii "...." @ H
.byte 0,0
.ascii ".." @ I
.byte 0,0,0,0
.ascii ".---" @ J
.byte 0,0
.ascii "-.-" @ K
.byte 0,0,0
.ascii ".-.." @ L
.byte 0,0
.ascii "--" @ M
.byte 0,0,0,0
.ascii "-." @ N
.byte 0,0,0,0
.ascii "---" @ O
.byte 0,0,0
.ascii ".--." @ P
.byte 0,0
.ascii "--.-" @ Q
.byte 0,0
.ascii ".-." @ R
.byte 0,0,0
.ascii "..." @ S
.byte 0,0,0
.ascii "-" @ T
.byte 0,0,0,0,0
.ascii "..-" @ U
.byte 0,0,0
.ascii "...-" @ V
.byte 0,0
.ascii ".--" @ W
.byte 0,0,0
.ascii "-..-" @ X
.byte 0,0
.ascii "-.--" @ Y
.byte 0,0
.ascii "--.." @ Z
.byte 0,0
.align
niz: .ascii "SOS"
.byte 0
.align
[slovenščina je zame španska vas] LED_INIT /*Inicializiramo oranžno LED lučko*/
glavniprogram:
adr r0,niz
[slovenščina je zame španska vas] XWORD
b glavniprogram
XWORD:
stmed r13!,{r0-r1,lr} /*Shrani registre, ki jih "popackamo"*/
mov r1,r0
ldrb r0,[r1] /*v r0 naloži znak iz naslova, ki je v r1*/
zanka3: [slovenščina je zame španska vas] GETMCODE
[slovenščina je zame španska vas] XMCODE
add r1,r1,#1
ldrb r0,[r1]
cmp r0,#0 /*preveri, znak enak 0 (kar pomeni, da je niz končan)*/
bne zanka3
mov r0,#100 /*v r0 zapiše 100, kar delay-u pove, da mora počakati 1000ms = 1s*/
[slovenščina je zame španska vas] DELAY /*počaka 1 sekundo*/
ldmed r13!,{r0-r1,pc} /*Restavriraj registre, ki smo jih shranili*/
GETMCODE:
stmed r13!,{r1-r3,lr} /*Shrani registre, ki jih "popackamo"*/
/*Tokrat r0 ne shranimo, ker bomo v njem vračali rezultat*/
adr r1,ZNAKI /*v r1 naloži naslov začetka tabele z znaki*/
sub r2,r0,#'A' /*v r2 od znaka ki je v r0 odštemo 'A' (41)*/
mov r3,r2 /*skopiramo vrednost še v r3*/
mov r2,r2,lsl#2 /*v r2 zmnožimo prej zračunano razliko (r0-'A') s 4*/
mov r3,r3,lsl#1 /*v r3 zmnožimo prej zračunano razliko (r0-'A') z 2*/
add r2,r2,r3 /*v r2 seštejemo zgornja produkta, da dobimo zmnožek s 6*/
add r0,r1,r2 /*v r0 naslovu začetka tabele prištejemo izračunani odmik*/
ldmed r13!,{r1-r3,pc} /*Restavriraj registre, ki smo jih shranili*/
XMCODE:
stmed r13!,{r0-r1,lr} /*Shrani registre, ki jih "popackamo"*/
mov r1,r0
ldrb r0,[r1] /*naloži vsebino iz naslova podanega v r1(r0)*/
zanka2: [slovenščina je zame španska vas] XMCHAR
add r1,r1,#1
ldrb r0,[r1]
cmp r0,#0 /*preveri, ali je znak enak 0 (kar pomeni, da je niz končan)*/
bne zanka2
mov r0,#30 /*v r0 naloži 30, kar podprogramu DELAY poda vrednost za 300ms dolgo zakasnitev*/
[slovenščina je zame španska vas] DELAY
ldmed r13!,{r0-r1,pc} /*Restavriraj registre, ki smo jih shranili*/
XMCHAR:
stmed r13!,{r0,lr} /*Shrani registre, ki jih "popackamo"*/
cmp r0,#'.' /*primerja, ali je znak enak '.'*/
moveq r0,#15 /*če je enak, potem pripravi za zamik 150 ms*/
movne r0,#30 /*če pa ni enak '.' (se pravi je '-') pa pripravi za zamik 300 ms*/
[slovenščina je zame španska vas] LED_ON
[slovenščina je zame španska vas] DELAY
[slovenščina je zame španska vas] LED_OFF
mov r0,#15 /*vedno doda še 150 ms zakasnitve*/
[slovenščina je zame španska vas] DELAY
ldmed r13!,{r0,pc} /*Restavriraj registre, ki smo jih shranili*/
LED_INIT:
stmed r13!,{r0-r1,lr} /*Shrani registre, ki jih "popackamo"*/
ldr r0, =PIOC_BASE /*Osnovni naslov PIO krmilnika C*/
mov r1, #1 << 1 /*Enica na bitu 1 (desetiško 2), ki jo bomo zapisali v register PIO*/
str r1, [r0, #PIO_PER] /* Priključek C1 krmili PIO */
str r1, [r0, #PIO_OER] /* Omogoči izhod na C1 */
str r1, [r0, #PIO_SODR] /* Nastavi stanje izhoda na 1 */
ldmed r13!,{r0-r1,pc} /*Restavriraj registre, ki smo jih shranili*/
LED_ON:
stmed r13!,{r0-r1,lr} /*Shrani registre, ki jih "popackamo"*/
ldr r0, =PIOC_BASE /*Osnovni naslov PIO krmilnika C*/
mov r1, #1 << 1 /*Enica na bitu 1, ki jo bomo zapisali v register PIO*/
str r1, [r0, #PIO_CODR] /* Na priključek C1 zapiši stanje 0 */
ldmed r13!,{r0-r1,pc} /*Restavriraj registre, ki smo jih shranili*/
LED_OFF:
stmed r13!,{r0-r1,lr} /*Shrani registre, ki jih "popackamo"*/
ldr r0, =PIOC_BASE /*Osnovni naslov PIO krmilnika C*/
mov r1, #1 << 1 /*Enica na bitu 1, ki jo bomo zapisali v register PIO*/
str r1, [r0, #PIO_SODR] /* Na priključek C1 zapiši stanje 1 */
ldmed r13!,{r0-r1,pc} /*Restavriraj registre, ki smo jih shranili*/
DELAY:
stmed r13!,{r0-r1,lr} /*Shrani registre, ki jih "popackamo"*/
nkrat:
ldr r1,=480000 /*1 obhod zanke traja 4 u.p. -> 480000 obhodov traja 10 ms*/
zanka:
subs r1,r1,#1 /*1 urina perioda */
bne zanka /*1 u.p. + 2 u.p. (kontrolna nevarnost) = 3 u.p.*/
subs r0,r0,#1 /*zmanjšuje r0 do ničle*/
bne nkrat
ldmed r13!,{r0-r1,pc} /*Restavriraj registre, ki smo jih shranili*/
Nazadnje urejal/a klemen Sre Maj 27, 2009 12:00 am; skupaj popravljeno 2 krat |
|
Nazaj na vrh |
|
 |
domen_puncer Član

Pridružen-a: Čet 01 Maj 2008 13:30 Prispevkov: 78 Aktiv.: 0.37 Kraj: Ljubljana, Mozirje
|
Objavljeno: Tor Maj 26, 2009 9:02 pm Naslov sporočila: |
|
|
Poglej si:
- arm architecture reference manual (aka armarm)
- users manual od tega procesorja/druzine
- dokumentacijo tvojega zbirnika
Ce si to storil... pa mogoce vprasaj kaj konkretnega, ne pa "ali mi razlozite xxx", saj nimamo pojma kaj ves in kaj ne. _________________ Tiskanje sudoku |
|
Nazaj na vrh |
|
 |
klemen Član

Pridružen-a: Sre 01 Okt 2003 16:18 Prispevkov: 28 Aktiv.: 0.12 Kraj: Sežana
|
Objavljeno: Tor Maj 26, 2009 11:31 pm Naslov sporočila: |
|
|
Jas sem to dobil pa bi rad zastopil kaj počne vsak pod program, kot sem navedel odzgoraj. Nevem kaj preveč zato rabim razlago.
Hvala |
|
Nazaj na vrh |
|
 |
aly Član



Pridružen-a: Tor 28 Sep 2004 14:51 Prispevkov: 9407 Aktiv.: 39.70 Kraj: Kranj - struževo
|
Objavljeno: Tor Maj 26, 2009 11:41 pm Naslov sporočila: |
|
|
klemen, si ta program od nekje skopiral, sedaj pa bi šel rad na zagovor in to predstavil kot svoje delo?
Če je odgovor DA, potem se boš moral kar sam potruditi. Mi ti ne bomo.
Če je odgovor NE, potem se izjasni kaj, kako, kje, kam, zakaj in ostalo. Par napotkov si že dobil, sedaj pa literaturo v roke in poglej, kaj vsak od teh ukazov počne. Pa si lahko narišeš Flowchart. _________________ I'm going to stand outside, so if anyone asks, I'm outstanding  |
|
Nazaj na vrh |
|
 |
klemen Član

Pridružen-a: Sre 01 Okt 2003 16:18 Prispevkov: 28 Aktiv.: 0.12 Kraj: Sežana
|
Objavljeno: Tor Maj 26, 2009 11:50 pm Naslov sporočila: |
|
|
zanima me kaj dela program v DELAY, LED_OFF, LED_ON, LED_INI, XMCHAR, XMCODE, GETMCODE, XWORD in ZNAKI.
Če bi vedel vas nebi prosil za pomoč al ni tako tle gor? |
|
Nazaj na vrh |
|
 |
. Član

Pridružen-a: Ned 19 Sep 2004 22:04 Prispevkov: 16777193 Aktiv.: 70804.19
|
Objavljeno: Tor Maj 26, 2009 11:54 pm Naslov sporočila: |
|
|
Brisana vsebina odstranjenega uporabnika. |
|
Nazaj na vrh |
|
 |
klemen Član

Pridružen-a: Sre 01 Okt 2003 16:18 Prispevkov: 28 Aktiv.: 0.12 Kraj: Sežana
|
Objavljeno: Sre Maj 27, 2009 12:04 am Naslov sporočila: |
|
|
Saj ne delate. Sam razlago bi rabil ker ne štekam kaj počne vsak program.
Če bo kdo bil prijazen in mi napisal mu bom hvaležen, če ne pa ne bo nič. |
|
Nazaj na vrh |
|
 |
MAAG Član

Pridružen-a: Čet 26 Jun 2008 14:18 Prispevkov: 178 Aktiv.: 0.86 Kraj: SG-MB
|
Objavljeno: Sre Maj 27, 2009 12:19 am Naslov sporočila: |
|
|
Priznam da "se" nimam pojma o ARM tehnologiji, vendar pa si pri prvih stirih podprogramih za katere si napisal lahko priblizno mislim kaj naj bi tam delalo .... ( DELAY( zakasnitev ), LED_OFF ( ugasni LED ), LED_ON ( prizgi LED ), LED_INI ( mogoce kaksna inicilizacija ),... ). Kot sem ze rekel, sklepam glede na ime. Veliko srece se naprej.
Pa roko na srce, saj si ze sam napisal kaj kateri podprogram dela oz. avtor tega programa, ce smo natancni.
P.S: Moram priznati, da toliko komentiranega programa pa se nisem videl kje ! _________________ Samo da se kadi  |
|
Nazaj na vrh |
|
 |
aly Član



Pridružen-a: Tor 28 Sep 2004 14:51 Prispevkov: 9407 Aktiv.: 39.70 Kraj: Kranj - struževo
|
Objavljeno: Sre Maj 27, 2009 10:47 am Naslov sporočila: |
|
|
klemen je napisal/a: |
Če bi vedel vas nebi prosil za pomoč al ni tako tle gor?
...
Saj ne delate. Sam razlago bi rabil ker ne štekam kaj počne vsak program.
Če bo kdo bil prijazen in mi napisal mu bom hvaležen, če ne pa ne bo nič. |
bla bla bla...
aly je napisal/a: |
klemen, si ta program od nekje skopiral, sedaj pa bi šel rad na zagovor in to predstavil kot svoje delo? |
DA ali NE?
Točen odgovor, sicer gre tema pod ključ. _________________ I'm going to stand outside, so if anyone asks, I'm outstanding  |
|
Nazaj na vrh |
|
 |
klemen Član

Pridružen-a: Sre 01 Okt 2003 16:18 Prispevkov: 28 Aktiv.: 0.12 Kraj: Sežana
|
Objavljeno: Sre Maj 27, 2009 4:39 pm Naslov sporočila: |
|
|
Rad bi zastopil program kako dela. Če pa vi smatraste da vas zlorablam za šolo, ok dajte pod kluč. |
|
Nazaj na vrh |
|
 |
|
|
Ne, ne moreš dodajati novih tem v tem forumu Ne, ne moreš odgovarjati na teme v tem forumu Ne, ne moreš urejati svojih prispevkov v tem forumu Ne, ne moreš brisati svojih prispevkov v tem forumu Ne ne moreš glasovati v anketi v tem forumu Ne, ne moreš pripeti datotek v tem forumu Ne, ne moreš povleči datotek v tem forumu
|
Uptime: 495 dni
Powered by phpBB © 2001, 2005 phpBB Group
|