asm

Download Asm

If you can't read please download the document

Upload: lieth-4

Post on 18-Aug-2015

217 views

Category:

Documents


0 download

DESCRIPTION

istructions set for arm made by my professor

TRANSCRIPT

;===========================================================================; Lab_2_1_student.s - Template for DAT Lab 2_2;; Description : A more complete template for Lab 2_2; Reference(s): ARM IAR Assembler Reference Guide; Course: Datorteknik (DAT) DT4009;; Authors : Sleyman Savas;;;===========================================================================NAMEmainPUBLICmainSECTION .text : CODE (2)THUMB;===========================================================================; TODO: Find and add the correct addresses, ; Check sam3x datasheet - chapter 30 to find the addresses.PIOA_WPMR EQU0x400E0EE4 ; Write Protect Mode RegisterPIOA_PEREQU0x400E0E00 ;0x0000 ; PIO Enable RegisterPIOA_ODREQU0x400E0E14 ;0x0014 ; Output Disable RegisterPIOA_IDREQU0x400E0E44 ;0x0044 ; Interrupt Disable RegisterPIOA_PUER EQU0x400E0E64 ;0x0064 ; Pull Up Enable RegisterPIOA_PDSR EQU0x400E0E3C ;0x003C ; Pin Data Status Register; C port - (leds)PIOC_WPMR EQU0x400E12E4 ; Write Protect Mode RegisterPIOC_PEREQU0x400E1200 ;0x0000; PIO Enable Register - Arduino DuePIOC_OEREQU0x400E1210 ;0x0010; Output Enable RegisterPIOC_SODR EQU0x400E1230 ;0x0030 ; Set Output Data RegisterPIOC_PUDR EQU0x400E1260 ;0x0060; Pull Up Disable RegisterPIOC_CODR EQU0x400E1234 ;0x0034; Clear Output Data RegisterPIOC_ODSR EQU0x400E1238; PMCPMC_WPMREQU 0x400E06E4; PMC Write Protect Mode RegisterPMC_PCEREQU 0x400E0610; Peripheral Clock Enable Register 0PMC_PCDREQU 0x400E0614; Peripheral Clock Disable Register 0PMC_PCSREQU 0x400E0618; Peripheral Clock Status Register 0;===========================================================================; Initialization of Peripheral ClockmainLDR R0,=PMC_PCERLDR R1,=(5 1:aknappBNE Vidare2LDR R7,=0x00000002;0x00000010 0000 0002BL Led;LDR R7,=1000;BL Delay_msLDR R7,=0x00000004;0x00000010 BL LedLDR R7,=0x00000008;0x00000010 BL Led;LDR R7,=1000;BL Delay_ms;===========================================================================hgra knappVidare2 BL Read_p0CMP R2, #0 ; Ej tryckt => 1:ahgra knappBNE readLDR R7,=0x8;0x00000010 0000 0002BL Led;LDR R7,=1000;BL Delay_msLDR R7,=0x4;0x00000010 BL LedLDR R7,=0x2;0x00000010 BL Led/*LDR R7,=0x000000E ;Mnstret i R7:s lgsta 3 bitar ska motsvara de tre lysdioderna.BL LedLDR R7,=1000BL Delay_ms */ /* BL Read_p0CMP R0, #0 ; Ej tryckt => 1:aBNE readLDR R7,=1000;11111111 ;1000 ;Mnstret i R7:s lgsta 3 bitar ska motsvara de tre lysdioderna. ;innehller hur lng tid (i ms) som subrutinen ska taBL Delay_ms ;stackpointer0x20008000 ;0x20007FF8*/ B read ;loopB loop Led ;den ska tnda resp. slcka lysdioderSTMFD SP!,{R2}; Istllet fr Rl skriver du de register du anvnderMOV R2,R7 ;R7 skall anvndas som inparameter till funktionen/*LDR R1,=PIOC_ODSR ; PIO PortC Output Status RegisterLDR R0,[R1]AND R0, R0,R2 ;#0x000000E ; Maska av bit 1-3*/LDR R1,=PIOC_SODR ; PIO PortC Set Output Data RegisterSTR R2,[R1] ; R0 skrivs tillbaks, ettstller nollor ; LDR R7,=1000 ; BL Delay_ms LDR R1,=PIOC_CODR ; PIO PortC Clear Output Data RegisterSTR R2,[R1] ; R0 skrivs tillbaks, nollstller ettor//EOR R0, R0,R2 ;#0xE ; Inventera bit 1-3 LDMFD SP!,{R2} ;Tnk p att spara undan de register som anvnds inuti funktionen.; Istllet fr Rl skriver du de register du anvnderBX LR DELAY_CALIB EQU 1200;22222222;1200Delay_msSTMFD SP!,{R0,R1};lr 200702EBMOV R0,R7do_delay_ms;den yttre rknar upp till det tal som r inparameterLDR R1,=DELAY_CALIBloop_ms;Den inre loopen tar precis 1 ms SUBS R1,R1,#1BNE loop_msSUBS R0,R0,#1BNE do_delay_msLDMFD SP!,{R0,R1}BX LR ;0x200702FCRead_p0 ;Subrutinen Read_p0 lser av en knapp (USR_RIGHT) p port A.STMFD SP!,{R1}LDR R1,=PIOA_PDSR LDR R0,[R1]AND R2, R0, #0x00008000 ;#0x00008000 ; bitmaska fram aktuell knapp hgra knappAND R0, R0, #0x00004000 ; vnsra knappAND R0, R0, #0x0000C000 ;BothLDMFD SP!,{R1}BX LR;===========================================================================STOP B STOPEND; Subrutin Delay_ms ----------------------------------------; Vnta ett antal ms; Inparameter: R7 - delay i ms; ---------------------------------------------------------/*DELAY_CALIB EQU 1200 ; utprovat vrde (baserat p master clock 12Mhz)Delay_msSTMFD SP!,{R0,R1}MOV R0,R7do_delay_msLDR R1,=DELAY_CALIBloop_msSUBS R1,R1,#1BNE loop_msSUBS R0,R0,#1BNE do_delay_msLDMFD SP!,{R0,R1}BX LR; ---------------------------------------------------------------------------------------------------------------------Subrutin Read_p0 ---------------------------------------; Avlsning av knapp i subrutin; Utparametrar: R0; ------------------------------------------------------Read_p0STMFD SP!,{R1}LDR R1,=PIOA_PDSRLDR R0,[R1]AND R0,R0,#0x00008000 ; bitmaska fram aktuell knappLDMFD SP!,{R1}BX LR; ------------------------------------------------------; Huvudprogram -------------------------------------readBL Read_p0CMP R0, #0 ; Ej tryckt => 1:aBNE readLDR R7,=1000BL Delay_msLoopB loop; ------------------------------------------------------------------*/