Advertisement
Guest User

Untitled

a guest
May 29th, 2017
81
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
ARM 2.94 KB | None | 0 0
  1.     ORG 0
  2.     B GLAVNI ;skok na glavni program
  3.    
  4.     ORG 18
  5.     B PREKIDNI ;skok na prekidni potprogram
  6.    
  7. PREKIDNI    STMDA R13!,{R0,R1,R2,R3,R14} ;spremanje konteksta na pocetku
  8.                     ;obrati pozornost da spremamo i R14 jer imamo 'gnjezdenje potprograma'
  9.     LDR R0,RTC ;ucitavamo adresu RTC-a
  10.     STR R1,[R0,#8] ;dojava prihvata prekida za RTC (saljemo bilo sto)
  11.     MOV R1,#0
  12.     STR R1,[R0,#0C] ;resetiranje brojila na 0
  13.     BL ISPISI_ZNAKOVE ;skok na potprogram za ispis znakova
  14.     LDMIB R13!,{R0,R1,R2,R3,R14} ;obnova konteksta na kraju
  15.     SUBS PC,R14,#4 ;povratak iz prekidnog potprograma
  16.    
  17. GLAVNI
  18.     ;GPIO necemo trebati inicijalizirat, jer je spojen na B vrata, svi bitovi su inicijalno izlazni sto nam odgovara
  19.     MOV R13,#1<12 ;inicijalizacija stoga
  20.     LDR R1,RTC ;ucitavanje adrese RTC-a
  21.     MOV R0,#1
  22.     MOV R0,R0,LSL #8 ;256 = 2^8, jedinicu koja je u registru 8 puta shift-amo u lijevo
  23.     STR R0,[R1,#4] ;punimo registar usporedbe
  24.     MOV R0,#1
  25.     STR R0,[R1,#10] ;omogucavanje prekida za RTC
  26.    
  27.     MRS R0,CPSR ;procitaj CPSR u R0
  28.     BIC R0,R0,#80 ;omoguci IRQ prekide
  29.     MSR CPSR_c,R0 ;pohrani R0 u CPSR
  30.    
  31. PETLJA B PETLJA ;beskonacna petlja ('koristan posao')
  32.    
  33.  
  34. ISPISI_ZNAKOVE
  35.     STMDA R13!,{R4,R5,R6,R7,R14} ;spremanje konteksta na pocetku
  36.     LDR R4,GPIO ;ucitavamo adresu GPIO-a
  37.     MOV R5,#0D ;brisanje trenutnog stanja internog registra
  38.     BL LCDWR
  39.     MOV R5,#3E ;znak '>', upisujemo ga 3 puta
  40.     BL LCDWR
  41.     BL LCDWR
  42.     BL LCDWR
  43.     LDR R6,INDEX ;ucitavanje odmaka od pocetka bloka
  44. POV MOV R7,#4<8 ;upisivanje broja 400, tu se nalazi nas blok podataka, ovdje cemo se vratiti ako smo dosli do posljednjeg znaka
  45.     ;kako bi ponovno ucitali prvi znak iz niza
  46.     ADD R7,R6,R7 ;izracunavanje adrese naseg znaka
  47.     LDRB R5,[R7] ;ucitavanje znaka za ispis
  48.     CMP R5,#0
  49.     MOVEQ R6,#0 ;provjeravamo da li se radi o posljednjem znaku, u tom slucaju resetiramo INDEX
  50.     BEQ POV
  51.     BL LCDWR
  52.     ADD R6,R6,#1 ;uvecavamo odmak
  53.     STR R6,INDEX ;spremamo uvecanu verziju odmaka
  54.     MOV R5,#3C ;znak '<', upisujemo ga 3 puta
  55.     BL LCDWR
  56.     BL LCDWR
  57.     BL LCDWR
  58.     MOV R5,#0A ;ispis trenutnog stanja internog registra
  59.     BL LCDWR
  60. KRAJ    LDMIB R13!,{R4,R5,R6,R7,R14} ;obnova konteksta na kraju
  61.     MOV PC,LR ;povratak iz potprograma
  62.  
  63.  
  64. ;registar R4 -> adresa GPIO
  65. ;registar R5 -> znak za ispis
  66. ;ovaj potprogram ce svoje parametre primat preko dva gore navedena registra
  67. LCDWR   STMDA R13!,{R5} ;spremanje konteksta
  68.    
  69.     AND R5,R5,#7F ;postavljanje vodeceg bita u nulu
  70.     STR R5,[R4,#4] ;slanje znaka na izlazna vrata
  71.    
  72.     ORR R5,R5,#80 ;postavljanje vodeceg bita u jedinicu
  73.     STR R5,[R4,#4] ;kreiramo impuls na izlaznim vratima*
  74.    
  75.     AND R5,R5,#7F ;postavljanje vodeceg bita u nulu
  76.     STR R5,[R4,#4] ;*pomocu vodeceg bita
  77.    
  78.     LDMIB R13!,{R5} ;obnavljanje konteksta
  79.     MOV PC,LR ;izlazak iz prekidnog potprograma
  80.    
  81.     ORG 300 ;adresa od GPIO
  82.     GPIO    DW FFFFFF00
  83.     ORG 320 ;adresa od RTC
  84.     RTC     DW FFFFFE00
  85.     ORG 340 ;adresa od varijable INDEX
  86.     INDEX       DW 0
  87.     ORG 400 ;adresa naseg bloka podataka
  88.     DB 49,6e,74,65,72,6e,61,74,69,6f,6e,61,6c,69,73,61,74,69,6f,6e,0
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement