67.ARM裸机开发--LED控制(补充)

一.ARM裸机开发步骤

1. 看电路图

    a. 找到我要控制的设备

    b. 找到设备在CPU侧的控制管脚(如GPX2_7)

2. 看芯片手册 (先看相关的中文文档,熟悉设备,再看手册)

    a. 搜索电路图里对应控制管脚的名称(如GPX2)

    b. 看目录找到对应的控制模块(如:6 General Purpose Input/Output (GPIO) Control)

    c. 看该模块的overview 了解该模块的大概功能

    d. 看控制寄存器(REGISTER DESCRIPTION)  重点,难点

     注: 如果寄存器比较多什么办?

       看技术支持提供的例子程序, 找到需要修改的寄存器(常常只有几个)。

        部分厂商会提供配置软件,通过界面去配置功能, 我们只需使用配置好的寄存器值就可以了

3. 编程

       a. 定义要控制的寄存器的宏 (与手册里的寄存器地址对应起来)

       b. 设备初始化  (如设置GPIO为输出状态)

       c. 把功能分成最基本的小块,逐个实现 如点亮灯-> 在灭灯-> 加延时->闪烁-> 跑马灯

 

二. 实现LED灯的控制

其实和我们单片机的开发是一样的无非就是寄存器多了一些,功能更强大了而已。

那么怎么实现LED的闪烁,(讯为4412)

  1. 首先打开我们原理图:

通过查找KP_COL0---》对应到核心板CON11的54脚

VDD50_EN—》对应到核心板CON10的73脚

然后我们去查询下核心板原理图。

LED2-->GPL2_0

LED3-->GPK1_1

 

2. 查看数据手册

知道管脚了,查看下数据手册。

led的管脚就是个gpio,分为很多的组,查看下gpio的寄存器章节6.2.1

很明显管脚有这么多种的寄存器,。

搜索下GPL2

 

然后看一下GPL2CON的详细描述,这个为控制寄存器,基地址,包含7个管脚。

 

和单片机的寄存器概念一致,其他寄存器不过多说明。

 

3. 编写代码,控制灯闪烁


   .text
     /*@ 设置LED灯的配置寄存器 GPL2CON0 为输出状态
	 ldr  r0,=0x11000100
	 ldr  r1,[r0]
	 bic  r1,#0x0000000f
	 orr  r1,#0x00000001
	 str  r1,[r0]*/
	 
	 @ 设置LED灯的配置寄存器 GPK1CON1 为输出状态
	 ldr  r0,=0x11000060
	 ldr  r1,[r0]
	 bic  r1,#0x000000f0
	 orr  r1,#0x00000010
	 str  r1,[r0]

loop:
	 @ 设置LED灯输出高电平   GPL2DAT0
	 ldr  r0,=0x11000104
	 ldr  r1,[r0]
	 orr  r1,#0x01   
	 str  r1,[r0]

	 bl  delay1s

	 @ 设置LED灯输出0电平   GPL2DAT0
	 ldr  r0,=0x11000104
	 ldr  r1,[r0]
     bic  r1,#0x01   
	 str  r1,[r0]
	 
	 bl  delay1s
	
	 @ 设置LED灯输出高电平   GPK1DAT1
	 ldr  r0,=0x11000064
	 ldr  r1,[r0]
	 orr  r1,#0x02   
	 str  r1,[r0]

	 bl  delay1s

	 @ 设置LED灯输出0电平   GPK1DAT1
	 ldr  r0,=0x11000064
	 ldr  r1,[r0]
     bic  r1,#0x02   
	 str  r1,[r0]
	 
	 bl  delay1s
	 b    loop

delay1s:     
     ldr      r4,=0x1ffffff  
delay1s_loop:     
     sub    r4,r4,#1
	 cmp   r4,#0              
	 bne    delay1s_loop     
	 mov   pc,lr

    .end

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
	 
clean:
	 rm -f *.o *.elf *.bin *.dis

进行编译,下载执行。

烧写通过tftp,进行下载测试。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值