终于要开始单片机的Helloworld了
首先跟着手册先了解一下I.MX4ULL的IO口相关知识。

I.MX6ULL 的 IO 分为两类:SNVS 域的和通用的
他的IO口和STM32一样可以复用,需要的时候去查手册就行
I.MX6U 的 GPIO 一共有 5 组: GPIO1、GPIO2、 GPIO3、GPIO4 和 GPIO5,
其中 GPIO1 有 32 个 IO,GPIO2 有 22 个 IO,GPIO3 有 29 个 IO、GPIO4 有 29 个 IO,GPIO5
最少,只有 12 个 IO,这样一共有 124 个GPIO。每组 GPIO 8 个寄存器。我们来看一下这 8 个寄存器都是
什么含义。

DR寄存器

该寄存器是32位寄存器,每个位都对应一个GPIO,当GPIO被配置为输出功能后就会输出高电平。比如要设置 GPIO1_IO00 输出高电平,那么就应该设置 GPIO1.DR=1。当GPIO被配置为输入模式后,此寄存器就保存着对应IO的电平值。

GDIR寄存器

用来设置IO的工作方向是输入还是输出,每个IO对应一个位。如果要设置GPIO1_IO00 为输出的话,就设置GPIO1.GDIR=1。要设置 GPIO1_IO00 为输入,那么 GPIO1.GDIR=0。
PSR寄存器

PSR是状态寄存器,一个GPIO对应一个位,读取相应的位即可获得对应的GPIO状态,功能与输入状态下的DR寄存器相同

ICR1和ICR2寄存器

这俩都是中断控制寄存器,其中ICR1用来控制低16个GPIO。ICR2用于配置高16个GPIO,使用方法一样,以ICR1为例,一个GPIO用两位,这两位用来配置中断的触发方式。

00 低电平触发
01 高电平触发
10 上升沿触发
11 下降沿触发

以 GPIO1_IO15 为例,
如果要设置 GPIO1_IO15 为上升沿触发中断,
那么 GPIO1.ICR1=2<<30,
如果要设置 GPIO1 的 IO16~31 的话就需要设置 ICR2 寄存器了。

IMR寄存器


IMR寄存器是中断屏蔽寄存器,一个GPIO对应一位,用来控制GPIO的中断禁止和使能,使能中断则将相应位设置为1,禁止中断则设置成0

ISR寄存器

ISR寄存器是32位寄存器,只要GPIO的中断发生,那么ISR中相应的位就会置1,可以通过读取ISR寄存器来判断GPIO中断是否发生。

EDGE_SEL寄存器


EDGE_SEL寄存器用来设置边沿中断,这个寄存器会覆盖ICR1和ICR2的设置,一个GPIO对应一位,如果相应的位被置1,就相当于设置了对应的GPIO是双边沿触发中断,无论CR1的值设置为多少都是双边沿触发。

CCM里的外设时钟使能寄存器
CMM 有CCM_CCGR0~CCM_CCGR6 这 7 个寄存器,这 7 个寄存器控制着 I.MX6U 的所有外设时钟开关。
以CCM_CCGR0为例。


CCM_CCGR0是32位寄存器,其中每两位控制一个外设的时钟,有四种操作方式。

00 所有模式下都关闭外设时钟。
01 只有在运行模式下打开外设时钟,等待模式和停止模式下均关闭外设时钟。
10 未使用(保留)。
11 除了停止模式以外,其他所有模式下时钟都打开。

点灯开始~

看手册得知在I.MX6U开发板上,LED灯是连在GPIO_3上,另一端连载3.3V的高电平上,所以我们接下来要进行的就是把I.MX6U拉低,这样就会点亮。

1.创建工程文件

