LPC812 >> Assembly
LED
參考資訊:
1. pdf
2. LPC810-ASM
Register
main.S
.cpu cortex-m0 .thumb .equ GPIO_DIR0, 0xa0002000 .equ GPIO_PIN0, 0xa0002100 .equ GPIO_SET0, 0xa0002200 .equ GPIO_CLR0, 0xa0002280 .equ BIT1, 1 .equ BIT7, 7 .equ BIT16, 16 .equ BIT17, 17 .thumb_func .global _start _start: .word 0x10000400 @ stacktop .word reset @ reset .word hang @ nmi .word hang @ hardfault .word hang @ reserved .word hang @ reserved .word hang @ reserved .word hang @ reserved .word hang @ reserved .word hang @ reserved .word hang @ reserved .word hang @ svcall .word hang @ reserved .word hang @ reserved .word hang @ pendsv .word hang @ systick .thumb_func reset: ldr r0, =GPIO_DIR0 ldr r1, =((1 << BIT7) | (1 << BIT16) | (1 << BIT17)) str r1, [r0] loop: ldr r0, =GPIO_SET0 ldr r1, =((1 << BIT7) | (1 << BIT16) | (1 << BIT17)) str r1, [r0] bl delay ldr r0, =GPIO_CLR0 ldr r1, =((1 << BIT7) | (1 << BIT16) | (1 << BIT17)) str r1, [r0] bl delay b loop delay: push {lr} ldr r0, =3000000 1: nop sub r0, #1 bne 1b pop {pc} hang: b . .end
main.ld
OUTPUT_FORMAT("elf32-littlearm", "elf32-bigarm", "elf32-littlearm") OUTPUT_ARCH(arm) MEMORY { rom (rx) : ORIGIN = 0x00000000, LENGTH = 0x00001000 ram (rwx) : ORIGIN = 0x10000000, LENGTH = 0x00000400 } SECTIONS { . = 0x0; .text : { *(.text*) } > rom .rodata : { *(.rodata*) } > rom .bss : { *(.bss*) } > ram . = ALIGN(8); }
編譯
$ arm-none-eabi-as -mcpu=cortex-m0 -mthumb main.S -o main.o $ arm-none-eabi-ld -o main.elf -T main.ld main.o $ arm-none-eabi-objcopy main.elf main.bin -O binary $ arm-none-eabi-objcopy main.elf main.hex -O ihex
燒錄步驟:
1. 連接USB與PC
2. P0_12接到GND
3. 按一下RST按鍵
4. 鬆開P0_12
5. 執行如下命令
$ sudo lpc21isp -wipe -control -verify -debug2 ./main.hex /dev/ttyUSB0 9600 12000
完成