Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ORG 0x0
- B INIT
- ORG 0x18
- B PREKID
- INIT MSR CPSR, #0b10010010;prelazak u nacin rada IRQ
- MOV SP, #0xFC00;inicijalizacija IRQ stoga
- MSR CPSR, #0b10010011;prelazak u SVC način rada
- MOV SP, #0x10000;inicijalizacija SVC stoga
- ;inicijalizacija DMAC-a
- LDR R0, DMAC;dohvaćanje adrese DMAC-a
- LDR R1, IU;
- STR R1, [R0, #16];source
- MOV R1, #M1
- STR R1, [R0, #20];destination
- LDR R1, SIZE ;blok od 4 podataka i 16 podataka
- STR R1, [R0, #24]
- MOV R1, #0b11100110; IE=1, DRE=1, TW=10, SI=0, DI = 1, DRI=10
- STR R1, [R0, #28];spremi config
- ;inicijalizacija vanjske jedinice
- LDR R1, IU
- MOV R2, #32
- STR R2, [R1, #4]
- ;omogućavanje IRQ prekida
- MRS R1, CPSR;
- BIC R1, R1, #0x80
- MSR CPSR, R1;
- ;pokreni DMA
- MOV R1, #1
- STR R1, [R0, #0]
- GLAVNI MOV R11, #11;
- LOOP SUBS R11, R11, #1
- BEQ LOOP
- CEKAJ LDR R1, COUNT
- CMP R1, #2; ako je završen drugi prijenos završi program
- BNE CEKAJ ; ako DMA-prijenos još traje => čekaj
- KRAJ SWI 0x123456
- PREKID STMFD SP!, {R0, R1, LR}
- LDR R0, DMAC
- STR R0, [R0, #4];obriši stanje spremnosti
- LDR R1, COUNT;dohvati brojač prekida
- CMP R1, #0;usporedi sa 0 (ovo je prvi prekid)
- BLEQ ZAMJENA;ako jest reinicijaliziraj DMAC
- ADD R1, R1, #1
- STR R1, COUNT;povećaj brojač prekida za 1
- LDMFD SP!, {R0, R1, LR}
- SUBS PC, LR, #4
- ZAMJENA STMFD SP!, {R1};prima adresu DMAC-a preko R0
- MOV R1, #M2
- STR R1, [R0, #20]
- ;pokreni DMA
- MOV R1, #1
- STR R1, [R0, #0]
- LDMFD SP!, {R1}
- MOV PC, LR
- DMAC DW 0x00FF0000;adresa DMACA
- IU DW 0xFFFF0D00;adresa ulazne jedinice
- OU DW 0xFFFF0C00;adresa izlazne jedinice
- M1 DW 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
- M2 DW 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
- COUNT DB 0;brojač prijenosa
- SIZE DW 0x2010
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement