lv11 嵌入式开发 GPIO实验 9

news2024/12/23 20:50:23

目录

1 简介

1.1 GPIO

2 LED实验步骤

2.1 通过电路原理图分析LED的控制逻辑        

2.2 通过电路原理图查找LED与Exynos4412的连接关系    

2.3 通过数据手册分析GPIO中哪些寄存器可以控制LED    

2.4 通过程序去操控对应的寄存器完成对LED的控制

2.4.1 使用寄存器写入命令STR,把控制寄存器和数据寄存器内写入值

2.4.2 使用编译

2.4.3 烧录

3 实现led亮灭翻转


1 简介

SOC概念,芯片厂商在做芯片的时候出了CPU之外还会集成很多外设。如三星4412,处理cpu外,还集成了许多硬件控制器。

1.1 GPIO

GPIO(General-purpose input/output)即通用型输入输出,GPIO可以控制连接在其之上的引脚实现信号的输入和输出 芯片的引脚与外部设备相连,从而实现与外部硬件设备的通讯、控制及信号采集等功能

2 LED实验步骤

2.1 通过电路原理图分析LED的控制逻辑        

2.2 通过电路原理图查找LED与Exynos4412的连接关系    

2.3 通过数据手册分析GPIO中哪些寄存器可以控制LED    

通过阅读4412芯片手册分析GPIO寄存器,搜索原理图中的GPX2_7

分别查看到与GPX2相关的控制寄存器、数据寄存器、上下拉寄存器、驱动强度寄存器(与LED有关的主要是控制寄存器)

控制寄存器

把32位寄存器分成了不同的位,每个位负责控制引脚配置为不同的功能。 

0x0 = Input                      输入
0x1 = Output                   输出(LED选项此项)
0x2 = Reserved 
0x3 = KP_ROW[7]          键盘
0x4 = Reserved
0x5 = ALV_DBG[19]        模拟
0x6 to 0xE = Reserved
0xF = WAKEUP_INT2[7] 唤醒
数据寄存器

也是32位寄存器,只用了[7:0] 

  • R(Read):表示将端口配置为输入(input)端口,可以读取(read)该端口的状态或值。
  • W(Write):表示将端口配置为输出(output)端口,可以写入(write)一个特定的状态或值到该端口。
  • X(Undefined):表示将端口配置为功能引脚(functional pin),并且读取(read)该端口时将会获得未定义(undefined)的值。

上拉下拉寄存器

在嵌入式系统中,上拉和下拉寄存器通常用于配置微控制器的引脚。当引脚被配置为输入模式时,上拉或下拉寄存器决定了引脚的默认电平状态。在输出模式下,上拉和下拉功能通常不会被使用。

  • 上拉:当引脚被配置为输入模式并且没有外部连接时,上拉寄存器会使得引脚的电平保持高电平状态。
  • 下拉:当引脚被配置为输入模式并且没有外部连接时,下拉寄存器会使得引脚的电平保持低电平状态。

一般而言,在将引脚配置为输入模式时,需要根据具体的硬件平台和需求来选择是否启用上拉或下拉。如果希望引脚在空闲时保持稳定的状态,可以启用上拉或下拉以确保引脚的默认状态。

驱动寄存器

通常,DRV寄存器的位数与系统中IO端口的数量相对应。每个位表示一个IO端口,可以设置为不同的驱动能力级别,例如低、中、高等级。

通过调整DRV寄存器中各个位的设置,可以控制每个IO端口的驱动能力,以满足特定的电流和电压要求。这样可以确保与外部设备或其他系统组件的连接质量和稳定性。

我们原理图中有三极管,这个寄存器也不需要使用到。

2.4 通过程序去操控对应的寄存器完成对LED的控制

2.4.1 使用寄存器写入命令STR,把控制寄存器和数据寄存器内写入值

led-asm.s

.text
_start:

LED_CONFIG:
	LDR R2, =0x11000c40
	LDR R1, =0x10000000
	STR R1, [R2]

LED_OFF:
	LDR R2, =0x11000c44
	LDR R1, =0x00000000
	STR R1, [R2]

