搭建开发环境,并编程实现4个led灯跑马灯显示

结果情况如下:
在这里插入图片描述

软硬件

  1. FS4412开发板(硬件,以下都是软件)
  2. Ubuntu(执行.s文件生成.bin文件)
  3. SecureCRT(烧写.bin文件进开发板的软件)
  4. 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
在这里插入图片描述

然后就可以看到硬件的跑马灯了。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值