【Linux-ubuntu通过USB传输程序点亮LED灯】

Linux-ubuntu通过USB传输程序点亮LED灯

  • 一,初始化GPIO配置
    • 1.使能时钟
    • 2.其他寄存器配置
  • 二,程序编译
  • 三,USB传输程序

一,初始化GPIO配置

1.使能时钟

使能就是一个控制信号,用于决定时钟信号是否能够有效的传递或者被使用,就像一个开关,当使能信号有效时,时钟信号能够正常工作。每个模块都有自己的工作时钟,通过控制使能信号控制每个模块的时钟输入,能够实现启动或停止这个模块的工作。

2.其他寄存器配置

复用功能(MUX_MODE),由于LDE等连接在GOIP1-IO03上,因此将复用功能设置为该GPIO打开。
电器属性(pad settings),比如低转换率,驱动能力,传输速度等。
IO作为GPIO时,要设置八个寄存器,DR、GDIR、PSR、ICR1、ICR2、EDGE_SEL、IMR 和 ISR,对于点灯,设置GDIP为输出模式,DR设置为低电平,即让GPIO1-IO03输出低电平。(设置为0,即开灯,设置为0x8开灯,因为这个灯对应的是bit3)。

在这里插入图片描述

二,程序编译

	建立ldes.s文件,编写汇编程序:
.global _start /**/
_start:
/*使能外部时钟 */
ldr r0,=0x020c4068 @ccgr0
ldr r1,=0xffffffff
str r1,[r0]

ldr r0,=0x020c406c @ccgr1
str r1,[r0]

ldr r0,=0x020c4070 @ccgr2
str r1,[r0]

ldr r0,=0x020c4074 @ccgr3
str r1,[r0]

ldr r0,=0x020c4078 @ccgr4
str r1,[r0]

ldr r0,=0x020c407c @ccgr5
str r1,[r0]

ldr r0,=0x020c4080 @ccgr6
str r1,[r0]

/*IO复用,配置为GPIO1-I003*/
ldr r0,=0x020e0068 @寄存器地址
ldr r1,=0x000005  @设置为0101
str r1,[r0]

/* 配置电器属性*/

ldr r0,=0x020e02f4
ldr r1,=0x10b0
str r1,[r0]

/*设置GPIO1-I003输出 */
ldr r0,=0x0209c004
ldr r1,=0x00000008
str r1,[r0]

/*设置GPIO1-I003为低点平 */
ldr r0,=0x0209c000
ldr r1,=0
str r1,[r0]

loop:
    b loop


    

将leds.s转化为led.o文件:arm-linux-gnueabihf-gcc -g -c leds.s -o led.o
将led.o转化为led.elf文件:arm-linux-gnueabihf-ld -Ttext 0x87800000 led.o -o led.elf
将led.elf转化为为bin文件:arm-linux-gnueabihf-objcopy -O binary -S -g led.elf led.bin
为了以后检查方便,反编译:arm-linux-gnueabihf-objdump -D led.elf > led.dis

三,USB传输程序

最终放到板子上的是imx类型文件,是镜像文件,这种镜像文件格式这个镜像文件包含了设备启动和运行所需的软件程序以及配置信息。镜像文件包含头部(Header:用于描述镜像文件的版本,大小和目标设备型号),代码段(处理器可执行的机器码指令),数据段(存储全局变量,常量)以及校验和等,打包成imx文件,通过下载uuu工具,直接不用读卡器就能传输到板子的闪存中。
bin文件时纯粹的二进制代码流,imx在此基础上添加头部信息等,便于设备的识别,与hex文件类似,都可存储固件的内容,但格式上不一样,hex更方便阅读(十六进制文本文件),imx更侧重设备直接识别。

Makefile:

led.bin : leds.s
	arm-linux-gnueabihf-gcc -g -c leds.s -o led.o
	arm-linux-gnueabihf-ld -Ttext 0x87800000 led.o -o led.elf
	arm-linux-gnueabihf-objcopy -O binary -S -g led.elf led.bin
	arm-linux-gnueabihf-objdump -D led.elf > led.dis
