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