正点原子ARM裸机开发篇

news/2024/11/16 5:47:04/

裸机就是手动的操作硬件来实现驱动设备,后面会有驱动框架不需要这么麻烦

第八章 汇编 LED 灯实验

 

核心过程

通过汇编语言来控制硬件(驱动程序)

代码流程

1、使能 GPIO1 时钟

GPIO1 的时钟由 CCM_CCGR1 的 bit27 和 bit26 这两个位控制,将这两个位都设置位 11 即 可。本教程所有例程已经将 I.MX6U 的所有外设时钟都已经打开了,因此这一步可以不用做。

2、设置 GPIO1_IO03 的复用功能

找到 GPIO1_IO03 的复用寄存器“IOMUXC_SW_MUX_CTL_PAD_GPIO1_IO03”的地址为 0X020E0068,然后设置此寄存器,将 GPIO1_IO03 这个 IO 复用为 GPIO 功能,也就是 ALT5

3、配置 GPIO1_IO03(io口的属性配置)

找到 GPIO1_IO03 的配置寄存器“IOMUXC_SW_PAD_CTL_PAD_GPIO1_IO03”的地址为 0X020E02F4,根据实际使用情况,配置此寄存器

4、设置 GPIO(输出还是输入)

5、控制 GPIO 的输出电平(电平是高还是低,低就是亮高是熄灭)

汇编程序代码

.global _start  /* 全局标号 *//** 描述:	_start函数,程序从此函数开始执行此函数完成时钟使能、*		  GPIO初始化、最终控制GPIO输出低电平来点亮LED灯。*/
_start:/* 例程代码 *//* 1、使能所有时钟 */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]/* 2、设置GPIO1_IO03复用为GPIO1_IO03 */ldr r0, =0X020E0068	/* 将寄存器SW_MUX_GPIO1_IO03_BASE加载到r0中 */ldr r1, =0X5		/* 设置寄存器SW_MUX_GPIO1_IO03_BASE的MUX_MODE为5 */str r1,[r0]/* 3、配置GPIO1_IO03的IO属性	*bit 16:0 HYS关闭*bit [15:14]: 00 默认下拉*bit [13]: 0 kepper功能*bit [12]: 1 pull/keeper使能*bit [11]: 0 关闭开路输出*bit [7:6]: 10 速度100Mhz*bit [5:3]: 110 R0/6驱动能力*bit [0]: 0 低转换率*/ldr r0, =0X020E02F4	/*寄存器SW_PAD_GPIO1_IO03_BASE */ldr r1, =0X10B0str r1,[r0]/* 4、设置GPIO1_IO03为输出 */ldr r0, =0X0209C004	/*寄存器GPIO1_GDIR */ldr r1, =0X0000008		str r1,[r0]/* 5、打开LED0* 设置GPIO1_IO03输出低电平,也就算该寄存器对bit3*/ldr r0, =0X0209C000	/*寄存器GPIO1_DR */ldr r1, =0		str r1,[r0]/** 描述:	loop死循环  ,b就是跳转的意思*/
loop:b loop 				

第十一章 模仿 STM32 驱动开发格式实验

为了不用每个寄存器都定义一次,我们将同一个外设的所有寄存器都写成一个结构体,每个成员变量是每个io口对应的复用寄存器。然后通过IOMUX_SW_MUX->GPIO1_IO03”来访问 GPIO1_IO03 的 IO 复用寄存器了

第十二章 官方 SDK 移植实验

NXP 官方为 I.MX6ULL 编写了 SDK 包,在 SDK 包里面 NXP 已经编写好了寄存器定义文件, 所以我们可以直接移植 SDK 包里面的文件来用。

第十三章 BSP 工程管理实验

必须对工程文件做管理,将不同功能的源码文 件放到不同的目录中。另外我们也需要将源码文件中,所有完成同一个功能的代码提取出来放 到一个单独的文件中,也就是对程序分功能管理。

bsp 用来存放驱动文件;

imx6ul 用来存放跟芯片有关的文件,比如 NXP 官方的 SDK 库文件;

obj 用来存放编译生成的.o 文件;

project 存放 start.S 和 main.c 文件,也就是应用文件;

第十四章 蜂鸣器实验

 当 SNVS_TAMPER1 输出低电平的时候 Q1 导通,相当于蜂鸣器的正 极连接到 DCDC_3V3,蜂鸣器形成一个通路,因此蜂鸣器会鸣叫。同理,当 SNVS_TAMPER1 输出高电平的时候 Q1 不导通,那么蜂鸣器就没有形成一个通路,因此蜂鸣器也就不会鸣叫

 


http://www.ppmy.cn/news/26702.html

相关文章

网络安全高级攻击

对分类器的高层次攻击可以分为以下三种类型:对抗性输入:这是专门设计的输入,旨在确保被误分类,以躲避检测。对抗性输入包含专门用来躲避防病毒程序的恶意文档和试图逃避垃圾邮件过滤器的电子邮件。数据中毒攻击:这涉及…

linux开机自动运行python服务或者程序(转载)

进入看到AI那边写了个服务可以实现自动重启之类的 ai那边用的fastapi写的接口 后面可以研究一下 直接在调用函数如run.py封装接口 若想使用systemctl 命令则需要直接把写的 .serverce程序放到 /etc/systemd/system参考以下资料, https://blog.csdn.net/wo1823709…

JVM12 字节码指令集

1. 概述 2. 加载与存储指令 2.1. 局部变量压栈指令 iload 从局部变量中装载int类型值 lload 从局部变量中装载long类型值 fload 从局部变量中装载float类型值 dload 从局部变量中装载double类型值 aload 从局部变量中装载引用类型值(refernce) iload_0 从…

【C语言】初识结构体

Yan-英杰 悟已往之不谏 知来者之可追 目录 一、结构体的声明 二、结构体变量的定义和初始化 三、结构体成员的访问 四、结构体传参 一、结构体的声明 1.结构的基础知识 结构是一些值的集合,这些值称为成员变量。结构的每个成员可以是不同类型的变量。2.结构的…

反沙箱CobaltStrike木马加载器分析

前言 近日,笔者参加了浙江护网,在攻击队停止攻击的那一天凌晨,Windows服务器被攻破大量失分,早晨溯源时拿到了这一份名为chrome.exe的木马样本。 木马HASH SHA256:7fbe93d7c29b4ea4ce918f3d16a74d2930120f44d00862bdc0a1f82899…

查看当前主机最近文件(反沙箱)

手动 WinR输入Recent 如果最近文件夹中的数量少于n,那就可以断定这台主机大概率是沙箱。 代码 MFC框架中对最近文件列表的支持 MFC建立的标准框架程序中有记录最近操作文件的能力,这些最近文件的路径被记录到注册表,在程序运行时&…

Java多线程 - 利用Callable或CompletableFuture实现多线程异步任务执行

文章目录1. Callable接口源码2. Future接口的源码3. RunnableFuture接口和FutureTask实现类4. 利用线程池和Callable接口实现异步执行任务5. 利用CompleteFutable实现多线程异步任务执行1. Callable接口源码 FunctionalInterface public interface Callable<V> {// 这个…

三次握手四次挥手详细解析面试常问

文章目录1.第2次握手传回了ACK&#xff0c;为什么还要传回SYN&#xff1f;2.断开连接-TCP 四次挥手3.为什么要四次挥手&#xff1f;4.为什么不能把服务器发送的 ACK 和 FIN 合并起来&#xff0c;变成三次挥手&#xff1f;5.如果第二次挥手时服务器的 ACK 没有送达客户端&#x…