Linux之ARM(IMX6U)裸机汇编LED驱动实验--驱动编写_iomuxc_sw_pd_ctl-程序员宅基地

技术标签: IMX6ULL  裸机驱动的编写  

1. I.MX6ULL的初始化

①、使能时钟

使能时钟。CCGR0–CCGR6这七个寄存器控制着I.MX6ULL所有外设时钟的使能,为了简单,设置CCGR0–CCGR6这七个寄存器全部为0xFFFFFFFF,相当于使能所有的外设时钟

CCGR0:
在这里插入图片描述
CCGR1:
在这里插入图片描述

CCGR2:

在这里插入图片描述

CCGR3:

在这里插入图片描述

CCGR4:

在这里插入图片描述

CCGR5:

在这里插入图片描述

CCGR6:
在这里插入图片描述

汇编使能所有的外设时钟:

在这里插入图片描述

②、配置 GPIO_I003 PIN的复用为GPIO

将IOMUXC_SW_MUX_CTL_PAD_GPIO1_IO03的bit3-0,设置为0101,这样GPIO_IO03就复用为GPIO

在这里插入图片描述
汇编实现:

在这里插入图片描述

③、配置 IOMUXC_SW_PAD_CTL_PAD_GPIO1_IO03的电器属性

设置寄存器 IOMUXC_SW_PAD_CTL_PAD_GPIO1_IO03的电器属性,包括摆率,速度,驱动能力,开漏,上下拉等等

在这里插入图片描述

在这里插入图片描述

汇编代码实现:

在这里插入图片描述

④、配置GPIO功能,设置输入输出

设置GPIO1_GDIR寄存器bit3为1,也就是设置为输出模式

在这里插入图片描述
在这里插入图片描述
汇编实现:

在这里插入图片描述

⑤、设置GPIO_DR寄存器的bit3,1表示输出高电平,0表示输出低电平

在这里插入图片描述
在这里插入图片描述
汇编实现:
在这里插入图片描述

整个汇编代码(.s文件):

.global _start @全局标号

_start:
    /*使能所有外设时钟 */
    LDR R0 , =0x020c4068  @CCGR0 
    LDR R1 , =0xffffffff  @要想CCGR0写入的数据
    STR R1 , [R0]         @将R1的值写入到R0中
    
    LDR R0 , =0x020c406c  @CCGR1
    STR R1 ,[R0]

    LDR R0 , =0x020c4070  @CCGR1
    STR R1 ,[R0]

    LDR R0 , =0x020c4074  @CCGR1
    STR R1 ,[R0]

    LDR R0 , =0x020c4078  @CCGR1
    STR R1 ,[R0]

    LDR R0 , =0x020c407c  @CCGR1
    STR R1 ,[R0]

    LDR R0 , =0x020c4080  @CCGR1
    STR R1 ,[R0]

    /*配置 GPIO_I003  PIN的复用为GPIO
    * IOMUXC_SW_MUX_CTL_PAD_GPIO1_IO03 = 0101 =5
    * IOMUXC_SW_MUX_CTL_PAD_GPIO1_IO03寄存器的地址为0x020E_0068
    */
    LDR R0 , =0x020E0068  @IOMUXC_SW_MUX_CTL_PAD_GPIO1_IO03
    LDR R1 , =0x5          @要写入的数据
    STR R1 , [R0]          @将5写入IOMUXC_SW_MUX_CTL_PAD_GPIO1_IO03

    /*配置 IOMUXC_SW_PAD_CTL_PAD_GPIO1_IO03的电器属性
    * IOMUXC_SW_PAD_CTL_PAD_GPIO1_IO03的地址时0x020E_02F4
    * bit0 :    0 低速率
    * bit5-3:   110 R0/6  驱动能力
    * bit7-6:   10 100MHz速度
    * bit11:    0 关闭开路输出
    * bit12:    1 使能pull/keeper
    * bit15-14: 00 100K下拉
    * bit16:    0 关闭hys    
    * 向寄存器IOMUXC_SW_PAD_CTL_PAD_GPIO1_IO03写入 0x10b0
    */

    LDR R0 , = 0x020E02F4
    LDR R1 , = 0x10b0
    STR R1 ,[R0]

    /*设置GPIO功能
     *设置GPIO1_GDIR寄存器  设置GPIO1_GPIO03为输出
     *寄存器GPIO_GDIR的地址是  0x0209C004
     * 设置GPIO1_GDIR寄存器bit3为1也就是GPIO1_GPIO03为输出
     */
    LDR R0 , = 0x0209C004
    LDR R1 , = 0x8
    STR R1 ,[R0]

    /*打开LED,也就是设置GPIO1_GPIO03为0 
     *GPIO1_DR 寄存器地址为0x0209C000
    */

    LDR R0 , = 0x0209C000
    LDR R1 , =0
    STR R1 ,[R0]

loop:
    b loop

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_45309916/article/details/107851318

智能推荐

计算机网络--第二章物理层_物理层要解决哪些问题-程序员宅基地

文章浏览阅读1.1w次,点赞47次,收藏81次。一.物理层基本概念1.物理层的作用和意义2.物理层的主要任务二、数据通信的基础知识1.数据通信的模型2.信道的几个基本概念2.1串行传输和并行传输2.2同步传输和异步传输2.3通信双方的信息交互方式一.物理层基本概念先强调一下,物理层考虑的是怎样才能在连接各种计算机的传输媒体上传输数据比特流,而不是指具体的传输媒体,传输媒体不属于计算机网络体系结构的任何一层。1.物理层的作用和意义①物理层是为了解决在各种传输媒体种的0和1问题②物理层的作用是尽可能的屏蔽掉不同传输媒体和通信手段的差异,让物._物理层要解决哪些问题

