// Podane so samo dodane spremenljivke, glavni program in podprogrami

    // SysTick Timer definitions
.equ    SCS_BASE,0xe000e000
.equ    SCS_SYST_CSR,0x10// Control/Status register
.equ    SCS_SYST_RVR,0x14// Value to countdown from
.equ    SCS_SYST_CVR,0x18// Current value

.equ SYSTICK_RELOAD_1MS, 63999  //1 msec at 64MHz ...

        bl INIT_IO
        bl INIT_TC

loop:

        bl LED_ON

        mov r0,#500
//        bl  DELAY
        bl DELAYTC

        bl LED_OFF

        mov r0,#500
//        bl  DELAY
        bl DELAYTC


        b  loop

__end: b __end


INIT_TC:
  push {r0, r1, lr}
ldr r1, =SCS_BASE

ldr r0, =SYSTICK_RELOAD_1MS
str r0, [r1, #SCS_SYST_RVR]

mov r0, #0
str r0, [r1, #SCS_SYST_CVR]

mov r0, #0b101
str r0, [r1, #SCS_SYST_CSR]

  pop {r0, r1, pc}

// Delay with internal timer based loop approx. r0 x ms
DELAYTC:
    push {r1, r2, lr}
    ldr r1, =SCS_BASE

LOOPTC: ldr r2, [r1, #SCS_SYST_CSR]
tst r2, #0x10000  // COUNT_FLAG=1?
beq LOOPTC

      subs r0, r0, #1
    bne LOOPTC

    pop {r1, r2, pc}

마지막 수정됨: 월요일, 11 12월 2023, 12:03 PM