clean:
	rm -rf *.o led.bin led.elf led.dis load.imx
run:
	cat header led.bin > load.imx
	sudo ./uuu load.imx

①在终端输入,安装USB传输工具:sudo snap install universal-update-utility
②在文件夹下添加header和uuu文件。
③将设备确保插到ubuntu上,并且USB线插到正点原子开发板的OTG接口,不是TTL接口。
④确保SD卡要拔出,并且将拨码开关的2打开,on。
⑤在终端运行make后,再运行make run,即可。
在这里插入图片描述
**header和uuu文件:链接: https://pan.baidu.com/s/1r66P0TqRS74JrOyyks-pHQ 提取码: 6666

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

django——admin后台管理1

一、admin后台管理 访问url进入: http://127.0.0.1:8000/admin ​ 创建超级管理用户 终端输入以下命令: python manage.py createsuperuser (py36_pingping) E:\django学习\day03-django入门\demo>python manage.py createsuperuser Username: mo…

Jenkins与SonarQube持续集成搭建及坑位详解

Jenkins和SonarQube都是软件开发过程中常用的工具,它们在代码管理、构建、测试和质量管理方面发挥着重要作用。以下是关于Jenkins与SonarQube的作用及整合步骤环境搭建的详细解释: 一、Jenkins与SonarQube的作用 Jenkins: Jenkins是一个开源的持续集成和交付工具,它可以帮…

Docker安装MySQL5.5版本数据库(图文教程)

本章教程,介绍如何使用Docker安装MySQL低版本5.5版本的数据库。 一、拉取镜像 docker pull mysql:5.5二、启动容器 docker run -d --name mysql5.5 --restart=always

Qt实现自定义行编辑器

引言 开发环境项目结构ui界面设计示例代码运行效果总结qt中原有的行编辑器无法满足当前的需要,所以需要自定义行编辑器。 通过上下按键切换到不同的行编辑器,在选中的行编辑器中输入数字,编辑器呈现边框,编辑后按下回车键保存之前编辑的数值,没有按下回车键直接切换上下键…

贺!伊克罗德携手九科信息共同发布RPA+AI智能机器人解决方案「ECRobot」

12月12日,伊克罗德信息在上海举办 “创见AI,迈进智能化未来——科技赋能零售电商”活动,与九科信息、亚马逊云科技共同探讨与分享融合生成式AI技术和智能自动化(RPA,Robotic Process Automation)在电商零售…

AI技术架构:从基础设施到应用

人工智能(AI)的发展,正以前所未有的速度重塑我们的世界。了解AI技术架构,不仅能帮助我们看懂 AI 的底层逻辑,还能掌握其对各行业变革的潜力与方向。 一、基础设施层:AI 技术的坚实地基 基础设施层是 AI 技…

【每日刷题】Day169

【每日刷题】Day169 🥕个人主页:开敲🍉 🔥所属专栏:每日刷题🍍 🌼文章目录🌼 1. 718. 最长重复子数组 - 力扣(LeetCode) 2. 2269. 找到一个数字的 K 美丽值…

国科大智能设备安全-APK逆向分析实验

APK逆向分析实验 使用APK常用逆向分析工具,对提供的移动应用程序APK文件进行逆向分析,提交逆向后代码和分析报告。具体任务如下: 任务一:安装并熟悉Apktool、Jadx等APK常用逆向工具的使用方法,对提供的Facebook Updat…

医学图像分割数据集腹部肝脏多器官图像分割数据集labelme格式860张10类别

