从零开始的LED灯(基于嵌入式开发S3C2440)

从零开始的LED灯(基于嵌入式开发S3C2440)


首先我们使用的是TQ2440开发板,嵌入式开发和单片机开发有些不一样,对于初学者来说,硬要将嵌入式的裸机开

说成单片机开发,我觉得是不当的,首先,大家都玩过51和STM32吧,首先他们的启动都是编译器帮你们写好了的

吧,基本不需要写Makefile,51最简单了,点亮一盏灯,只需要看原理图就可以确定,哪个引脚需要配置成高电平或

低电平最可以了,然后STM32的开发比51单片机更难的地方就是需要配置引脚的状态(上拉或者输入输出等等),

白了,ST公司帮你们把他的地址空间分配成一个个寄存器,你需要操作上层的东西就可以了。


但是,嵌入式领域,没有任何人帮助你完全这些东西,甚至你需要从汇编开始写起启动代码,但是你需要知道一点点

汇编的代码。


1、代码1:点亮一盏LED灯


由上图可以知道LED的点亮需要引脚输出低电平就可以了。


相关的代码:

.text
.global _start
_start:
			LDR  R0,=0x56000010  @ GPBCON=0x560000010, 就是  
								 //需要修改的GPIO的引脚GPB5

			mov  R1,#0x00000400  //?0001 1001 0000?GPB2:输出引脚
							     //GPB3:TOUT3 GPB4:输出引脚
			STR  R1,[R0]         //把 R0地址写入R1的内容

			LDR  R0,=0x56000014  //后面的道理也是同一样的
			mov  R1,#0x00000000

			STR  R1,[R0]

MAIN_LOOP:
			B    MAIN_LOOP

为何是0x56000010和0x56000014,我可以肯定的是STM32不会让你操作地址,很少的地方使用指针和结构体和链表

的东西,但是公司里面写的代码全部都是这些C语言。



根据原理图可以看到那些地方需要使用到那些寄存器,然后可以通过芯片手册查找到相应的代码。


2、代码2;使用C语言学习使用

init.s

.text
.global _start
_start:


				ldr   r0,=0x53000000    //看门狗的寄存器的地址
				mov   r1,#0x0
				str   r1,[r0]           //如果不进行硬件的初始化,那么看门狗会一直复位

				ldr   sp,=1024*4        //设置堆栈,注意不能大于4K,因为片内的内存只有4錕

				bl    main
halt_loop:
				b     halt_loop

main.c

#define GPBCON      (*(volatile unsigned long *)0x56000010)   //加上关键字volatile的话,那么就会不断的检查这个地址的
                                                              //内容是否总是检查
#define GPBDAT      (*(volatile unsigned long *)0x56000014)

int main()
{
   GPBCON = 0x00000400;    //设置邋錑PB5为输出口,位[11:10]=0b01
   GPBDAT = 0x0;           //邋錑PB5输出0就是点亮一盏灯

   return 0;

}







  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值