2、再次点灯
显然用汇编写代码比较困难,如何用C语言来点灯呢?
先准备个栈,如何告知ARM栈从哪里开始呢?
sp寄存器:这个存储器指定了栈的开始地址,这样就好办了!!!不过栈从哪里开始呢?还记得处理器有个内部SRAM,它的大小有4k,也就是4096byte。那我们就设置栈从4096开始往下增长吧。
如果ldr sp,=4096,那就代表是从nand启动
ldr sp,=0x40000000+4096 这个具体看硬件内存结构
设置好栈后,跳转到main函数执行
.text
.global _start
_start:
/* 设置内存: sp 栈 */
ldr sp, =4096 /* nand启动 */
// ldr sp, =0x40000000+4096 /* nor启动 */
/* 调用main */
bl main
halt:
b halt
很简单,利用指针,指向一个地址后,往该指针赋值即可。
int main()
{
unsigned int *pGPFCON = (unsigned int *)0x56000050;
unsigned int *pGPFDAT = (unsigned int *)0x56000054;
/* 配置GPF4为输出引脚 */
*pGPFCON = 0x100;
/* 设置GPF4输出0 */
*pGPFDAT = 0;
return 0;
}