STOP:
	B STOP

.end

2.4.2 使用编译

直接编译会报错:

gcc编译过程分为四个步骤:

1.预处理(Pre-Processing)    gcc -E

2.编译(Compiling)                gcc -S

3.汇编(Assembling)              gcc -c  (我们只需要从这里开始就可以)

4.链接(Linking)                     gcc (生产可执行文件.elf)

写一个MakeFile

TARGET = led-asm
CROSS_COMPILE = arm-none-linux-gnueabi-
CC = $(CROSS_COMPILE)gcc
LD = $(CROSS_COMPILE)ld
OBJCOPY = $(CROSS_COMPILE)objcopy

all:
	$(CC) -c $(TARGET).s -o $(TARGET).o
	$(LD) $(TARGET).o -Ttext 0x40008000 -o $(TARGET).elf
	$(OBJCOPY) -O binary -S $(TARGET).elf $(TARGET).bin

clean:
	rm $(TARGET).o $(TARGET).elf $(TARGET).bin

Makefile详见 

https://blog.csdn.net/m0_60718520/article/details/127218677 

arm-none-linux-gnueabi-ld

常被用于交叉编译,即在一个系统上编译生成另一个不同体系结构的目标文件。由于 ARM 架构通常用于嵌入式设备和移动设备等场景,因此 arm-none-linux-gnueabi 工具链也经常被用于嵌入式和移动应用的开发。

需要注意的是,arm-none-linux-gnueabi-ld 并不直接编译源代码,而是用于链接目标文件。在 Linux 下进行 ARM 应用程序开发时,通常需要使用交叉编译器来编译和生成 ARM 架构的目标文件,然后再使用 arm-none-linux-gnueabi-ld 进行链接。

-Ttest 

在 Linux 编译中,使用 -Ttext 选项可以指定链接器脚本中代码段(text segment)的起始地址。在你提到的例子中,-Ttext 0x40008000 将代码段的起始地址设置为 0x40008000。

这个选项通常用于嵌入式系统或者一些特定的应用场景,例如需要将程序加载到特定的内存地址上执行。如果你有这样的需求,可以在编译时通过 -Ttext 选项来指定代码段的起始地址。但是在一般的应用开发中,并不需要手动指定代码段的起始地址,因为链接器会为你处理好这些细节

arm-none-linux-gnueabi-objcopy

这个命令是使用 GNU objcopy 工具将目标文件转换为二进制文件

((TARGET).elf)转换为二进制文件((TARGET).bin)。这个命令的参数含义如下:

  • -O binary:指定输出格式为二进制。
  • -S:在复制过程中去除调试符号,减小二进制文件的大小。
  • $(TARGET).elf:输入的目标文件。
  • $(TARGET).bin:输出的二进制文件。

使用 objcopy 工具可以将可执行文件或目标文件转换为不同的格式,包括二进制、Intel Hex、Motorola S-record 等。在这个命令中,选择了二进制格式作为输出。

这个命令通常用于在嵌入式系统中,将生成的可执行文件转换为可以直接加载到目标设备上运行的二进制文件。转换后的二进制文件可以通过各种方式进行烧录或传输到目标设备上。

请注意,在运行这个命令之前,先确保已经编译生成了目标文件($(TARGET).elf)作为输入。

把bin文件放到共享目录。

2.4.3 烧录

打开SecureCRT,连接串口115200

开发板上电3秒内按回车输入命令行

输入命令loadb 0x40008000

传输文件

输入命令 go 0x40008000跳转至内存其实位置执行程序,LED灯便会从亮变灭

3 实现led亮灭翻转

led-asm.s



.text
_start:

MAIN:
	BL LED_CONFIG
LOOP:              @循环
	BL LED_ON
	BL DELAY
	BL LED_OFF
	BL DELAY
	B  LOOP

LED_CONFIG:        @配置控制寄存器
	LDR R2, =0x11000c40
	LDR R1, =0x10000000
	STR R1, [R2]
	MOV PC, LR

LED_ON:            @数据寄存器输出高电平
	LDR R2, =0x11000c44
	LDR R1, =0x00000080
	STR R1, [R2]
	MOV PC, LR

