ARM:day4

2023-05-16

ARM 的接口技术-裸机编程

  • 例:LED灯
  1. 根据电路图找到 LED 找到控制的管脚 GPX2_7
  2. 根据芯片手册 , 找到需要配置的地址空间地址 , 和使能值
  3. 写汇编代码 , 编译工具 : arm-gcc , 安装方式 : 把 …/bin 添加到PATH ( ~/.bashrc ) : export PATH=$PATH:.../bin ; 64支持32的支持包 : ia32-lib 安装不了 安装 apt 建议的替代品 : lib32z1 lib32ncurses5
@@汇编代码
.text

ldr r0,=0x11000c40
ldr r1,[r0]
bic r1,r1,#0xF0000000
orr r1,r1,#0x10000000
str r1,[r0]

loop:

led_on:
	ldr r0,=0x11000c44 
	ldr r1,[r0]
	orr r1,r1,#0x80
	str r1,[r0]

	bl delay_fun

led_off:
	ldr r0,=0x11000c44
	ldr r1,[r0]
	bic r1,r1,#0x80 
	str r1,[r0]

	bl delay_fun

	b loop	@@ big loop

delay_fun:
	mov r9,#0xFF00000
  delay_loop:
	sub r9,r9,#1
	cmp r9,#0
	bne  delay_loop @@ sub continue
	mov pc,lr	@@ return 

  1. 使用 makefile 编译

  1. 用 CRT 建立链接 , 传输文件

在这里插入图片描述

在这里插入图片描述
6. 执行时 : go 40008000

  • 练习 : 点亮其他灯
  1. 在外设板原理图中找到 LED2 的控制引脚为 GPX1_0
  2. 在芯片手册里面找到 GPX1CON[0] 的地址与使能位为 : 0x1100 0C20 , [3:0]
  3. 在芯片手册里面找到 GPX1DAT 的地址为 : 0x1100 0C24 , 置 [0] 位为 1 使其使能
.text

ldr r2,=0x11000c20
ldr r3,[r2]
bic r3,r3,#0x0000000F
orr r3,r3,#0x00000001
str r3,[r2]


loop:

led_on:
	ldr r2,=0x11000c24 
	ldr r3,[r2]
	orr r3,r3,#0x01
	str r3,[r2]

	bl delay_fun

led_off:
	ldr r2,=0x11000c24
	ldr r3,[r2]
	bic r3,r3,#0x01 
	str r3,[r2]

	bl delay_fun

	b loop	@@ big loop

delay_fun:
	mov r9,#0xFF00000
  delay_loop:
	sub r9,r9,#1
	cmp r9,#0
	bne  delay_loop @@ sub continue
	mov pc,lr	@@ return 
  • 作业 : 用按键 K2 控制灯 LED2 亮暗
  1. 在外设板原理图中找到 K2 的控制引脚为 GPX1_1
  2. 在芯片手册里面找到 GPX1CON[1] 的地址与使能位为 : 0x1100 0C20 , [7:4] , 使能位 0x0 Input 的输入状态
  3. 在芯片手册里面找到 GPX1DAT 的地址为 : 0x1100 0C24 , 其为输入状态时 , 所对应的 [1] 位值即为输入状态
  4. 所以在地址 0x1100 0C24 下的 [1] 位为 0 时 K2为按下状态
.text
ldr r2,=0x11000c20
ldr r3,[r2]
bic r3,r3,#0x0000000F
orr r3,r3,#0x00000001
str r3,[r2]

ldr r0,=0x11000c20
ldr r1,[r0]
bic r1,r1,#0x000000F0
orr r1,r1,#0x00000000
str r1,[r0]

loop:
ldr r4,=0x11000c24
ldr r5,[r4]
bic r5,r5,#0xFD		@@将除了[1]的位清空
orr r5,r5,#0x00		@@0||0==0
cmp r5,#0x00			@@相等表示K2已按下
beq led_on
bne led_off
led_on:
	ldr r2,=0x11000c24 
	ldr r3,[r2]
	orr r3,r3,#0x01
	str r3,[r2]
	b loop

led_off:
	ldr r2,=0x11000c24
	ldr r3,[r2]
	bic r3,r3,#0x01 
	str r3,[r2]
	b loop

