ARM嵌入式学习--OK6410裸板程序--1.GPIO控制LED

发布者:勾剑寒最新更新时间:2020-01-09 来源: eefocus关键字:ARM  OK6410  裸板程序  GPIO控制LED 手机看文章 扫描二维码
随时随地手机看文章

基本概念:

1.GPIO--通用IO口,通过芯片针脚来控制或读取外设的数据。

2.GPIO口的使用原理,通过设置GPXXCON, GPXXDAT, GPXXPUL等寄存器来设置GPIO口的状态。


原理图:

跟硬件相关的部分,一定要阅读原理图,然后通过查找SoC的用户手册来查找相应的寄存器设置即可。


底板电路图

核心板电路图:

可知在OK6410上4个LED灯是通过GPM这一组的GPIO口控制的,分别是GPM0-GPM3四组。

然后打开S3C6410X User's Manual,查找GPM相关的寄存器:

通过上面内容找到:

GPMCON 地址 0x7F008820

GPMDAT 地址 0x7F008824

由于LED连接着GPM0-GPM3,所以通过上面的内容可以知道,GPMCON设置的值应该为0x00001111,意思是将GPM0-GPM3设置为输出,这样通过设置GPMDAT[5:0]来控制响应针脚的高低电平,使LED亮或灭。

 

代码:(以下代码参考了友善之臂Tiny6410的汇编代码,并非原创)


汇编代码:


 1 .global _start

 2 

 3 _start:

 4         // 把外设的基地址告诉CPU

 5         ldr r0, =0x70000000//对于6410来说,内存(0x000000000x60000000),外设(0x70000000-0x7fffffff)

 6         orr r0, r0, #0x13                      //外设大小:256M

 7         mcr p15,0,r0,c15,c2,4               //把r0的值(包括了外设基地址+外设大小)告诉cpu

 8     

 9         // 关看门狗

10         ldr r0, =0x7E004000

11         mov r1, #0

12         str r1, [r0] 

13 

14         // 设置GPMCON0                                                                                   

15         ldr r1, =0x7F008820                                                                                   

16         ldr r0, =0x00001111                                                                                         

17         str r0, [r1]

18 

19         mov r2, #0x1000

20 led_blink:

21         // 设置GPMDAT,使GPM_0/1/2/3引脚输出低电平,LED亮

22         ldr r1, =0x7F008824 

23         mov r0, #0

24         str r0, [r1]

25 

26         // 延时

27         bl delay

28 

29         // 设置GPMDAT,使GPM_0/1/2/3引脚输出高电平,LED灭

30         ldr r1, =0x7F008824 

31         mov r0, #0x0f

32         str r0, [r1]

33 

34         // 延时

35         bl delay

36 

37         sub r2, r2, #1

38         cmp r2,#0

39         bne led_blink

40 

41 halt:

42         b halt

43 

44 

45 delay:

46         mov r0, #0x1000000

47 delay_loop:

48         cmp r0, #0

49         sub r0, r0, #1

50         bne delay_loop

51         mov pc, lr


Makefile:


 1 led.bin: start.o

 2         arm-linux-ld -Ttext 0x50008000 -o led.elf $^

 3         arm-linux-objcopy -O binary led.elf led.bin

 4         arm-linux-objdump -D led.elf > led_elf.dis

 5 %.o : %.S

 6         arm-linux-gcc -o $@ $< -c

 7 

 8 %.o : %.c

 9         arm-linux-gcc -o $@ $< -c 

10 

11 clean:

12         rm *.o *.elf *.bin *.dis  -rf


然后make,可以得到led.bin,通过tftp下载到开发板中:

然后就可以看到OK6410板上的四个LED灯开始一起闪烁。

 

总结:

1.GPIO口的使用其实是SoC外设控制中最简单的,只要抓住GPIO的几个寄存器,将他们的值设置正确,就可以完成相应的控制功能。

2.一定要学会查看SoC的User's Manual的方法,这样当SoC换成其他品牌时,可以以不变应万变。

3.使用ld来链接.o文件时,一般会指定-Ttext选项,表示该代码会在内存的哪个地址加载,通过查看User's Manual,你可以决定这个地址的范围,如下图,0x50000000-0x6FFFFFFF地址区间映射到DRAM上,所以绝大部分的资料中,S3C6410中的内存地址都是0x5xxxxxxx类似的地址。也有一些0xcxxxxxxx类似的地址,这是打开SoC中的MMU后进行物理地址和虚拟地址映射后的结果,如果打开了MMU,就可以使用0xcxxxxxxx这样的地址,否则无法使用。

关键字:ARM  OK6410  裸板程序  GPIO控制LED 引用地址:ARM嵌入式学习--OK6410裸板程序--1.GPIO控制LED

上一篇:移植mysql到arm平台
下一篇:初始化中断按键(2440)

推荐阅读最新更新时间:2024-11-06 17:55