LED_OFF:           @数据寄存器输出低电平
	LDR R2, =0x11000c44
	LDR R1, =0x00000000
	STR R1, [R2]
	MOV PC, LR

DELAY:
	LDR R1, =100000000  @主频1000Mhz,因为三级流水线及其他跳转因素相当于一秒钟闪烁2、3次
L:
	SUB R1, R1, #1
	CMP R1, #0
	BNE L          @ 不等于0一直循环
	MOV PC, LR

STOP:
	B STOP

.end



实现了led亮灭的功能

编译烧录参考2.4.2与2.4.3

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1251395.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于51单片机的交通信号灯系统【程序+proteus仿真+参考论文+AD原理图等16个文件夹资料】

一、项目功能简介 整个设计系统由STC89C52单片机数码管显示模块LED指向灯模块三线八线译码器模块按键模块组成。 具体功能: 1、东西向、南北向依次进行周期通行,默认设置为:东西向直行(绿灯)时间30秒,左转…

案例精选|聚铭网络流量智能分析审计系统加强南京市溧水区人社局信息安全防护能力

一字排开的社保综合服务窗口、实时滚动的数“智”人社大屏、便捷快速的社保卡自助服务机……每位到溧水市民中心人社大厅进行业务办理的市民对高效的社保服务经办效率赞叹不已。 党的二十大报告提出,健全覆盖全民、统筹城乡、公平统一、安全规范、可持续的多层次社…

AI和人工智能与机器学习全景报告

今天分享的是AI系列深度研究报告:《AI和人工智能与机器学习全景报告》。 (报告出品方:appen) 报告共计:30页 获取 数据获取仍是AI应用构建团队的主要瓶颈。 原因各不相同。例如,特定用例的数据可能不足…

【数据结构】树与二叉树(廿三):树和森林的遍历——层次遍历(LevelOrder)

文章目录 5.3.1 树的存储结构5. 左儿子右兄弟链接结构 5.3.2 获取结点的算法5.3.3 树和森林的遍历1. 先根遍历(递归、非递归)2. 后根遍历(递归、非递归)3. 森林的遍历4. 层次遍历a. 算法LevelOrderb. 算法解读c. 时间复杂度d.代码…

试写一算法将两个递增有序的带头结点的单链表合并为一个递增有序的带头结点的单链表。(利用原表结点空间)

试写一算法将两个递增有序的带头结点的单链表合并为一个递增有序的带头结点的单链表。 (利用原表结点空间) 比如现在要将下面两个链表合并,这里是要求利用原表空间 我们先创建一个辅助的链表L3,用p和q分别标记L1和L2的数据元素&…

macOS unlocker 4.0.5 for VMware ESXi 7.0

