DAY4:ARM汇编(4)

一,GPIO编程

    连接内存(二级cache),用来寻址;连接外设,用来控制

 

1,GPIO,General-Purpose IO ports,通用输入输出端口,可以把一个GPIO理解为从CPU内部引出的引脚,这个引脚可以用于不同的目的,可与不同的硬件相连接,比如可以接到内存上用来寻址,也可以接到LED上用来控制LED。

(1)控制寄存器

控制GPIO的使用方式

(2)数据寄存器

用来设置引脚的电平是高还是低

(3)上拉/下拉使能寄存器

稳定引脚的电平

二,Exynos4412开发板GPIO

Exynos4412芯片的GPIO特性包括以下:

1,46个可中断通用控制I/O;

2, 172个外部中断;

4,32个外部可唤醒中断

5,252个多路复用I/O口;

三,LED相关的寄存器,以FS4412为例

1,控制寄存器

2,数据寄存器

3,上/下拉使能寄存器

点亮LED:

1,配置引脚功能,配置为输出

0x1100_0000 +  0x0C40 = 0x11000C40

四,交叉编译工具链的使用

1,arm-linux-gcc

arm-linux-gcc –c -o link.o link.S

把.c .S文件编译输出.o文件

在编译裸机程序时需要添加 选项 -nostdlib

不连接系统标准启动文件和标准库文件,只把指定的文件传递给连接器。

这个选项常用于编译内核、bootloader等程序,它们不需要启动文件、标准库文件。

2,arm-linux-ld

arm-linux-ld -Ttext 0x40008000 link.o -o link_tmp.elf

arm-linux-ld -Tmap.lds link.o -o link_tmp.elf

把.o文件链接为可执行的elf文件,elf文件是linux下的可执行程序,其中-T选项指定了代码段的地址,-T后也可以后接一个链接器脚本文件。

3,arm-linux-objcopy

arm-linux-objcopy用来进行可执行程序文件的格式转换,在arm程序开发过程中,一般会用其来将ELF格式的可执行文件转换为二进制格式的文件

arm-linux-objcopy -O binary -S link_tmp.o link

4,arm-linux-objdump

用来对格式为elf、arm的裸机可执行程序进行反汇编。

arm-linux-objdump –D elf_file > dis_file //反汇编elf格式的文件

#或者

arm-linux-objdump –D –b binary –m arm bin_file > dis_file //反汇编arm裸机程序

五,要安装的工具

1,交叉编译工具链,gcc-4.6.4.tar.xz -- 安装文档【系统移植实验手册】中的第一个实验

2,安装SecureCRT,安装包SecureCRT-v8.0.4,其中有破解的文档readme.txt

3,安装串口驱动,蓝线装CH340,灰线装PL2302

4,【SecureCRT下使用Kermit协议传输文件】,描述了怎么用secureCRT下载文件

六,交叉编译工具链

1,tar -xvf gcc-4.6.4.tar.xz

2,进入到解压后的gcc-4.6.4/bin目录下

3,键入pwd命令,保存显示的路径

4,sudo vim /etc/profile

5,在最后一行添加

export PATH=${PATH}:gcc-4.6.4/bin的全路径

6,source /etc/profile

7,arm-linux-gcc -v

七,下载程序

SecureCRT下使用Kermit协议传输文件

1,在SecureCRT中输入命令   loadb 0x40008000

2,在SecureCRT中选择Transfer-->Send Kermit-->选择要传输的文件

3,执行裸机程序,在SecureCRT中输入命令 go 0x40008000

作业:

一,LED灯点亮

对照开发板手册,查找LED所使用的GPIO

1,实现对FS4412开发板,4个LED灯流水点亮汇编代码。

2,汇编调用C实现LED灯流水点亮