#为了以后学习方便,博主把打算将一切工程文件都放到一个文件夹下面,便于以后查阅
bj@bj-MS-7C83:~$ mkdir imx6u
bj@bj-MS-7C83:~$ cd imx6u/
bj@bj-MS-7C83:~/imx6u$ mkdir 1_bling
bj@bj-MS-7C83:~/imx6u$ cd 1_bling/
#创建汇编文件和一个.vscode目录
bj@bj-MS-7C83:~/imx6u/1_bling$ touch led.s
bj@bj-MS-7C83:~/imx6u/1_bling$ touch .vscode
bj@bj-MS-7C83:~/imx6u/1_bling$ ls -a
.  ..  led.s  .vscode

在VScode里面打开刚才创建的led.s,写入代码

.global _start @全局标号
_start:
@使能所有时钟ldr r0, =0X020C4068  /*寄存器CCGR0 */ldr r1, =0XFFFFFFFFstr r1, [r0]  @将数据写入寄存器中ldr r0, =0X020C406C /*寄存器CCGR0 */str r1, [r0]  ldr r0, =0X020C4070 /*寄存器CCGR0 */str r1, [r0]  ldr r0, =0X020C4074 /*寄存器CCGR0 */str r1, [r0]  ldr r0, =0X020C4078 /*寄存器CCGR0 */str r1, [r0]  ldr r0, =0X020C407C /*寄存器CCGR0 */str r1, [r0]  ldr r0, =0X020C4080/*寄存器CCGR0 */str r1, [r0]
@设置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]
/* 、配置 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, =0X020E02F4ldr r1, =0X10B0
/*寄存器 SW_PAD_GPIO1_IO03_BASE */str r1,[r0]
@配置 GPIO1_IO03为输出
ldr r0, =0X0209C004
ldr r1, =0X0000008
str r1,[r0]@打开LED0
ldr r0, =0X0209C000
ldr r1, =0
str r1,[r0]
loop:b loop

在终端cd到你的工程目录下,进行编译,所有C 文件和汇编文件都会生成一个对应的.o文件

bj@bj-MS-7C83:~/imx6u/1_bling$ arm-linux-gnueabihf-gcc -g -c led.s -o led.o

接下来我们需要将这些文件链接起来

arm-linux-gnueabihf-ld -Ttext 0X87800000 led.o -o led.elf

得到.elf文件后,我们还需要把他转为.bin文件

arm-linux-gnueabihf-objcopy -O binary -S -g led.elf led.bin

接下来我们需要按照NXP规则将代码烧写到SD卡中,博主使用的就是正点编写的imxdownload,将这个软件放到.bin 文件同一目录下,并且把imxdownlode的权限改为777

接下来准备一张空白的SD卡插在电脑上,首先查看一下SD卡挂载位置

ls /dev/sd*

我的sd卡就是sdb1

一开始博主这个命令是不能运行的,后来给了root权限就可以了

接下来向SD卡烧写bin文件

bj@bj-MS-7C83:~/imx6u/1_bling$ ./imxdownload led.bin /dev/sdb1


ls文件,会看到一个名为load.imx的文件出现,最终就是要把这个文件下载到SD卡中,博主一开始很憨的把这个文件复制粘贴到了sd卡,其实根本不需要,上面那个过程已经完成了代码的烧录,接下来只需要将SD卡插入开发板的SD卡槽,设置拨码开关为SD卡启动

点灯成功~

