ARM9-mini2440之点亮第一颗led

  1. 本文记录mini2440点亮led的操作流程;
  2. 点亮一颗led代码实现方式:汇编和C;
  3. 进行了一些功能扩展实验;

基本思路

  1. 看原理图确定控制led的引脚;
  2. 看主芯片手册确定如何控制引脚;
  3. 编写程序;
  4. 编译;
  5. 烧录bin文件;

看原理图

mini2440主芯片引脚图:
[学习笔记]ARM9-mini2440之点亮第一颗LED

led电路图:
[学习笔记]ARM9-mini2440之点亮第一颗LED
由于只要点亮一颗led,因此选择nLED_1。由原理图可知:nLED_1接线对应主芯片的GPB5引脚,且当GPB5输出低电平时,nLED_1会被点亮。而引脚则由寄存器控制,因此只要对GPB5引脚相关寄存器进行设置即可。

看芯片手册

S3C2440端口B相关寄存器:
[学习笔记]ARM9-mini2440之点亮第一颗LED
由上图可知,S3C2440的I/O口B相关的寄存器有:

  1. 控制寄存器
  2. 数据寄存器
  3. 上拉寄存器

S3C2440端口B控制寄存器:
[学习笔记]ARM9-mini2440之点亮第一颗LED
由上图可知,B端口的控制寄存器可以将每个引脚配置为四种模式:

  1. 00输入模式
  2. 01输出模式
  3. 10功能扩展模式
  4. 11保留模式

若要使GPB5引脚输出低电平,须将GPB5配置为输出模式,即将Bit[11:10]配置为01。
由图“S3C2440端口B相关寄存器”可知,GPBCON的地址为0x56000010,因此将0x400写入地址0x56000010即可。

S3C2440端口B数据寄存器:
[学习笔记]ARM9-mini2440之点亮第一颗LED
由上图可知,引脚的状态与对应的位的状态相同,因而可以通过配置GPBDAT每一位的状态从而配置引脚的状态。
将数据寄存器的bit5配置为0即可把引脚GPB5配置为低电平。

S3C2440端口B上拉寄存器
[学习笔记]ARM9-mini2440之点亮第一颗LED
当引脚的驱动能力不足时,需要配置上拉寄存器。由于引脚输出低电平即可点亮led,因此上拉寄存器无需配置。

总结:
以上可知,配置GPB5引脚输出低电平需要两个步骤:

  1. 配置控制寄存器GPBCON的Bit[11:10]=01,使GPB5引脚为输出模式;

  2. 配置数据寄存器GPBDAT的Bit5=0,使GPB5引脚输出低电平;

编写代码

完整代码分为两个部分,一个是汇编文件,一个是c文件。
start.S

.text
.global _start

_start:

	 /* 设置内存: sp 栈*/
	 ldr sp, =4096		/* nand启动 */
	//ldr sp, =0x40000000+4096 	 /* nor启动 */  	

	/* 调用main */
	bl main

halt:
	b halt

其中汇编文件中:

	 /* 设置内存: sp 栈*/
	 ldr sp, =4096		/* nand启动 */
	 //ldr sp, =0x40000000+4096 	 /* nor启动 */  

关于设置栈以及S3C2440启动方式的问题,将会在另一篇文章专门解释

led.c

int main()
{
	unsigned int *p_con =(unsigned int *) 0x56000010;
	unsigned int *p_dat =(unsigned int *) 0x56000014;

	/* 配置GPB5引脚为输出模式 */
	*p_con = 0x1000;

	while(1)
	{
		/* 配置GPB5引脚输出低电平*/
		*p_dat = 0;
	}

	return 0;
	
}

编译

编写Makefile:
为了编译方便,采用Makefile进行编译

all:
	arm-linux-gcc -c -o start.o start.S
	arm-linux-gcc -c -o led.o led.c
	arm-linux-ld -Ttext 0 start.o led.o -o led.elf
	arm-linux-objcopy -O binary -S led.elf led.bin
	arm-linux-objdump -D led.elf > led.dis
	
clean:
	rm *.dis *.o *.elf *bin	

makefile编写完成之后,将项目文件夹通过FileZilla上传至Ubuntu虚拟机,使用MobaXterm远程登录Ubuntu,进入终端。
进入目标文件夹后,使用make命令进行编译:
[学习笔记]ARM9-mini2440之点亮第一颗LED
编译成功。ls一下,查看生成的文件
[学习笔记]ARM9-mini2440之点亮第一颗LED
生成了bin文件,确认编译成功。
再将生成的bin文件通过FileZilla下载至本地,开始烧录程序。

这里使用的Ubuntu是韦东山老师的百问网团队制作好的系统,使用的交叉编译工具链是:arm-linux-gcc-3.4.5版本

烧录程序

使用工具: oflash(百问网制作)

  1. 进入windows下的命令行界面:
  2. 进入目标目录
  3. 输入:
	oflash led.c

显示如下界面:

[学习笔记]ARM9-mini2440之点亮第一颗LED

  1. 选择 0.OpenJTAG,将显示如下界面:

[学习笔记]ARM9-mini2440之点亮第一颗LED

  1. 选择 1.S3C2440,将显示如下界面:

[学习笔记]ARM9-mini2440之点亮第一颗LED

  1. 选择 0:Nand Flash prog(选择Nor Flash也可,启动时注意启动时须将开关拨至Nor启动),将显示如下界面:

[学习笔记]ARM9-mini2440之点亮第一颗LED

  1. 依然选择 0:Nand Flash Program,出现如下界面,表明烧录成功:

[学习笔记]ARM9-mini2440之点亮第一颗LED

相关文章:

  • 2021-05-07
  • 2021-08-24
  • 2021-11-22
  • 2021-04-06
  • 2021-11-03
  • 2021-12-28
  • 2018-08-21
  • 2021-12-13
猜你喜欢
  • 2021-12-16
  • 2021-12-02
  • 2021-11-17
  • 2021-12-31
  • 2021-09-27
  • 2021-10-04
  • 2021-10-26
相关资源
相似解决方案