ARM嵌入式基础知识
实践当然是最锻炼人的方式,但是我想在校生很少有这样的机会,别说本科生,硕士生也未必有条件。所以我想学习嵌入式要从个人的知识背景和现实条件出发。订立合适的阶段目标,在允许的条件下多动手多思考。 一般情况下对于硬件设备是比较短缺的。但是可以从软件方面和嵌入式系统开发模式上下功夫,提醒大家一点,嵌入式系统开发设计的内容知识很多,所以大家不要乱,在了解嵌入式系统开发的体系结构后,一步一步的下手,最容易上手的是linux下的C,比如ucos(有开放源代码),虽然可能无法在硬件上仿真,但也不必着急。wince,palmos上手都很容易。无论对于初学者还是自以为是高手的人来说,编程水平(这可不受硬件条件限制)绝对是没有止境的,有了较高的编程水平
[单片机]
Keil uVision4 for ARM添加支持C51
第一步,要有C51编译器文件(就是Keil目录下的C51文件夹),可以通过安装Keil uVison4 for C51来获得(当然不要忘记事后卸载),或者去已经安装好的电脑上复制一份。 第二步,安装Keil uVision4 for ARM,这个不解释。 第三步,在Keil uVision4 for ARM安装目录,修改TOOLS.INI,具体为在 段前面增加 段,增加内容例如下面(PATH路径需修改为实际路径,其它内容应与C51编译器文件来源处的TOOLS.INI相同): PATH= D:\Keil\C51 VERSION=V9.50a BOOK0=HLP\Release_Notes.htm( Release Notes
[单片机]
OpenCV ffmpeg移植到ARM平台
前一篇写了如何在移植OpenCV库到ARM平台上,本来我只是用到OpenCV的打开USB摄像头获取图像到IplImage结构中,这用到了V4L2的底层函数。然后进行视频图像的帧处理。 那么如何用OpenCV读写ARM板上的视频文件,并进行视频处理呢?这该又将如何移植呢? 这个就必须要装x264,xvid和ffmpeg,和上一篇中讲的通过V4L2底层函数获取摄像头视频就有点不一样了。 下面就介绍一种方法。 测试环境:Ubuntu 12.04 LTS OpenCV版本:1.0 交叉编译器:arm-none-linux-gnueabi-4.3.2 步骤如下: 一 交叉编译libjpeg 为了使OpenCV能处理jpeg图像,
[单片机]
OpenCV ffmpeg移植到<font color='red'>ARM</font>平台
ARM中的Ramdisk的使用
Linux启动时,initrd可以在内存中,也可以在 Flash或其它可用的设备上;initrd文件格式为: romfs/Minix/ext2/gzip;相关的函数:drivers/block/rd.c: identify_ramdisk_image ; 加载位置: init/main.c: prepare_namespace; 需要的参数为:initrd_start 和 initrd_end; ARM如何传递initrd参数:ARM传递initrd参数可以分为两种情况: 1.从外部获取的情况: arch/arm/kernel/setup.c: 从 TAG参数中获取(tags简单来说内存中一段具有一定格式的标签数据和参数,核心和L
[单片机]
Exynos4412 Uboot 编译工具 —— 交叉工具链 arm-linux-gcc 的安装
一、什么是交叉编译? 在开发主机运行编译器编译内核、应用程序。内核和程序在目标机上运行,这个编译过程被称为交叉编译。编译器运行在开发主机(通常是X86体系的PC机)上,编译出的的代码是目标机体系结构的,如:ARM。 在主机上除了编译还可以完成制作根文件系统地工作。 嵌入式Linux开发,交叉编译使用开源GNU工具集,gcc等。 二、制作交叉编译器 我们可以自己制作交叉编译器,需要gcc,glibc,二进制工具集 ,通过crosstool,crosstool-ng脚本来实现。这里不展示制作过程。 三、安装交叉编译器 1、解压工具链压缩包 1)将gcc-4.6.4.tar.xz 拷贝到 toolschain文
[单片机]
Exynos4412 Uboot 编译工具 —— 交叉工具链 <font color='red'>arm</font>-linux-gcc 的安装
Arm与美的达成战略合作,提供 Mbed OS助力智能家电开发
北京– 2018年10月29日–Arm宣布与美的达成战略合作关系,双方将以美的利用Arm Mbed OS作为内核打造的自有物联网操作系统SmartOS为开发基础,通过一系列生态系统、标准化和安全性等方面的合作,减少重复开发工作,实现统一、安全、多样化的智能家电系统平台。 目前,物联网市场尚无统一的生态系统,碎片化较为严重。此次Arm与美的的合作将推动智能家电应用的标准化,通过统一应用Mbed技术,并以SmartOS为基础,整合相关芯片与设备,从而实现更为高效的应用与平台开发工作,构建一个统一化、标准化的智能家电系统平台。 Arm Pelion物联网平台还将为美的提供操作系统、云服务、工具和开发人员生态系统等方面的支持。Pelion
[家用电子]
孙正义谈收购ARM布局:以ARM平台迎接超级智能时代
原先预定在2016年6月退休的软件银行(SoftBank)社长孙正义不但并未如期退休,还一手操盘购并了英国的半导体龙头公司安谋(ARM)。孙正义在接受日媒访问时谈及收购安谋背后的长远布局,构筑一片 超级智能 社会的蓝图。 孙正义表示自己并未如预订退休,主要是放不下对人工智能(AI)的热情,他早早锁定了安谋为购并对象,作为实现这个理想的踏脚石。 究竟是何种特质,让业务和软件银行几不相干的安谋成为孙正义相中的目标?安谋主攻的是智能型手机和平板电脑的中央处理器(CPU)设计,在全球智能型手机CPU市场拥有高达95%的市占率,不过安谋并不像英特尔(Intel)般自行生产CPU,而是向半导体业者授权。不仅如此,安谋还针对物
[单片机]
10.代码搬移
[单片机]
10.代码搬移
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved