星星点灯(点亮LED灯)

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;
}

 


版权声明:本文为Jiaying888168原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。