ARM汇编语言(3)(寄存器读写控制外设)的更多相关文章

  1. 痞子衡嵌入式:i.MXRT1010, 1170型号上不一样的SNVS GPR寄存器读写控制设计

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是i.MXRT1010, 1170型号上不一样的SNVS GPR寄存器读写控制设计. 痞子衡之前两篇文章 <在SBL项目实战中妙用i ...

  2. ARM汇编语言

    ---恢复内容开始--- arm汇编语言 汇编语言是一种程序设计语言,arm处理器是一种16/32位的嵌入式RISC微处理器.一开始我把这混为一谈了.ARM汇编的特点:汇编语言,又叫助记符语言. 1) ...

  3. Android ARM汇编语言

    简介 ARM是Advanced RISC Machine的首字母缩写,它可以称之为一家嵌入式处理器的提供商,也可以理解为一种处理器的架构,还可以将它作为一套完整的处理器指令集. 原生程序与ARM汇编语 ...

  4. 【基于Android的ARM汇编语言系列】之三:ARM汇编语言程序结构

    作者:郭嘉 邮箱:allenwells@163.com 博客:http://blog.csdn.net/allenwells github:https://github.com/AllenWell [ ...

  5. ARM处理器的寄存器,ARM与Thumb状态,7中运行模式

     ** ARM处理器的寄存器,ARM与Thumb状态,7中运行模式  分类: 嵌入式 ARM处理器工作模式一共有 7 种 : USR  模式    正常用户模式,程序正常执行模式 FIQ模式(Fast ...

  6. 【基于Android的ARM汇编语言系列】之五:ARM指令集与Thumb指令集

    作者:郭嘉 邮箱:allenwells@163.com 博客:http://blog.csdn.net/allenwells github:https://github.com/AllenWell [ ...

  7. TLV320AIC3268寄存器读写

    该芯片支持I2C和SPI读写寄存器,本人用的是SPI1接口. 以下是对手册中SPI接口读写寄存器相关内容的翻译(英文版可以看手册的94页~) 在SPI控制模式下,TLV320AIC3268使用SCL_ ...

  8. ARM汇编语言基础

    ARM 与 Thumb 寄存器对应关系 PC寄存器: ARM状态为R15,Thumb状态为PC LR寄存器: ARM状态为R14,Thumb状态为LR SP寄存器: ARM状态为R13,Thumb状态 ...

  9. ARM汇编语言(1)(基本概念)

    1.***.s文件为汇编语言文件格式: 2.ARM寄存器(以Samsung芯片为例) 2.1.要介绍arm寄存器之前我们要先了解一下arm处理器的工作模式: Arm处理器有七种工作模式,为的是形成不同 ...

随机推荐

  1. java Web笔记

    Get:标记在地址栏中 放在请求行中显示get?Username=...Password=... Post:使用的是二进制的上传下载 请求行不显示信息 数据传输量大数据隐蔽对文本没有 pst不能再浏览 ...

  2. 让你的 wowza server提供 RESTful web 服务

            有时我们 nginx 须要和 wowza 服务器交互以进行一些 LB 事宜:有时我们的管理员须要实时了解 wowza 服务器的一些其它状态信息(比方一些自己定义对象的状态等等).而用 ...

  3. 解析Linux特殊文件【转】

    您有Dos和Windows经验,就大概知道系统存在若干类型的文件,如系统文件.只读文件.隐含文件等.在Linux下用ls –l 命令来判断文件类型,可以依据第一列中的10个字符来判断.-rw-r—r— ...

  4. Https与Http,SSL,DevOps, 静态代码分析工具,RFID, SSH, 非对称加密算法(使用最广泛的一种是RSA), 数字签名, 数字证书

    在URL前加https://前缀表明是用SSL加密的. 你的电脑与服务器之间收发的信息传输将更加安全. Web服务器启用SSL需要获得一个服务器证书并将该证书与要使用SSL的服务器绑定. http和h ...

  5. Android源代码装饰模式---ContextWrapper

    假设说Android源代码中哪个地方装饰模式应用的最明显的话,那肯定是非ContextWrapper莫属了,ContextWrapper是一个透明的经典的装饰模式.本文将通过装饰器模式分析Contex ...

  6. vue 基础-->进阶 教程(2): 指令、自定义指令、组件

    第二章 建议学习时间4小时  课程共3章 前面的nodejs教程并没有停止更新,因为node项目需要用vue来实现界面部分,所以先插入一个vue教程,以免不会的同学不能很好的完成项目. 本教程,将从零 ...

  7. LocalOutlierFactor算法回归数据预处理

    sklearn.neighbors.LocalOutlierFactor¶ class sklearn.neighbors.LocalOutlierFactor(n_neighbors=20, alg ...

  8. Django中使用haystack进行全文检索时需要注意的坑

    对于haystack的配置什么的我在这里就不必说什么了,毕竟一搜一大把. 直接说重点 1 当你通过继承haystack的views来自定义django 应用的views 时,你要注意heystack ...

  9. Mongodb的CRUD

    1.查询 使用db.collection.find()方法进行查询.db.collection.findOne()返回单个文档.mongodb的所有查询操作都是针对单个collection > ...

  10. pandas所占内存释放

    df = pd.read_csv('....') 要调用循环处理多个文件时,内存占用情况严重,如果互相之间不需要调用,可以直接del df  释放内存