发现问题:
前面我们编写 LED 流水灯 裸机驱动,需要添加了 启动代码 (杨铸 startup.s) ,也就是初始化把 开发板带到 C 语言环境(也就是 xmain 函数)
1 ; 2 ; MDK跑马灯实验 3 ; 4 PRESERVE8 5 AREA RESET, CODE, READONLY 6 ENTRY 7 start 8 ; close watchdog 9 ldr r0, = 0x53000000 ; 将看门狗控制寄存器地址放入r0 10 mov r1, #0 11 str r1, [r0] ; 设置看门狗控制寄存器的值为0 12 13 bl initmem ; 跳转到initmem代码段,初始化内存 14 15 IMPORT xmain ; 引入xmain.c中的xmain函数 16 ldr sp, =0x34000000 ; 调用C程序之前先初始化栈指针 17 ldr lr, =endxmain ; 设置xmain函数的返回地址 18 ldr pc, =xmain ; 跳转到C程序中的xmain函数的入口处执行 19 20 endxmain 21 ldr r0, =0x56000010 ; LED的GPIO接口配置寄存器 22 ldr r1, =0x00015400 ; GPIO配置数据 23 str r1, [r0] ; 设置GPIO 24 ldr r0, =0x56000014 ; LED控制寄存器地址 25 ldr r1, =0x000000e0 ; 全部LED亮 26 str r1,[r0] 27 loop 28 b loop ; 死循环 29 30 initmem ; 内存初始化 31 ldr r0, =0x48000000 ; 加载内存相关寄存器首地址r0 32 ldr r1, =0x48000034 ; 加载内存相关寄存器尾地址到r1 33 34 adr r2, memdata ; 将寄存器配置数据地址段首地址加载到r2 35 initmemloop 36 ldr r3, [r2], #4 ; 循环设置存寄存器 37 str r3, [r0], #4 38 teq r0, r1 39 bne initmemloop ; 循环到最后一个寄存器时退出函数 40 BX lr 41 42 memdata 43 DCD 0x22000000 ;BWSCON 44 DCD 0x00000700 ;BANKCON0 45 DCD 0x00000700 ;BANKCON1 46 DCD 0x00000700 ;BANKCON2 47 DCD 0x00000700 ;BANKCON3 48 DCD 0x00000700 ;BANKCON4 49 DCD 0x00000700 ;BANKCON5 50 DCD 0x00018005 ;BANKCON6 51 DCD 0x00018005 ;BANKCON7 52 DCD 0x008e07a3 ;REFRESH 53 DCD 0x000000b1 ;BANKSIZE 54 DCD 0x00000030 ;MRSRB6 55 DCD 0x00000030 ;MRSRB7 56 57 END