|
大家好!相同通过烧写简单的DM365汇编代码到spi flash尝试DM365 从spi启动,具体的汇编代码如下:
.global __stack
__stack: .section ".stack"
.sect ".text:.start"
.global __STACK_SIZE
.global main
.global _start
_start:
/* set the cpu to SVC32 mode */
mrs r0,cpsr
bic r0,r0,#0x1f
orr r0,r0,#0xd3
msr cpsr,r0
stack_setup:
/* Set up the stack */
ldr r0, stackptr
ldr r1, stacksize
add r0, r0, r1
sub sp, r0, #4
bic sp, sp, #7
/*ledlights light 2s and close 2s*/
loop:
/*设置gpio 71为输出*/
ldr r0,=0x01C67060
ldr r1,[r0]
and r1,r1,#0xffffff7f
str r1,[r0]
/*让GPIO71输出高电平*/
ldr r0,=0x01C67068
ldr r1,[r0]
orr r1,r1,#0x80
str r1,[r0]
/*延时一段时间*/
bl DELAY
/*让GPIO71输出低电平*/
ldr r0,=0x01C67068
ldr r1,[r0]
and r1,r1,#0xffffff7f
str r1,[r0]
/*延时一段时间*/
bl DELAY
/*跳转到 GPIO 71输出高电平*/
bl loop
DELAY:
MOV R0,#0xff
MOV R2,#0xff
D1:
SUB R1,R0,#1
MOV R0,R1
D2:
SUB R3,R2,#1
MOV R2,R3
TST R3,#0xff
BNE D2
TST R1,#0xff
BNE D1
mov pc,lr
/* Load the Kernel entry point address */
/* ldr r0, main_entry*/
/* Jump to Entry Point */
/*mov pc, r0*/
stackptr:
.word __stack
stacksize:
.word 0x800
/*
main_entry:
.word main
*/
通过命令行进行编译
arm-none-linux-gnueabi-gcc -g -c -o start.o start.S
arm-none-linux-gnueabi-ld -Ttext 0x00000000 -g start.o -o start_elf
arm-none-linux-gnueabi-objcopy -O binary -S start_elf start.bin
不知道为什么最后获得的start.bin文件大小为0 ???
|
|