裸机就是手动的操作硬件来实现驱动设备,后面会有驱动框架不需要这么麻烦
第八章 汇编 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 不导通,那么蜂鸣器就没有形成一个通路,因此蜂鸣器也就不会鸣叫