数据集格式:labelme格式(不包含mask文件,仅仅包含jpg图片和对应的json文件) 图片数量(jpg文件个数):860 标注数量(json文件个数):860 标注类别数:10 标注类别名称:["liver","stomach","o…

EasyExcel设置表头上面的那种大标题(前端传递来的大标题)

1、首先得先引用easyExcel的版本依赖&#xff0c;我那 <dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>2.2.6</version> </dependency> 2、然后得弄直接的实体类&#xff0c;&…

数据仓库-集群管理

主要介绍操作类问题中的集群管理问题。 无法成功创建数据仓库集群时怎么处理&#xff1f; 请检查用户账户余额是否少于100元&#xff0c;是否已经没有配额创建新的数据仓库集群&#xff0c;以及是否存在网络问题。 如账户余额、配额、网络均未发现问题&#xff0c;请联系客户…

双目摄像头标定方法

打开matlab 找到这个标定 将双目左右目拍的图像上传&#xff08;左右目最好不少于20张&#xff09; 等待即可 此时已经完成标定&#xff0c;左下角为反投影误差&#xff0c;右边为外参可视化 把这些误差大的删除即可。 点击导出 此时回到主页面&#xff0c;即可看到成功导出 Ca…

python学opencv|读取图像(七)抓取像素数据顺利修改图像大小

【1】引言 前序我们已经学习图像的基本读取操作&#xff0c;文章链接为&#xff1a; python学opencv|读取图像-CSDN博客 也掌握了彩色图像的保存&#xff1a; python学opencv|读取图像&#xff08;二&#xff09;保存彩色图像_python opencv 读取图像转为彩色-CSDN博客 以…

【论文阅读笔记】One Diffusion to Generate Them All

One Diffusion to Generate Them All 介绍理解 引言二、相关工作三、方法预备知识训练推理实现细节训练细节 数据集构建实验分结论附录 介绍 Paper&#xff1a;https://arxiv.org/abs/2411.16318 Code&#xff1a;https://github.com/lehduong/onediffusion Authors&#xff1…

【橘子容器】如何构建一个docker镜像

你肯定打过docker镜像是吧&#xff0c;作为一个开发这很正常&#xff0c;那么你用的什么打包方式呢&#xff0c;这里我们来梳理几种常用的docker镜像构建方式。 ps&#xff1a;这里不是太讲原理&#xff0c;更多的是一种科普和操作。因为讲原理的东西网上已经够多了。 一、Dock…

神经网络基础-激活函数

文章目录 1. 什么是激活函数2. sigmoid 激活函数3. tanh 激活函数4. ReLU 激活函数5. SoftMax 激活函数6. 其他常见的激活函数7. 激活函数的选择方法 1. 什么是激活函数 激活函数用于对每层的输出数据进行变换, 进而为整个网络注入了非线性因素。此时, 神经网络就可以拟合各种…

开源低代码平台-Microi吾码-平台简介

Microi吾码-平台介绍 开源低代码平台-Microi吾码-平台简介预览图平台亮点版本区别成功案例源码目录说明Microi吾码 - 系列文档 开源低代码平台-Microi吾码-平台简介 技术框架&#xff1a;.NET8 Redis MySql/SqlServer/Oracle Vue2/3 Element-UI/Element-Plus平台始于2014年…

Rust之抽空学习系列(三)—— 编程通用概念(中)

Rust之抽空学习系列&#xff08;三&#xff09;—— 编程通用概念&#xff08;中&#xff09; 1、变量&可变性 在Rust中&#xff0c;变量默认是不可变的 fn main() {let x 5;println!("x is {}", x); }使用let来声明一个变量&#xff0c;此时变量默认是不可变…

【经典】制造供应链四类策略(MTS、MTO、ATO、ETO)细说

关注作者 制造供应链的牛鞭问题与复杂问题主要是从两个方面解决&#xff0c;一是同步化供应链消减从需求到供应的放大效应&#xff0c;二是供应链细分&#xff0c;针对不同的客户、不同的需求供应的匹配策略来应对复杂性&#xff0c;更好的满足客户并以最低的总成本来实现。 对…

多模态大模型(二)——用Transformer Encoder和Decoder的方法(BLIP、CoCa、BEiTv3)

文章目录 BLIP: Bootstrapping Language-Image Pre-training for Unified Vision-Language Understanding and Generation 理解、生成我都要&#xff0c;一个很有效的、根据图片生成caption的工具1. BLIP的研究动机2. BLIP的模型结构3. CapFilt Model4. BLIP的训练过程 CoCa: C…