嵌入式Linux裸机开发笔记2(IMX6ULL)—汇编LED实验(1)

引言

        上次发布的笔记已经学习了几种常见的汇编指令,已经可以满足我们进行一些ARM汇编实例,本系列笔记默认大家有配置好的ubuntu操作系统,默认使用vscode进行开发,vscode就不多介绍了,总之是一款非常好用的开发工具,有很多方便的插件,同时默认大家有Linux C编程基础,知道一些常用的终端指令(ls cd cp…)。

        本次笔记记录我学习第一个裸机实验——汇编LED灯实验主要介绍如何使用汇编语言初始化IMX6ULL外设寄存器以及了解最基本的IO输出功能,希望对大家有所帮助。

2.1 I.MX6ULL GPIO 详解

2.1.1 STM32 GPIO 回顾

        一般拿到一款全新的芯片,第一个要做的事情的就是驱动其 GPIO ,控制其 GPIO 输出高低电平,我们学习 I.MX6U 也一样的,先来学习一下 I.MX6U GPIO 。在学习 I.MX6U的 GPIO之 前,我们先来回顾一下 STM32 GPIO 初始化。
        我们以最常见的 STM32F103 为例来看一下 STM32 GPIO 初始化。
示例代码如下
        1 void LED_Init ( void )
        2 {
        3 GPIO_InitTypeDef GPIO_InitStructure ;
        4
        5 RCC_APB2PeriphClockCmd ( RCC_APB2Periph_GPIOB , ENABLE ); // 使能 PB 端口时钟
        6
        7 GPIO_InitStructure . GPIO_Pin = GPIO_Pin_5 ;
        //PB5 端口配置
        8 GPIO_InitStructure . GPIO_Mode = GPIO_Mode_Out_PP ; // 推挽输出
        9 GPIO_InitStructure . GPIO_Speed = GPIO_Speed_50MHz ; //IO 口速度
        10 GPIO_Init ( GPIOB , & GPIO_InitStructure ); // 根据设定参数初始化 GPIOB.5
        11
        12 GPIO_SetBits ( GPIOB , GPIO_Pin_5 ); //PB.5 输出高
        13 }
        可以看出上述STM32初始化代码中重点要做的事情有一下几个:
        ①、使能指定 GPIO 的时钟。
        ②、初始化 GPIO ,比如输出功能、上拉、速度等等。
        ③、STM32 有的 IO 可以作为其它外设引脚,也就是 IO 复用,如果要将 IO 作为其它外设引脚使用的话就需要设置 IO 的复用功能。
        ④、最后设置 GPIO 输出高电平或者低电平
        那么IMX6ULL的初始化是不是也是类似的呢?带着这个疑问我们去查一下IMX6ULL的技术手册和参考手册。

2.1.2 I.MX6U IO 命名

        

       从图中可以看出,I.MX6ULL 的 IO 分为两类: SNVS 域的和通用的,这两类 IO 本质上都是一样的,我们就常用 IO 为例,讲解一下 I.MX6ULL IO 命名方式。
    形如“IOMUXC_SW_MUX_CTL_PAD_GPIO1_IO00 ”的就是 GPIO 命名,命名形式就是“IOMUXC_SW_MUC_CTL_PAD_ XX_XX ”,后面的“ XX_XX ”就是 GPIO 命名。你会发现貌似 GPIO 只有 GPIO1_IO00~GPIO1_IO09,难道I.MX6ULL 的 GPIO 只有这 10 个?显然不是的, 我们知道 STM32 的很多 IO 是可以复用为其它功能的,那么 I.MX6ULL 的其它 IO 也 是 可 以 复 用 为 GPIO 功能。

8.1.3 I.MX6U IO 复用

    以“IOMUXC_SW_MUX_CTL_PAD_GPIO1_IO00 ”这个 IO 为例,可以看到有个名为:IOMUXC_SW_MUX_CTL_PAD_GPIO1_IO00 的寄存器,寄存器地址为 0X020E005C,这个寄存器是 32 位的,但是只用到了最低 5 位, 其中bit0~bit3(MUX_MODE)就是设置 GPIO1_IO00 的复用功能的。GPIO1_IO00 一共可以复用为9种功能 IO,分别对应 ALT0~ALT8,其中 ALT5 就是作为 GPIO1_IO00。GPIO1_IO00 还可以为 I2C2_SCL、GPT1_CAPTURE1、ANATOP_OTG1_ID 等,这个就是 I.MX6ULL的IO复用。
        以上就介绍了MX6ULL的IO复用部分,可以看到与stm32初始化是有一定类似的,需要操作复用寄存器,下次将会记录IMX6ULL的IO如何配置。
  • 7
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值