@ hello.s
.cpu cortex-m3
.code 16
@ minimum vector table
.word 0x20010000 @ stack pointer
.word reset + 1 @ reset vector
.word endless_loop @ interrupt handler
.word endless_loop @ hard fault handler
reset: @ reset vector
@ spin up GPIO Port F
SYSCTL_RCGC2 = 0x400FE108 @ run mode clock gating control register 2
RCGC2_GPIOF = 1<<5 @ bit position for GPIO Port F clock gating control
ldr r0, =SYSCTL_RCGC2 @ load system control (RCGC2) register address in r0
ldr r1, =RCGC2_GPIOF @ load data to write in r1
str r1, [r0] @ 0x400FE108 <= 0x20
GPIO_PORTF = 0x40025000 @ GPIO Port F base address
GPIODATA = 0x0000 @ GPIO data register offset
GPIODIR = 0x0400 @ GPIO data direction register offset
GPIODEN = 0x051c @ GPIO digital enable register offset
PF0 = 1<<0 @ bit position for PF0
GPIO_MASK = PF0<<2 @ bit mask
@ configure Port F, bit 0 as output
ldr r0, =GPIO_PORTF + GPIODIR @ load GPIODIR for Port F register address in r0
ldr r1, =PF0 @ load data to write in r1
str r1, [r0] @ store data in r1 to address pointed to by r0
@ enable digital output for Port F, bit 0
ldr r0, =GPIO_PORTF + GPIODEN @ load GPIODEN for Port F register address in r0
ldr r1, =PF0 @ load data to write in r1
str r1, [r0]
@ prepare for loop:
@ load r0 with GPIO data register address (plus mask bits) for Port F
@ load r1 with bit pattern to turn LED on
@ load r2 with bit pattern to turn LED off
ldr r0, =GPIO_PORTF + GPIODATA + GPIO_MASK @ load GPIODATA for Port F register address in r0, including mask bits
ldr r1, =PF0 @ load data to write in r1
ldr r2, =0x00
loop:
str r1, [r0] @ turn STATUS LED on
@ a short delay
ldr r3, =0x100000
d1: sub r3, r3, #1
bne d1
str r2, [r0] @ turn STATUS LED off
@ another short delay
ldr r3, =0x100000
d2: sub r3, r3, #1
bne d2
b loop @ do it again & again
endless_loop:
b . @ loop forever & ever
.end @ [end-of-file]
|