S5PV210-NoOS-一步一步点亮LED

LED特性

电流从LED正流向LED负,LED就发光,没有电流就不亮。

原理图

S5PV210-NoOS-一步一步点亮LED_第1张图片

最下面一颗是电源指示灯,上面三个普通IO口。LED4为PWM调节,可以用来调亮度。

如何点亮LED?

把GPJ0_3写成低电平,即可点亮LED1.

数据手册和寄存器分析

1、GPIO概念的引用
GPIO:general purpose input output,能用输入输出

GPIO就是芯片的引脚,作为GPIO的这类引脚,他的功能和特点是可以被编程控制它的输出电平、输入、输出模式等。

2、GPIO数据手册部分分析

当我们想要通过编程操控GPIO来操控LED时,首先通读一下数据手册中有关于GPIO的部分。这部分在数据手册的section2.2中。

3、GPIO相关的寄存器介绍 

软件操作硬件的接口是:寄存器。

我们当前要操作的硬件是LED,但是LED是通过GPIO间接控制,所以,当时我们实际要操作的设备是soc的GPIO,要操作这些GPIO,必须通过设置它们的寄存器。

查阅数据手册可知GPJ0相关的寄存器有

GPJ0CON:GPJ0控制寄存器,用来配置各引脚的工作模式

GPJ0DAT:当配置成input/output模式时,寄存器的相应位和引脚的电平高低相对应。

GPJ0PUD:控制引脚的内部弱上拉下拉。

GPJ0DRV:driver寄存器,用来配置gpio引脚的驱动能力

GPJ0PUDPDN:上下拉寄存器

 

注:在驱动 LED点亮时,应将GPIO配置成output模式。

实际上真正操控LWD的主要是GPJ0CON, GPJ0DAT。

如何点亮LED?

1、操作GPJ0con寄存器,配置成输出模式

2、操作GPJ0DAT寄存器,把IO配置成低电平。

从零开始写汇编代码

1、GPxCON/GPxDAT寄存器分析

GPJ0端口一共有8个引脚,分别记作:GPJ0_0到GPJ0_7,相关寄存器就是GPJ0CON和GPJ0DAT,GPJ0CON寄存器中设置8个引脚的工作模式(32/8=4,每个引脚可以分到4位,比如GPJ0_0对应的bit位为bit0-bit3,GPJ0_3对应的bit位为bit12-bit15)。工作方法是:给相应的寄存器位写入相应的值,该引脚硬件就会按照相应的模式去工作。比如给bit12-bit15写入0b0001,GPJ0_3就成为输出模式了。

2、怎么写代码操作寄存器

硬件接法和引脚:GPJ0_3 GPJ0_4 GPJ0_5低电平亮/高电平灭

GPJ0CON(0xE0200240)寄存器和GPJ0data(0xE0200244)寄存器

makefile等配合

3、点亮LED代码:



_start:
	// 第一步:把0x11111111写入0xE0200240(GPJ0CON)位置
	ldr r0, =0x11111111			// 从后面的=可以看出用的是ldr伪指令,因为需要编译器来判断这个数
	ldr r1, =0xE0200240			// 是合法立即数还是非法立即数。一般写代码都用ldr伪指令
	str r0, [r1]				// 寄存器间接寻址。功能是把r0中的数写入到r1中的数为地址的内存中去

	// 第二步:把0x0写入0xE0200244(GPJ0DAT)位置
	ldr r0, =0x0
	ldr r1, =0xE0200244
	str r0, [r1]				// 把0写入到GPJ0DAT寄存器中,引脚即输出低电平,LED点亮

flag:							// 这两行写了一个死循环。因为裸机程序是直接在CPU上运行的,CPU会
	b flag						// 逐行运行裸机程序直到CPU断电关机。如果我们的程序所有的代码都
								// 执行完了CPU就会跑飞(跑飞以后是未定义的,所以千万不能让CPU
								// 跑飞),不让CPU跑飞的办法就是在我们整个程序执行完后添加死循环

 

你可能感兴趣的:(S5PV210-NoOS-一步一步点亮LED)