FS4412开发板
结果情况如下:
软硬件
- FS4412开发板(硬件,以下都是软件)
- Ubuntu(执行.s文件生成.bin文件)
- SecureCRT(烧写.bin文件进开发板的软件)
- Keil uVision4(主要是检查.s文件有没有错误,其实在Ubuntu的vim里写.s文件也可以的)
编写流程
–> 查相关的手册
–> 在Keil uVision4编写.s文件
–> 在Ubuntu执行.s文件生成.bin文件
–> 在SecureCRT把对应的.bin烧写进硬件并在硬件执行
查相关的手册
首先在fs4412-dev-v0.pdf找到led测试位置
对应的有4个led灯,然后根据这4个灯对应的接口号查手册TOPEET_coreboard4412_scp.pdf找到相应的内容
其实发现,在fs4412-dev-v0.pdf文件里就已经标出对应引脚了(CHG_COK对应GPX2_7等等)
接着在SEC_Exynos 4412 SCP_Users Manual_Ver.0.10.00_Preliminary.pdf找到引脚(GPX2、GPF3、GPX1)对应内容
首先是LED灯的配置寄存器状态的设置:
然后是进一步设置 高/低 电平:
在Keil uVision4编写.s文件
根据手册,查询到每个灯对应的地址(Address):
以第一个灯为例
第一个灯引脚编号是GPX2_7,即对应GPX2CON[7]和GPX2DAT,所以地址是0x11000c40和0x11000c44
(7是指第八个引脚,引脚标号是0~7)
1.触发第一个灯,即设为输出状态:
ldr r0,=0x11000c40 @GPX2CON地址
ldr r1,[r0]
bic r1,#0xf0000000 @把标号7的引脚清零
orr r1,#0x10000000 @根据手册,7号引脚置1为输出状态(0x1 = Output)
str r1,[r0]
2.设置灯为高电平:
ldr r0,=0x11000c44 @GPX2DAT地址
ldr r1,[r0]
orr r1,#0x80 @7引脚置1为高电平输出
str r1,[r0]
3.设置灯为低电平:
ldr r0,=0x11000c44 @GPX2DAT地址
ldr r1,[r0]
bic r1,#0x80 @7引脚清零为低电平输出
str r1,[r0]
同样的道理,其它灯类似的去设置状态和电平
除了这些以外,还得有个延时来实现跑马灯效果
delay1s:
ldr r4,=0x4000000 @这里的值影响时间大小,可以自己调节
delay1s_loop:
sub r4,r4,#1
cmp r4,#0
bne delay1s_loop
mov pc,lr
最终的.s文件如下:
.text
@ 设置LED灯的配置寄存器为输出状态
@GPX2CON7
ldr r0,=0x11000c40
ldr r1,[r0]
bic r1,#0xf0000000
orr r1,#0x10000000
str r1,[r0]
@GPX1CON0
ldr r2,=0x11000c20
ldr r3,[r2]
bic r3,#0x0000000f
orr r3,#0x00000001
str r3,[r2]
@GPF3CON4
ldr r4,=0x114001e0
ldr r5,[r4]
bic r5,#0x000f0000
orr r5,#0x00010000
str r5,[r4]
@GPF3CON5
ldr r6,=0x114001e0
ldr r7,[r6]
bic r7,#0x00f00000
orr r7,#0x00100000
str r7,[r6]
loop:
@ 设置LED灯输出高电平
@GPX2DAT
ldr r0,=0x11000c44
ldr r1,[r0]
orr r1,#0x80
str r1,[r0]
@GPX1DAT
ldr r2,=0x11000c24
ldr r3,[r2]
orr r3,#0x01
str r3,[r2]
@GPF3DAT
ldr r4,=0x114001e4
ldr r5,[r4]
orr r5,#0x10
str r5,[r4]
@GPF3DAT
ldr r6,=0x114001e4
ldr r7,[r6]
orr r7,#0x20
str r7,[r6]
bl delay1s
@ 设置LED灯输出0电平
@GPX2DAT
ldr r0,=0x11000c44
ldr r1,[r0]
bic r1,#0x80
str r1,[r0]
@GPX1DAT
ldr r2,=0x11000c24
ldr r3,[r2]
bic r3,#0x01
str r3,[r2]
@GPF3DAT
ldr r4,=0x114001e4
ldr r5,[r4]
bic r5,#0x10
str r5,[r4]
@GPF3DAT
ldr r6,=0x114001e4
ldr r7,[r6]
bic r7,#0x20
str r7,[r6]
bl delay1s
b loop
delay1s:
ldr r4,=0x4000000
delay1s_loop:
sub r4,r4,#1
cmp r4,#0
bne delay1s_loop
mov pc,lr
.end
在Ubuntu执行.s文件生成.bin文件
1.在.s文件的文件夹里创建一个文件Makefile
touch Makefile
vi Makefile
2.然后往Makefile写入以下内容
CROSS = arm-none-linux-gnueabi-
CC=$(CROSS)gcc
LD=$(CROSS)ld
OBJCOPY=$(CROSS)objcopy
all : led.s
$(CC) -g -c -o led.o led.s
$(LD) led.o -Ttext 0x40001000 -o led.elf
$(OBJCOPY) -O binary -S led.elf led.bin
$(CROSS)objdump -D led.elf > led.dis
clea:
rm -f *.o *.elf *.bin *.dis
3.执行make命令生成.bin文件
在SecureCRT把对应的.bin烧写进硬件并在硬件执行
创建端口
此前需要查询电脑所连接的端口(往期有篇博文介绍了怎么查,也可以百度)
然后我的端口号是COM9
打开硬件开关后要及时按回车进入裸机开发状态(有个倒计时):
否则就会出现以下情况无法进行后续操作:
传输.bin文件
进入裸机开发时敲代码loadb 40001000然后点击传输(Transfer)的Send Kermit,找到生成的.bin文件
烧写
执行go 40001000
然后就可以看到硬件的跑马灯了。