一、GPIO的操作方法(参考)

二、看原理图找到一个led灯,确定引脚(搜索led)

如图所示:
① 将GPIO5_3设置为输出引脚,输出低电平有压差灯就亮,输出高电平就灭
② 将GPIO5_3设置为GPIO模式需要操作的寄存器是SNVS_TAMPER3

三、查看imx6ull的芯片手册

1.打开CCM (clock controller module) :其中各种子模块中有GPIO模块

上图所示:控制每组GPIO是否使能的寄存器(imx6ull默认都是使能的
其中CCGP1[CG15]控制的是GPIO5的是否使能

2.打开IOMUX Controller

往下划

上图显示,每一个引脚都有一个寄存器去设置其工作为什么模式

芯片手册中搜索SNVS_TAMPER3寄存器

图片中涉及:
① 该寄存器的地址(基地址+偏移地址)
② 将bit3-bit0设置为101,即可将该引脚设置为GPIO模式

3.打开GPIO章节

直接看寄存器吧:

上图:
① 第二个寄存器设置的是:输入输出模式
② 第一个寄存器设置的是:output模式:高/低电平(1/0)
③ 第三个寄存器(引脚状态寄存器)设置的是:input模式
上图为GPIOx的方向寄存器,一个bit代表一个引脚,设置为0为input输入,设置为1位output输出,另外两个寄存器类似

查看上图中的基地址:可以直接搜索该寄存器获取基地址/绝对地址
如:

四、C语言实现点灯操作
1. main函数

void delay(volatile int d)
{while(d--);
}int main(void)
{volatile unsigned int *pReg;   /* 加上volatile是为了告诉编译器这个寄存器的操作是易变的,编译器不要去优化这个寄存器 *//* 假设我不加上这个volatile,让pReg =     tmp,这条语句很有可能会编译器优化掉 *//* 使能GPIO5 *//* 对于imx6ull来说,GPIO5默认就是使能状态,无需操作 *//* 把GPIO5_3设置为GPIO功能 */   pReg = (volatile unsigned int *)(0x02290000 + 0x14);*pReg |= (0x5);      /* 将pReg中的内容取出来然后,将bit0和bit3位写成1 */ /* 把GPIO5_3设置为输出引脚 */pReg = (volatile unsigned int *)(0x020AC004);*pReg |= (1<<3);pReg = (volatile unsigned int *)(0x020AC000);while(1){/* 设置GPIO5_3输出1 */*pReg |= (1<<3);delay(1000000);/* 设置GPIO5_3输出0 */*pReg &= ~(1<<3);delay(1000000);}
}

2.汇编文件代码

.text
.global  _start
_start:     /* 使能GPIO5 *//* 对于imx6ull来说,GPIO5默认就是使能状态,无需操作 *//* 把GPIO5_3设置为GPIO功能 */LDR R0, =0x02290014LDR R1, [R0]ORR   R1, R1, #0X5STR R1, [R0]/* 把GPIO5_3设置为输出引脚 */LDR R0, =0x020AC004LDR R1, [R0]ORR R1, R1, #(1<<3)STR R1, [R0]LDR R2, =0x020AC000Loop:/* 设置GPIO5_3输出1 */LDR R1, [R2]ORR R1, R1, #(1<<3)STR R1, [R2]LDR R0, =1000000BL Delay /* 当我们用BL指令来调用Delay函数的时候,LR寄存器就会保存下一条指令的地址,当Delay函数执行完毕了,Delay函数就会将LR赋给PC,就会返回来 *//* 设置GPIO5_3输出0 */LDR R1, [R2]BIC R1, R1, #(1<<3)STR R1, [R2]LDR R0, =1000000BL DelayB LoopDelay:SUBS R0, R0, #1BNE DelayMOV PC, LR

用C/汇编代码实现imx6ull点灯相关推荐

  1. 实验四:使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用

    贺邦+原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 实验目的: 使用库函数 ...

  2. GCC生成的汇编代码

    假设我们写了一个C代码文件 code.c包含下面代码: int accum = 0; int sum(int x, int y) {     int t = x + y;     accum += t ...

  3. C++ 汇编代码查看

    文章目录 gcc 编译为汇编代码 使用 as 展示汇编代码 使用 objdump 进行反汇编 使用 godbolt 可视化结果 gcc 编译为汇编代码 原始C++代码如下: #include &quo ...

  4. 通过汇编一个简单的C程序,分析汇编代码理解计算机是如何工作的

    实验目的: 通过反汇编一个简单的C程序,分析汇编代码理解计算机是如何工作的 实验过程: 通过vi程序进行编程: int g(int x) { return x + 3; } int f(int x) ...

  5. 实验四:汇编代码调用系统调用的工作过程

    钟晶晶 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 工作过程 以41 ...

  6. C++对象模型3——vptr的位置、手动调用虚函数、从汇编代码看普通调用和多态调用

    一.vptr的位置 class test { public:int i; virtual void testfunc() {} };int main() {test a;char* p1 = rein ...

  7. 修改vb6的编译器c2.exe使它可以输出汇编代码_xv6笔记-启动代码分析

    首先看xv6 commit的第一个makefile OBJS = main.o CC = i386-jos-elf-gcc LD = i386-jos-elf-ld OBJCOPY = i386-jo ...

  8. C 语言编程 — 结构化程序流的汇编代码与 CPU 指令集

    目录 文章目录 目录 文章目录 为什么要保留汇编语言 顺序程序流 条件程序流 循环程序流 函数调用栈的工作原理 文章目录 <C 语言编程 - GCC 工具链> <C 语言编程 - 程 ...

  9. gdb 查看,执行汇编代码

    用gdb 查看汇编代码, 采用disassemble 和 x 命令. nexti, stepi 可以单步指令执行 如下例: -------------------------------------- ...

最新文章

  1. android好用的第三方库2018使用总结
  2. ios 开发日记 21 -自动处理键盘事件的第三方库:IQKeyboardManager
  3. Knative Eventing 中 Channel 如何注入默认 Provisioner
  4. unix环境高级编程 pdf_UNIX环境高级编程——记录锁
  5. 从此走上一条iOS程序猿不归路。。。
  6. numpy+pandas+matplotlib画箱形图
  7. MySQL性能医生:Orzdba工具安装和使用
  8. (万里开源)greatdb mysql 8.0以上版本创建用户并授权远程连接
  9. Linux中同步MySQL
  10. php 中c函数重载,php函数重载的替代方法--伪重载详解
  11. python远程linux服务器执行命令_基于使用paramiko执行远程linux主机命令(详解)
  12. [转载]ASPNET MVC表格呈现利器:MvcContrib.UI.Grid
  13. Hyper-v中安装centos网卡故障
  14. oracle----globle temp table
  15. win10 LTSC 2019 激活
  16. VLAN与Trunk的配置
  17. 自动整理html书签,技巧:使用 Excel 快速整理重复书签丨Matrix 精选
  18. JAVA小乌龟游泳_描写乌龟游泳的作文
  19. JVM Advent Calendar:JCP.NEXT,简化了JCP程序
  20. 计算机网怎样连接网络连接不上,网络连接不上,详细教您电脑网络连接不上怎么解决...

热门文章

  1. 法国西南华人华侨商会:进军区块链行业,促进技术创新项目落地
  2. Could not open a connection to SQL Server [53]
  3. summer框架API--summer.download
  4. 集美大学第七届团体程序设计天梯赛第二场排位赛题解
  5. 企业微信如何建立部门?
  6. Vue3中 watch、watchEffect 详解
  7. oracle转换成字符型,Oracle中将Clob字段转换成字符串
  8. Unity2018新功能之2D Animation2D动画
  9. PC端如何同时登录多个微信账号
  10. 引擎之旅 前传:C++代码规范