【I.MX6ULL学习笔记·五】 点灯相关推荐

  1. python函数是一段具有特定功能的语句组_Python学习笔记(五)函数和代码复用

    本文将为您描述Python学习笔记(五)函数和代码复用,具体完成步骤: 函数能提高应用的模块性,和代码的重复利用率.在很多高级语言中,都可以使用函数实现多种功能.在之前的学习中,相信你已经知道Pyth ...

  2. Ethernet/IP 学习笔记五

    Ethernet/IP 学习笔记五 Accessing data within a device using a non-time critical message (an explicit mess ...

  3. StackExchange.Redis学习笔记(五) 发布和订阅

    StackExchange.Redis学习笔记(五) 发布和订阅 原文:StackExchange.Redis学习笔记(五) 发布和订阅 Redis命令中的Pub/Sub Redis在 2.0之后的版 ...

  4. 吴恩达《机器学习》学习笔记五——逻辑回归

    吴恩达<机器学习>学习笔记五--逻辑回归 一. 分类(classification) 1.定义 2.阈值 二. 逻辑(logistic)回归假设函数 1.假设的表达式 2.假设表达式的意义 ...

  5. 好程序员教程分析Vue学习笔记五

    好程序员教程分析Vue学习笔记五,上次我们学习了Vue的组件,这次我们来学习一下路由的使用.在Vue中,所谓的路由其实跟其他的框架中的路由的概念差不多,即指跳转的路径. 注意:在Vue中,要使用路由, ...

  6. 【AngularJs学习笔记五】AngularJS从构建项目开始

    为什么80%的码农都做不了架构师?>>>    #0 系列目录# AngularJs学习笔记 [AngularJs学习笔记一]Bower解决js的依赖管理 [AngularJs学习笔 ...

  7. ROS学习笔记五:理解ROS topics

    ROS学习笔记五:理解ROS topics 本节主要介绍ROS topics并且使用rostopic和rqt_plot命令行工具. 例子展示 roscore 首先运行roscore系列服务,这是使用R ...

  8. Spring Boot 框架学习笔记(五)( SpringSecurity安全框架 )

    Spring Boot 框架学习笔记(五) SpringSecurity安全框架 概述 作用 开发示例: 1. 新建项目 2. 引入依赖 3. 编写`SecurityConfig`类,实现认证,授权, ...

  9. Java学习笔记(五):一张图总结完JVM8基础概念

    Java学习笔记(五):一张图总结完JVM8基础概念 引文 最近在学习JVM的相关内容,好不容易把基础概念全部都学了一遍,却发现知识网络是零零散散的.迫不得已,只好再来一次总的归纳总结.为了更好的理解 ...

最新文章

  1. Lenovo Setup(安装程序)
  2. 关于前端与微信交互账号绑定的问题
  3. 负载均衡下ajax第二次请求,会话清除第二个AJAX电话
  4. OpenCV A-KAZE匹配的实例(附完整代码)
  5. 苹果:确认开始在印度生产iPhone 13
  6. 曼昆《经济学原理宏观》读书笔记
  7. Flex与Ruby通过socket实现通简易文本聊天
  8. 《System语言详解》——4. 探
  9. testbench文件显示波形_如何编写testbench的总结(非常实用的总结)
  10. Java_摩尔斯密码 非常详细
  11. vue 播放m3u8视频
  12. 联想V450笔记本 加装固态硬盘
  13. OpenSSH 用户枚举漏洞(CVE-2018-15919)服务器修复方法(亲测实用)
  14. 联想服务器id显示感叹号,网卡驱动安装后显示感叹号
  15. PS把图片变透明做logo
  16. php学习基础篇之基础函数(数学 日期 字符串)、php循环流程控制
  17. 谷粒商城 -->「P01-P44」
  18. 撤销院士称号!两名原院士,被当作反面典型通报
  19. 计算机病毒通过读写或复制移动,计算机病毒除通过读写或复制移动存储器上带病毒的文件传染外,另一条主要的传染途径是...
  20. 使用Python获取股票的报表数据

热门文章

  1. 【Java SE】设计模式
  2. 计算机辅助曹瞒走华容(华容道)算法
  3. TokenInsight 关于 $DYDX 信息梳理及市场预期表现分析汇总
  4. matlab susan,matlab练习程序(SUSAN检测)
  5. 算法 图中求最小环路径 最小环个数 最大平均环 求简单无向图中环的个数
  6. 大环套小环、小环围着大环转!
  7. Android 那些事– 小米手环 测量心率 动画实现
  8. Ajax异步请求的步骤
  9. UE5打包后启动不了,求大神解决!
  10. PAT 团体程序设计天梯赛 L2-009 抢红包