微處理器 - NXP LPC2103 - Assembly - LED



參考資料:
https://www.keil.com/dd/docs/datashts/philips/user_manual_lpc2101_2102_2103.pdf

暫存器


main.s

    .equ IODIR, 0xe0028008
    .equ IOCLR, 0xe002800c
    .equ IOSET, 0xe0028004

    .text
    .align 2
    .global _start
_start:    b reset
_undef:    b .
_swi:      b .
_pabort:   b .
_dabort:   b .
_reserved: b .
_irq:      b .
_fiq:      b .
 
reset:
    ldr r0, =IODIR
    ldr r1, =(1 << 22)
    str r1, [r0]
loop:
    ldr r0, =IOCLR
    ldr r1, =(1 << 22)
    str r1, [r0]
    ldr r4, =50000
1:
    nop
    subs r4, r4, #1
    bne 1b
    ldr r0, =IOSET
    ldr r1, =(1 << 22)
    str r1, [r0]
    ldr r4, =50000
1:
    nop
    subs r4, r4, #1
    bne 1b
    b loop
    .end

main.ld

MEMORY {
    FLASH : ORIGIN = 0, LENGTH = 32K
}

SECTIONS {
    text : {
        *(.text)
    } > FLASH
}

Makefile

all:
	arm-none-eabi-as -mcpu=arm7 -o main.o main.s
	arm-none-eabi-ld -T main.ld -o main.elf main.o
	arm-none-eabi-objcopy -O ihex main.elf main.ihx
	packihx main.ihx > main.hex

flash:
	sudo lpc21isp -wipe -control  -verify -debug2 ./main.hex /dev/ttyUSB0 9600 12000

clean:
	rm -rf main.ihx main.hex main.o main.elf

編譯、燒錄

$ make
    arm-none-eabi-as -ggdb -mcpu=arm7 -o main.o main.s
    arm-none-eabi-ld -T main.ld -o main.elf main.o
    arm-none-eabi-objcopy -O ihex main.elf main.ihx
    packihx main.ihx > main.hex
    packihx: read 10 lines, wrote 10: OK.

$ make flash
    sudo lpc21isp -wipe -control  -verify -debug2 ./main.hex /dev/ttyUSB0 9600 12000
    Verify after copy RAM to Flash.
    lpc21isp version 1.97
    File ./main.hex:
        loaded...
        converted to binary format...
        image size : 136
    Image size : 136
    Synchronizing (ESC to abort). OK
    Read bootcode version: 21
    2
    Read part ID: LPC2103, 32 kiB FLASH / 8 kiB SRAM (0x0004FF11)
    Will start programming at Sector 1 if possible, and conclude with Sector 0 to ensure that checksum is written last.
    Wiping Device. OK
    Sector 0: ......
    Download Finished and Verified correct... taking 1 seconds
    Now launching the brand new code

完成