;===========================================================================

; Lab_2_1_student.s - Template for DAT Lab 2_1
;
; Description   : A more complete template for Lab 2_1

; Reference(s)  : ARM IAR Assembler Reference Guide

; Course        : Datorteknik (DAT) DT4009
;
; Authors       : Süleyman Savas
;
;
;===========================================================================

        NAME    main
        PUBLIC  main
        SECTION .text : CODE (2)
        THUMB
        
;===========================================================================

; TODO: Find and add the correct addresses, 
; Check sam3x datasheet - chapter 30 to find the addresses.
PIOA_WPMR EQU  0x400E0EE4       ; Write Protect Mode Register

PIOA_PER  EQU  0x400E0E00      ; PIO Enable Register
PIOA_ODR  EQU  0x400E0E14      ; Output Disable Register
PIOA_IDR  EQU  0x400E0E44      ; Interrupt Disable Register  
PIOA_PUER EQU  0x400E0E64      ; Pull Up Enable Register
PIOA_PDSR EQU  0x400E0E3C      ; Pin Data Status Register

; C port - (leds)
PIOC_WPMR EQU  0x400E12E4       ; Write Protect Mode Register

PIOC_PER  EQU   0x400E1200     ; PIO Enable Register - Arduino Due
PIOC_OER  EQU   0x400E1210     ; Output Enable Register
PIOC_SODR EQU   0x400E1230     ; Set Output Data Register
PIOC_PUDR EQU   0x400E1260     ; Pull Up Disable Register
PIOC_CODR EQU   0x400E1234     ; Clear Output Data Register

; PMC
PMC_WPMR  EQU   0x400E06E4      ; PMC Write Protect Mode Register

PMC_PCER  EQU   0x400E0610      ; Peripheral Clock Enable Register 0
PMC_PCDR  EQU   0x400E0614      ; Peripheral Clock Disable Register 0
PMC_PCSR  EQU   0x400E0618      ; Peripheral Clock Status Register 0

;===========================================================================

; Initialization of Peripheral Clock
main      LDR   R0,=PMC_PCER
          LDR   R1,=(5 << 11)  ; Peripheral Identifier: bit11=PIOA, bit13=PIOC 
          STR   R1,[R0]
          MOV R6, #0
          
;===========================================================================
; Initialization InPort  
; TODO: Write your code here

          LDR R0,=PIOA_PER
          MOV R1,#0xFFFFFFFF
          STR R1,[R0]
          
          LDR R0,=PIOA_ODR
          MOV R1,#0xFFFFFFFF
          STR R1,[R0]
          
          LDR R0,=PIOA_IDR
          MOV R1,#0xFFFFFFFF
          STR R1,[R0]
          
          LDR R0,=PIOA_PUER
          MOV R1,#0xFFFFFFFF
          STR R1,[R0]
                    
;===========================================================================
; Initialization OutPort
; TODO: Write your code here

          LDR R0,=PIOC_PER
          MOV R1,#0xFFFFFFFF
          STR R1,[R0]
          
          LDR R0,=PIOC_OER
          MOV R1,#0xFFFFFFFF
          STR R1,[R0]
          
          LDR R0,=PIOC_PUDR
          MOV R1,#0xFFFFFFFF
          STR R1,[R0]

; Huvudprogram ------------------------------------- 

ASCII_a    EQU 65
ASCII_z    EQU 90
diff       EQU 32

           LDR R0, =TEXT
start   
           LDR R1,[R0]
           CMP R1, #0
           BEQ EXIT
           CMP R1, #ASCII_a
           BLT replace
           CMP R1, #ASCII_z
           BGT replace
          
           ADD R0, R0, #diff  ;gör om till små
           STR R1, [R0]
replace    ADD R0, R0, #1
           B start        
           

EXIT       B EXIT

TEXT DCB "Dettat" ; Lägger automatiskt på NULL på slutet

                 END