.end

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ARM:day4 的相关文章

  • 如何创建静态链接共享库

    在我的硕士论文中 我尝试为 ARM Cortex M3 嵌入式系统采用共享库方法 由于我们的目标板没有 MMU 我认为使用 普通 动态共享库是没有意义的 因为 text 是直接从闪存执行的 而 data 在启动时被复制到 RAM 所以我无法
  • 如何在ARMv8-a上启用Aarch32指令集?

    Raspberry Pi 3 使用具有 ARMv8 A53 内核的 Broadcom SoC https www raspberrypi org magpi raspberry pi 3 specs benchmarks 它还使用基于 De
  • STM32内部时钟

    我对 STM32F7 设备 意法半导体的 Cortex M7 微控制器 上的时钟系统感到困惑 参考手册没有充分阐明这些时钟之间的差异 SYSCLK HCLK FCLK 参考手册中阅读章节 gt RCC 为 Cortex 系统定时器 SysT
  • 如何创建具有自定义外设和内存映射的 QEMU ARM 机器?

    我正在为 Cortex M3 cpu 编写代码 并且正在使用以下命令执行单元测试qemu arm二进制 现在一切都很好 但我想知道我是否能够使用测试整个系统qemu system arm 我的意思是 我想为 qemu 编写自定义 机器 我将
  • 理解这部分手臂的汇编代码

    syntax unified thumb cpu cortex m4 arch armv7e m fpu fpv4 sp d16 Changes from unprivileged to privileged mode thumb func
  • GNU Arm Cortex m4 上的 C++ 异常处理程序与 freertos

    2016 年 12 月更新现在还有一个关于此行为的最小示例 https community nxp com message 862676 https community nxp com message 862676 我正在使用带有 free
  • 嵌入式 C++ (ARM9) 单元测试

    我来自 Java 和 JUnit 的世界 我演示了 Hudson 以及我使用 JUnit 取得的所有成果 我想在嵌入式设备上对 C 代码执行相同的操作 但找不到从哪里开始 该项目使用 iccarm exe IAR 编译器 进行编译 现在使用
  • 将结构体偏移属性赋予汇编器

    如何将 C 结构体的偏移量发送到汇编代码 例如 在我的 C 代码中 typedef struct unsigned int a unsigned int b CMyStruct 我向 ASM 函数发送一个 CMyStruct 结构的指针 假
  • 使用 gnueabihf 为 ARMv6 构建

    我尝试为 ARMv6 构建应用程序 但失败了 我猜问题是工具链支持硬浮点 但 ARMv6 不支持 好吧 首先我设置 march armv6 编译失败 opt gcc linaro arm linux gnueabihf 4 8 2014 0
  • ARM 汇编分支到寄存器或内存内部的地址

    我想知道在 ARM 汇编中我可以使用哪条指令分支到存储在某个内存地址中的地址或标签 例如 我们可以使用B LABEL来跳转到LABEL 但现在目的地只能在运行时知道 并且它存储在某个已知的内存位置 是否有类似 B 地址 的东西 Thanks
  • 在 ARM 处理器上执行存储在外部 SPI 闪存中的程序

    我有一个 ARM 处理器 能够与外部闪存芯片连接 写入芯片的是为 ARM 架构编译的程序 可供执行 我需要知道如何将这些数据从外部闪存获取到 ARM 处理器上以供执行 我可以提前运行某种复制例程 将数据复制到可执行内存空间吗 我想我可以 但
  • 小型 ARM 微控制器的 RTOS 内核之间的可量化差异 [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 有许多不同的 RTOS 可用于微控制器 我专门寻找支持 ARM Cortex M 处理器的 RTOS 另外 我对闭源解决方案不感兴趣 试图从网站
  • 用于 RHEL 的 gdb-multiarch

    我正在尝试寻找方法来运行gdb 多架构RHEL 中的命令 我已经安装了用于 ARM 处理的 QEMU 模拟器 我想安装GDB进行调试 我能够安装GDB 多体系结构在 Ubuntu 中运行命令成功 sudo apt get GDB multi
  • 如何使用 gcc 编译代码和 ARM Cortex A8 目标进行调用图分析?

    我对这个已经咬牙切齿了 我需要在 ARM 板上进行分析并需要查看调用图 我尝试使用 OProfile Kernel perf 和 Google 性能工具 一切正常 但不输出任何调用图信息 这使我得出结论 我没有正确编译代码 我在编译 C 代
  • RAM 存储二进制数和汇编语言的冒泡排序

    我必须使用 ARM v7 执行一个例程 在 RAM 内存中存储 10 个二进制数 然后使用冒泡排序对这些数字从高到低进行排序 我应该如何开始 func bubbleSortAscendingU32 ldr r3 r0 4 mov r1 9
  • C 嵌入式应用程序中 time() 函数的问题

    我在用time 在 ARM 微控制器上 处理器一到达此函数就会重新启动 奇怪的是 当我处于调试模式时 代码运行得很好 但一旦我想将其应用到独立模式 我就会遇到重置 我是否忽略了什么 这个功能有替代品吗 代码部分是这样的 include
  • arm-thumb指令集的blx指令如何支持4MB范围

    读自https www keil com support man docs armasm armasm dom1361289866046 htm https www keil com support man docs armasm arma
  • 交叉编译 Qt 4.7 时出现“非法指令”

    我已经在这个问题上苦苦挣扎了一个多星期了 但仍然找不到解决方案 我正在尝试为 ARM 设备交叉编译 Qt 4 7 嵌入式开源版本 构建过程本身可以顺利完成 但生成的二进制文件似乎包含处理器无法理解的指令 构建主机是 i386 上的 Debi
  • 如何使用 Neon SIMD 将无符号字符转换为有符号整数

    如何转换变量的数据类型uint8 t to int32 t使用霓虹灯 我找不到执行此操作的任何内在因素 假设您想要将 16 x 8 位整数的向量转换为 4 个 4 x 32 位整数的向量 您可以通过首先解压缩为 16 位 然后再次解压缩为
  • 为什么当大小大于 50 时,该程序花费的时间会呈指数级增长?

    所以我正在为类编写一个 ARM 汇编快速排序方法 我对大部分内容都有了解 除了复杂性没有意义 我们将其与我们制作的另一种冒泡排序方法进行比较 它对于具有 1 个参数和 10 个参数的示例表现更好 然而 我什至无法比较 100 个参数测试 因

随机推荐

  • Linux各种(常用)编辑器

    了解如何通过命令行快速有效地编辑文件对每个Linux系统管理员都至关重要 文件编辑每天执行 xff0c 无论是配置文件 xff0c 用户文件 xff0c 文本文档还是您需要编辑的任何文件 这就是为什么选择一个喜欢的命令行文本编辑器并掌握它的
  • C语言实现1/1-1/2+1/3-...-1/100求和

    观察题目要求可以看出 xff0c 底数为奇数是前面符号为正 xff0c 偶数是则为负 那么我们可以考虑使用一下方式完成求解 解法一 xff1a span class token macro property span class token
  • 什么是localhost(127.0.0.1)?

    什么是本地主机 xff1f 当你在计算机上 ping IP地址时 xff0c 你尝试联系互联网上的另一台计算机 xff0c 但是当你ping IP地址127 0 0 1时 xff0c 你正在与本地主机通信 localhost 始终是你自己的
  • OpenCV图像处理技术——图像直方图

    OpenCV图像处理技术 图像直方图 Fu Xianjun All Rights Reserved 图像直方图 图像直方图是图像内灰度值的统计特性与图像灰度值之间的函数 xff0c 直方图统计图像内各个灰度级出现的次数 直方图是数值数据分布
  • 【wireshark】Ubuntu 安装 wireshark 以及 wireshark 过滤器的使用

    目录 1 安装wireshark 2 wireshark 过滤器比较符号 3 wireshark 过滤方式 1 根据 IP 地址过滤 2 根据端口号过滤 3 根据报文长度过滤 4 HTTP协议过滤 参考文章链接 xff1a Wireshar
  • C++学习001:对象、可扩展性、编译型语言、相较于C的变化

    1 面向对象 基于对象 基于过程的区别 基于过程 xff1a 从上到下依次执行 xff0c C语言 cpp额外实现了基于对象和面向对象 基于对象 xff1a 类作为结构 类的成员作为对象 基于对象就是通过封装对象方便了程序过程中发生的突发事
  • Arduino基础入门篇23—串口通讯

    在很多时候 xff0c Arduino需要和其他设备相互通讯 xff0c 而最常见最简单的方式就是串口通讯 本篇介绍Arduino硬件串口通讯 xff0c 了解相关函数的使用 1 硬件串口 在PC机上最常见的串行通讯协议是RS 232串行协
  • 基于Qt的车载GPS监控系统(7)数据记录

    基于Qt的车载GPS监控系统 xff08 7 xff09 数据记录 数据日志显示界面 系统数据记录功能实现说明 1 通过一个线程定时记录系统当前的温度数据 2 通过数据日志界面显示保存的日志数据 数据记录线程代码 span class hl
  • 嵌入式系统重定向printf的三种方法

    对printf 进行重定向的三种方法 方法1 使用MircoLib并重定义fputc方法2 停用半主机模式 xff0c 在MDK中使用标准库重定向printf 方法3 在Gcc中使用标准库重定向printf 1 MDK使用MircoLib并
  • Windows API程序入门学习(1)

    导航 Windows API程序入门学习 xff08 1 xff09 学习目的作业要求实现步骤参考书籍实现代码运行结果 Windows API程序入门学习 xff08 1 xff09 学习目的 了解 windows操作系统应用程序开发的基本
  • 嵌入式系统基础学习笔记(四)

    目录 一 GDB调试简例1 1 例11 2 例2 二 OpenCV入门2 1 在Windows下使用OpenCV 3 4 82 1 1 OpenCV的安装与配置2 1 2 一个简单的OpenCV对图片特效显示例子 2 2 在Ubuntu18
  • 计算机网络实验报告(二):Wireshark 实验

    文章目录 一 数据链路层二 网络层三 传输层四 应用层 本部分按照数据链路层 网络层 传输层以及应用层进行分类 xff0c 共有 10 个实验 需要使用协议分析软件 Wireshark 进行 xff0c 请根据简介部分自行下载安装 准备 请
  • 计算机网络实验报告(三):Cisco Packet Tracer 实验

    文章目录 一 CPT 软件使用简介二 直接连接两台 PC 构建 LAN三 用交换机构建 LAN四 交换机接口地址列表五 生成树协议 xff08 Spanning Tree Protocol xff09 六 路由器配置初步说明一说明二说明三说
  • 嵌入式系统应用开发实验(一)

    文章目录 一 设计半加器二 半加器组成全加器三 烧录进硬件 实验目的 xff1a 通过1位全加器的详细设计 xff0c 掌握原理图输入以及Verilog的两种设计方法 软件基于quartusII 13 0版本 xff0c 开发板基于Inte
  • 关于浏览器以及各种内置浏览器造成黑屏的解决办法

    楼主在使用Chrome Edge浏览器甚至Steam时经常会发生网页还没打开就会发生 浏览器黑屏 电脑黑屏 自动重启 的过程 xff0c 困扰许久 网上的大部分教程是在浏览器设置里面关闭 硬件加速 功能 甚至于重装系统 但是经过实测 xff
  • 【FFTW库】编译生成 x86、arm 环境下的FFTW库

    FFTW是一个快速计算离散傅里叶变换的标准C语言程序集 xff0c 可计算一维或多维实和复数据以及任意规模的DFT 下面主要介绍的是 x86 环境下 FFTW库的编译过程 xff0c arm环境下的编译过程和FFTW类似 xff0c 不同之
  • C语言学习笔记w2d4

    文章目录 流程控制二循环语句gotowhile练习 do whilefor breakcontinue 作业 流程控制二 循环语句 循环的开始条件 循环的控制条件 循环的结束条件 goto 无条件跳转 xff0c 跳转到指定位置执行 xff
  • C语言学习笔记w2d5

    文章目录 数组一维数组练习字符数组字符串输入与输出 练习 多维数组 作业 数组 一维数组 用一个变量来存储具有一定关系的数据 xff0c 的数据集合叫数组 其中存储的变量是数组元素 a span class token punctuatio
  • Linux基础与C高级w3d4:linux的文件管理(续)、了解shell编程

    管道 作用 xff1a 把一个命令的结果作为另一个命令的输入参数 符号 xff1a 用法 xff1a ls grep test 用户管理 切换用户 xff1a su 用户名 修改用户密码 xff1a sudo passwd 用户 注册用户
  • ARM:day4

    ARM 的接口技术 裸机编程 例 xff1a LED灯 根据电路图找到 LED 找到控制的管脚 GPX2 7根据芯片手册 找到需要配置的地址空间地址 和使能值写汇编代码 编译工具 arm gcc 安装方式 把 bin 添加到PATH bas