Usb Hub代码分析_mtk usb hub代码-程序员宅基地

文章浏览阅读1.8k次。如需引用请注明出处:http://blog.csdn.net/zkami 作者:ZhengKui在host controller初始化的时候一定会调用hub_probe进行初始化,至少对root hub初始化hub_probe(struct usb_interface *intf, const struct usb_device_id *id) (hub.c)此时struct us_mtk usb hub代码

Immutable 详解及 React 中实践-程序员宅基地

文章浏览阅读305次。原文链接 请关注我们的专栏Shared mutable state is the root of all evil(共享的可变状态是万恶之源)-- Pete Hunt有人说 Immutable 可以给 React 应用带来数十倍的提升,也有人说 Immutable 的引入是近期 JavaScript 中伟大的发明,因为同期 React 太火,它的光芒被掩盖了。这些至

【排序算法】快速排序原理及Java实现_快速排序java-程序员宅基地

文章浏览阅读10w+次,点赞55次,收藏171次。快速排序是我们之前学习的冒泡排序的升级,他们都属于交换类排序,都是采用不断的比较和移动来实现排序的。快速排序是一种非常高效的排序算法,它的实现,增大了记录的比较和移动的距离,将关键字较大的记录从前面直接移动到后面,关键字较小的记录从后面直接移动到前面,从而减少了总的比较次数和移动次数。同时采用“分而治之”的思想,把大的拆分为小的,小的拆分为更小的,其原理如下:_快速排序java

Qt高级——Qt信号槽机制源码解析-程序员宅基地

文章浏览阅读442次。Qt高级——Qt信号槽机制源码解析基于Qt4.8.6版本一、信号槽机制的原理1、信号槽简介信号槽是观察者模式的一种实现,特性如下:A、一个信号就是一个能够被观察的事件,或者至少是事件已经发生的一种通知;B、一个槽就是一个观察者,通常就是在被观察的对象发生改变的时候——也可以说是信号发出的时候——被调用的函数;C、信号与槽的连接,形成一种观察者-被观察者的关系;D、当事件或者状态发生改变的时...

Computer Science Conference Rankings-程序员宅基地

文章浏览阅读896次。Computer Science Conference RankingsDISCLAIMER:The ranking of conferences are taken mostly from an informal external source. The detailed procedure behind the ranking is unknown

随便推点

买菜用了01 背包 wwwwwwwwwwwwww-程序员宅基地

文章浏览阅读1.7k次。电子科大本部食堂的饭卡有一种很诡异的设计,即在购买之前判断余额。如果购买一个商品之前,卡上的剩余金额大于或等于5元,就一定可以购买成功(即使购买后卡上余额为负),否则无法购买(即使金额足够)。所以大家都希望尽量使卡上的余额最少。 某天,食堂中有n种菜出售,每种菜可购买一次。已知每种菜的价格以及卡上的余额,问最少可使卡上的余额为多少。 Input多组数据。对于每组数据: 第一行为正整数n,表示菜的数...

Linux下的github 添加秘钥出错:Key is invalid. You must supply a key in OpenSSH public key for-程序员宅基地

文章浏览阅读1.3k次。linux下生成秘钥:ssh-keygen -t rsa -C "[email protected]"双引号内是你的github注册地址,所有提示直接回车默认选项就好生成成功后,查看秘钥文件,路径为【~/.ssh/id_rsa.pub】cat ~/.ssh/id_rsa.pub注意:一定是.pub的文件,不是id_rsa文件我一开始用的id_rsa,所以造成标题的报错cat内容:直接复制然后在github中添加秘钥就可以了title随便写,把复制的秘钥粘贴在2格中,然

《C语言点滴》一1.2 程序猿和互联网-程序员宅基地

文章浏览阅读242次。本节书摘来自异步社区《C语言点滴》一书中的第1章,第1.2节,作者 赵岩,更多章节内容可以访问云栖社区“异步社区”公众号查看1.2 程序猿和互联网C语言点滴虽然你可以对电脑的硬件要求不高,但是对另外一个功能还是应该严重关切一下的,那就是联网功能。最方便的联网方式无疑就是3G联网方式了,可以做到随时随地上网。我在北京上班的时候,地铁车厢里有时会有人拿...

Linux内存空间访问札记_kernel dram size-程序员宅基地

文章浏览阅读1.9k次。原文地址:Linux内存空间访问札记 引:本来打算将这部分内容并入到《The Linux Kernel Module Programming Guide笔记》中去,但是想下内存空间管理访问相当基础重要而且内容量较大,所以就单独记录。注:在x86架构上,会分为内存空间和I/O空间,但是在大多数嵌入式控制器如ARM、PowerPC并不提供I/O空间。我面向的主要是嵌入式方面的驱动开发,所_kernel dram size

什么是CSDN_csdn是什么-程序员宅基地

文章浏览阅读758次。如题。是http://blog.csdn.net/Aaron25/category/183631.aspx把我吸引来的。谢谢他。 _csdn是什么

Realme GT2 ROOT 解锁BL教程_gt2工具箱-程序员宅基地

文章浏览阅读6.1k次,点赞3次,收藏14次。Realme GT2 解锁+ROOT教程真我GT2解锁BL 解BL ROOT 刷面具 gt2_gt2工具箱