正文共:555 字 6 图,预估阅读时间:1 分钟 我们前面在macOS上已经折腾了好久了,包括黑苹果的安装(老树发新芽,ACER TM4750G装黑苹果)、macOS的安装(VMware ESXI部署macOS&#xff08…

【React】打包体积分析 source-map-explorer

通过分析打包体积,才能知道项目中的哪部分内容体积过大,方便知道哪些包需要进一步优化。 使用步骤 安装分析打包体积的包:npm i source-map-explorer在 package.json 中的 scripts 标签中,添加分析打包体积的命令对项目打包&…

人工智能面面观

人工智能简介 人工智能(Artificial Intelligence,简称AI)是一门研究如何使计算机能够模拟和执行人类智能任务的科学和技术领域。它致力于开发能够感知、理解、学习、推理、决策和与人类进行交互的智能系统。人工智能的背景可以追溯到上世纪50…

2023最全的Web自动化测试介绍

做测试的同学们都了解,做Web自动化,我们主要用Selenium或者是QTP。 有的人可能就会说,我没这个Java基础,没有Selenium基础,能行吗?测试虽然属于计算机行业,但其实并不需要太深入的编程知识&…

Mindomo Desktop for Mac免费思维导图软件,助您高效整理思维

思维导图是一种强大的工具,可以帮助我们整理思维、提高记忆力、激发创造力。而Mindomo Desktop for Mac作为一款免费的思维导图软件,能够帮助我们更高效地进行思维整理和项目管理。在本文中,我们将介绍Mindomo Desktop for Mac的功能和优势&a…

数据结构与算法编程题24

中序遍历非递归算法 #define _CRT_SECURE_NO_WARNINGS#include <iostream> using namespace std;typedef char ElemType; #define ERROR 0 #define OK 1 #define Maxsize 100 #define STR_SIZE 1024typedef struct BiTNode {ElemType data;BiTNode* lchild, * rchild; }B…

pop链反序列化 [MRCTF2020]Ezpop1

打开题目 网站源码为 Welcome to index.php <?php //flag is in flag.php //WTF IS THIS? //Learn From https://ctf.ieki.xyz/library/php.html#%E5%8F%8D%E5%BA%8F%E5%88%97%E5%8C%96%E9%AD%94%E6%9C%AF%E6%96%B9%E6%B3%95 //And Crack It! class Modifier {protected …

IDEA中JDK21控制台打印的中文乱码

IDEA中&#xff0c;使用的JDK21&#xff0c;控制台打印中文乱码&#xff0c;解决办法是重装了一下JDK。 我之前安装的版本是“jdk-21_windows-x64_bin.exe”&#xff0c;我配置了多个JDK环境&#xff0c;所以使用的是安装文件进行安装的。这次解决乱码问题&#xff0c;我重新安…

如何获得微软MVP徽章

要成为微软MVP&#xff0c;需要在特定领域成为专家&#xff0c;并积极参与社区&#xff0c;为其他人提供帮助和支持。以下是一些步骤可以帮助你成为MVP&#xff1a; 在特定领域成为专家&#xff1a;要成为MVP&#xff0c;需要在某个领域具有专业知识和经验。这可以通过阅读相关…

多线程详解(未完结)

文章目录 ⭐️写在前面的话⭐️一、线程简介1.1 进程1.2 线程1.3 多线程和多进程的区别1.4 总结 二、继承实现2.1 继承Thread类例子&#xff1a;网图下载 2.2 实现Runnable接口 (推荐)案例&#xff1a;火车站买票问题案例&#xff1a;龟兔赛跑 2.3 实现Callable接口 (了解即可)…

ArkTs变量类型、数据类型

可以参考官网学习路径学习HarmonyOS第一课|应用开发视频教程学习|HarmonyOS应用开发官网 一、变量 1、ArkTS语言 ArkTS是华为自研的开发语言。它在TypeScript&#xff08;简称TS&#xff09;的基础上&#xff0c;匹配ArkUI框架&#xff0c;扩展了声明式UI、状态管理等相应的…

【数据分享】我国12.5米分辨率的坡度数据(免费获取)

地形数据&#xff0c;也叫DEM数据&#xff0c;是我们在各项研究中最常使用的数据之一。之前我们分享过源于NASA地球科学数据网站发布的12.5米分辨率DEM地形数据&#xff08;可查看之前的文章获悉详情&#xff09;&#xff0c;这个DEM数据的优点是精度高。 基于DEM地形数据&…

根据商品ID获取淘宝数据接口|淘宝商品详情接口|淘宝关键词搜索商品列表接口|淘宝到手价接口|淘宝API接口

淘宝API接口可以运用到多种业务场景中&#xff0c;以下列举了一些主要的场景&#xff1a; 商品信息展示&#xff1a;通过调用淘宝API详情接口&#xff0c;可以获取商品的详细信息&#xff0c;如商品标题、价格、库存、销量、评价等数据。这些信息可以用于在自己的网站或应用程…

cocos游戏引擎制作的滚动框地图防止误点操作的简单方法

本篇文章主要讲解&#xff0c;使用cocos creator 来解决在我们日常滚动框开发中&#xff0c;滚动和触摸存在冲突的情况&#xff0c;导致的误触行为的解决办法。 日期&#xff1a;2023年11月25日 具体事项 说明&#xff1a;在我们滚动滚动框时&#xff0c;会出现误点的情况&…