当前位置: 首页 > news >正文

正点原子阿尔法ARM开发板-IMX6ULL(三)——汇编LED驱动实验-上

文章目录

  • 一、原理分析
    • 1.1 对于IMX6ULL的IO初始化
    • 1.2 IO的复用(MUX)
    • 1.3 电气属性寄存器(PAD)
      • 1.3.1 SRE(bit0)
      • 1.3.2 DSE(bit5:3)
      • 1.3.3 SPEED(bit7:6)
      • 1.3.4 ODE(bit11)
      • 1.3.5 PKE(bit12)
      • 1.3.6 PUE(bit13)
      • 1.3.7 PUS(bit15:14)
      • 1.3.8 HYS(bit16)
    • 1.4 配置GPIO
  • 二、汇编补充
  • 三、驱动编写
    • 3.1 使能CCGR
    • 3.2 选择复用方式

一、原理分析

初始化一些SOC外设,
SOC外设通常包括但不限于以下几种:存储器管理单元(MMU)、通用输入/输出(GPIO)接口、并行和串行接口(如USB、SPI、I2C等)、定时器和计数器、中断控制器、模拟和数字信号处理模块等。

初始化DDR ,IMX6ULL、一般将SP指针指向DDR、设置好C语言环境

1.1 对于IMX6ULL的IO初始化

使能时钟,CCGR0 ~ CCGR6这7个寄存器控制着IMX6ULL所有外设时钟的使能。为了简单,设置CCGR0 ~ CCGR6这7个寄存器全部为OXFFFFFFFF.相当于使能所有外设时钟。
一个有两位,当都设为11,是即全部使能,当7个都是11时,即全部使能

1.2 IO的复用(MUX)

寄存器IOMUXC_SW_MUX_CTL_PAD_GPIO1_IO03
首先根据LED所在端口时GPIO1_3,确定端口号,之后查看参考手册寻找复用
在这里插入图片描述
只有右下角的4位是对于模式进行选择
在这里插入图片描述
每一个值,就是一种模式,设置为0101=5,就复用为GPIO了

1.3 电气属性寄存器(PAD)

寄存器IOMUXC_SW_PAD_CTL_PAD_GPIO1_IO03是设置GPIO3的电气属性,包括压摆率、速度、驱动能力、开漏、上下拉等
在这里插入图片描述

1.3.1 SRE(bit0)

SRE是设置压摆率,,设置压摆率,当此位为0的时候是低压摆率,当为1的时候是高压摆率。这里的压摆率就是 IO电平跳变所需要的时间,比如从0到1需要多少时间,时间越小波形就越陡,说明压摆率越高;反之,时间越多波形就越缓,压摆率就越低。如果你的产品要过 EMC的话那就可以使用小的压摆率,因为波形缓和,如果你当前所使用的 IO做高速通信的话就可以使用高压摆率

由于不要过EMC检测,所以设置为0

1.3.2 DSE(bit5:3)

用来设置 IO的驱动能力,
在这里插入图片描述
位数字越大,电阻越小,驱动能力越强

1.3.3 SPEED(bit7:6)

当IO用作输出,SPEED就是设置IO速度
在这里插入图片描述

1.3.4 ODE(bit11)

当 IO作为输出的时候,此位用来禁止或者使能开路输出,此位为0的时候禁止开路输出, 当此位为1的时候就使能开路输出功能。

1.3.5 PKE(bit12)

此位用来使能或者禁止上下拉 /状态保持器功能,为0时禁止上下拉 /状态保持器,为 1时使能上下拉和状态保持器。

1.3.6 PUE(bit13)

作为输入的时候,这个位用来设置 IO使用上下拉还是状态保持器。当为 0的时候使用状态保持器,当为 1的时候使用上下拉。状态保持器在

1.3.7 PUS(bit15:14)

设置上拉和下拉
在这里插入图片描述

1.3.8 HYS(bit16)

迟滞比较器(没看懂)

在整理这些电气属性时,不需要全部搞懂

1.4 配置GPIO

配置输入输出

在这里插入图片描述
设置GP1O_DR寄存器bit3为1.也就是设置为输出模式。设置GPIO_DR寄存器的bit3.为1表示输出高电平,为0表示输出低电平。·

二、汇编补充

对于MOV,MOVS以及LDR和STR是最常用的

LDR是,可以将一个地址进行保存(可以用立即数表达地址,然后这段地址的别名就是寄存器Rx中,而LDR中,[Rx],表示取值,即Rx表示地址,[Rx]表示这个地址上所存储的值)
在这里插入图片描述
STR指令就是写入,
STR R1, [R0] @表示R1的值写入R0所在地址中,也即覆盖了[R0]原本的值
在这里插入图片描述

在这里插入图片描述
这段汇编就是 a=b
解释一下:
第一行:将B的地址立即数,存入R0
第二行:读取B地址的数放入R1
第三行:将A的地址立即数,存入R0
第四行:将R1(此时不用中括号)中的值写入R0(R0需要中括号)

三、驱动编写

3.1 使能CCGR

