Exynos 4412处理器流水灯LED实现代码及过程详解

1.先在厂家给的原理图中找到LED灯模块
这里写图片描述
我们可以看到一共4个led,按照共阳极的接法
如果将led的另外一段设置为低电平的时候,led两端有电位差,led亮,
如果将led的另外一段设置为高电平的时候,led两端没有电位差,led灭
如果给三极管的基极设置为高电平的时候,三级管导通,led5的两端产生电位差,led亮
如果给三极管的基极设置为低电平的时候,三级管不导通,led5的两端没有电位差,led灭

2.找管脚
可以看到
LED2管脚:GPX2_7
LED3管脚:GPX1_0
LED4管脚:GPF3_4
LED5管脚:GPF3_5
且管脚输出低电平,则LED亮

3.看芯片手册
A:芯片控制原理:
B:寄存器
LED2寄存器位GPX2_7
先找到控制寄存器GPX2CON
这里写图片描述
我们可以看到GPX2地址(0x1100 0c40)及下所有的寄存器,然后找到GPX2_7的有效位位[31:28]
此时我们用到的只有0x0=Input 以及 0x1=Output, 通过对应位的设置,可以用来设置对应管脚的输入/出模式;
这里写图片描述
我们GPX2DAT 对应地址位0x1100 0c44
如果对应管脚设置为输出模式的时候:
1) 如果对应位设置为1,则表示输出为高电平;
2) 如果对应位设置为0,则表示输出为低电平;
然后找到数据寄存器GPX2DAT

同理,找到LED3状态寄存器以及数据寄存器
状态寄存器地址: GPX1CON: 0x1100 0c20 GPX1_0:[3:0] //第3位到0位
数据寄存器地址: GPX1DAT : 0x1100 0c24

LED4:
控制寄存器:GPF3ON: 0x1140 01e0 GPF3_4:[19:16]
数据寄存器:GPF3DAT: 0x1140 01e4

LED5:
控制寄存器:GPF3ON:0x1140 01e0 GPF3_5:[23:20]
数据寄存器:GPF3DAT:0x1140 01e4

然后进入Linux系统建立名为start.S的代码:

.global _start
_start:
	//init led2,进入状态寄存器,将对应位改为可写模式
	ldr r0, =0x11000c40    //加载,另一个意思时进入这个地址
	ldr r1, [r0]           //将这个地址保存到r1寄存器
	bic r1, #0xf0000000    //GPX2_7:[31:28] 清零
	orr r1, #0x10000000    //0x1=Input 置1
	str r1, [r0]           //存储

	//init led3
	ldr r0, =0x11000c20
	ldr r1, [r0]
	bic r1, #0xf
	orr r1, #0x1
	str r1, [r0]

	//init led4
	ldr r0, =0x114001e0
	ldr r1, [r0]
	bic r1, #0xf0000
	orr r1, #0x10000
	str r1, [r0]

	//init led5
	ldr r0, =0x114001e0
	ldr r1, [r0]
	bic r1, #0xf00000
	orr r1, #0x100000
	str r1, [r0]

loop:

	//led2 on
	ldr r0, =0x11000c44    //加载GPX2_7对应的数据寄存器
	ldr r1, [r0]
	orr r1, #0x80          //1000 0000 将[31:28]对应位置1,输出高电平,led亮
	str r1, [r0]
	bl delay      //延时

	//led2 off
	ldr r1, [r0]
	bic r1, #0x80        //将[31:28]对应位清0,输出低电平,led灭
	str r1, [r0]
	bl delay

	//led3 on
	ldr r0, =0x11000c24
	ldr r1, [r0]
	orr r1, #0x1
	str r1, [r0]
	bl delay

	//led3 off
	ldr r1, [r0]
	bic r1, #0x1
	str r1, [r0]
	bl delay

	//led4 on
	ldr r0, =0x114001e4
	ldr r1, [r0]
	orr r1, #0x10
	str r1, [r0]
	bl delay

	//led4 off
	ldr r1, [r0]
	bic r1, #0x10
	str r1, [r0]
	bl delay

	//led5 on
	ldr r0, =0x114001e4
	ldr r1, [r0]
	orr r1, #0x20
	str r1, [r0]
	bl delay

	//led5 off
	ldr r1, [r0]
	bic r1, #0x20
	str r1, [r0]
	bl delay


	b loop    //死循环

	
delay:     //延时函数
	ldr r3, =0xffffff
delay1:
	sub r3, #1
	cmp r3, #0
	moveq pc, lr
	b delay1

Makefile代码

all:
	arm-none-linux-gnueabi-gcc start.S -o start.o -c -g
	arm-none-linux-gnueabi-ld -Ttext 0x40008000 start.o -o start.elf
	arm-none-linux-gnueabi-objcopy -O binary start.elf start.bin
	cp start.bin /mnt/hgfs/Unbantu_file

运行超级终端
这里写图片描述

打开FS4412电源
这里写图片描述
输入:loadb 40008000 然后上传二进制文件(.bin)
这里写图片描述
这里写图片描述

这里写图片描述

最后在超级终端输入命令: go 40008000
到这里,可以看到开发板上四个LED轮流闪瞎了我的眼睛,也预示着我的第一个arm开发板实验大功告成!
最后附上超级终端和芯片原理图用户使用手册及设备版资料
链接:https://pan.baidu.com/s/1mSehx5aMhIhExl-2OgyHjA 密码:sdza

  • 11
    点赞
  • 61
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值