从汇编跳入C语言,我们需要设置一下堆栈,才能正常使用。
除此之外,硬件上还有一些东西需要初始化一下。
1.关闭看门狗
2.初始化时钟
3.初始化内存
然后才是初始化堆栈。
我们设置为Nand启动,开机会把前4k拷贝到片内内存SRAM中运行。
如果是NOR启动,直接就在Nor上运行了,NOR不太清楚原理就先放弃。
那么我们
1.关闭看门狗,默认居然是开的
2.时钟启动的时候是40M,我们先不管他了
3.据说SDRAM不需要初始化,SRAM应该也不需要我们做什么吧
4.初始化堆栈
├── c_led
│ ├── led_on_c.c
│ └── Makefile
├── startc.S
.text
.global _start
_start:
//1.关闭看门狗
ldr r0,=0x53000000
mov r1,#0x0
str r1,[r0]
//2.初始化时钟
//3.初始化SDRAM
//4.给C程序准备堆栈
ldr sp,=1024*4
//跳入C main()
bl main
HALT:
b HALT
Makefile:
#define GPBCON (*(volatile unsigned long *)0x56000050)
#define GPBDAT (*(volatile unsigned long *)0x56000054)
int main()
{
GPBCON = 0x00000100; // 设置GPB4为输出口, 位[8:7]=0b01
GPBDAT = 0x00000000; // GPB4输出0,LED1点亮
return 0;
}