首先打开linux操作系统,创建文件夹、工作区。
之后根据的原理分析的步骤写汇编
第一步就是把,CCGR的寄存器全部使能,需要找到地址,进入参考手册18章,找到
在这里插入图片描述

    ldr r0, =0x020C4068 @写入CCGR0的地址ldr r1, =0xFFFFFFFF @要写入的数据(全部使能)str r1, [r0]        @写入CCGR0ldr r0, =0x020C406C @写入CCGR1的地址(由于CCGR都是紧挨着的,每个间隔4位)str r1, [r0]        @写入CCGR1ldr r0, =0x020C4070 @写入CCGR2的地址str r1, [r0]        @写入CCGR2ldr r0, =0x020C4074 @写入CCGR3的地址str r1, [r0]        @写入CCGR3ldr r0, =0x020C4078 @写入CCGR4的地址str r1, [r0]        @写入CCGR4ldr r0, =0x020C407C @写入CCGR5的地址str r1, [r0]        @写入CCGR5ldr r0, =0x020C4080 @写入CCGR6的地址str r1, [r0]        @写入CCGR6

3.2 选择复用方式

下一步就是配置复用方式,由于LED是GPIO3控制,所以找到
在这里插入图片描述

    /*配置GPIO1_3,使复用方式变为GPIO写入0101,即5寄存器是IOMUXC_SW_MUX_CTL_PAD_GPIO1_IO03*/ldr r0, =0x020E0068 @写入IOMUXC_SW_MUX_CTL_PAD_GPIO1_IO03的地址ldr r1, =0x5        @要写入的数据str r1, [r0]        @写入

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • docker conda
  • 【Postgresql】地理空间数据的存储与查询,查询效率优化策略,数据类型与查询速度的影响
  • 国家商用密码算法——SM4、SM7、SM9
  • 一区霜冰算法+双向深度学习模型+注意力机制!RIME-BiTCN-BiGRU-Attention
  • C语言 ——— 学习并使用条件编译指令
  • 【佳学基因检测】如何使用Letsencrypt对一个网站进行加密?
  • 【Python常用库_1】网络安全清洁专家——Bleach
  • TiDB-从0到1【完结】
  • 细致刨析JDBC ① 基础篇
  • Windows10 如何配置python IDE
  • Apple Intelligence深夜炸场!苹果发布4颗自研芯片,iPhone/iWatch/AirPods大升级
  • 专业级PDF编辑神器大比拼:效率与功能并重的选择
  • 【日常记录-Java】SpringBoot中使用无返回值的异步方法
  • Docker基础-Docker Compose使用
  • 大数据与人工智能:脑科学与人工神经网络ANN
  • [Vue CLI 3] 配置解析之 css.extract
  • ABAP的include关键字,Java的import, C的include和C4C ABSL 的import比较
  • Java|序列化异常StreamCorruptedException的解决方法
  • Linux gpio口使用方法
  • Python十分钟制作属于你自己的个性logo
  • Vue实战(四)登录/注册页的实现
  • 回流、重绘及其优化
  • 猫头鹰的深夜翻译:JDK9 NotNullOrElse方法
  • 如何设计一个比特币钱包服务
  • -- 数据结构 顺序表 --Java
  • 微信支付JSAPI,实测!终极方案
  • 小程序button引导用户授权
  • 硬币翻转问题,区间操作
  • 运行时添加log4j2的appender
  • 再谈express与koa的对比
  • MyCAT水平分库
  • Nginx实现动静分离
  • # Maven错误Error executing Maven
  • # SpringBoot 如何让指定的Bean先加载
  • # 详解 JS 中的事件循环、宏/微任务、Primise对象、定时器函数,以及其在工作中的应用和注意事项
  • ### RabbitMQ五种工作模式:
  • #我与Java虚拟机的故事#连载04:一本让自己没面子的书
  • (14)学习笔记:动手深度学习(Pytorch神经网络基础)
  • (33)STM32——485实验笔记
  • (C语言)球球大作战
  • (day 12)JavaScript学习笔记(数组3)
  • (备忘)Java Map 遍历
  • (编程语言界的丐帮 C#).NET MD5 HASH 哈希 加密 与JAVA 互通
  • (差分)胡桃爱原石
  • (超简单)构建高可用网络应用:使用Nginx进行负载均衡与健康检查
  • (创新)基于VMD-CNN-BiLSTM的电力负荷预测—代码+数据
  • (带教程)商业版SEO关键词按天计费系统:关键词排名优化、代理服务、手机自适应及搭建教程
  • (附源码)spring boot校园健康监测管理系统 毕业设计 151047
  • (附源码)ssm航空客运订票系统 毕业设计 141612
  • (几何:六边形面积)编写程序,提示用户输入六边形的边长,然后显示它的面积。
  • (精确度,召回率,真阳性,假阳性)ACC、敏感性、特异性等 ROC指标
  • (强烈推荐)移动端音视频从零到上手(上)
  • (十二)devops持续集成开发——jenkins的全局工具配置之sonar qube环境安装及配置
  • (算法)硬币问题
  • (限时免费)震惊!流落人间的haproxy宝典被找到了!一切玄妙尽在此处!