您当前的位置: 首页 > 

风间琉璃•

暂无认证

  • 2浏览

    0关注

    337博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

阿尔法点亮LED灯(一)汇编语言

风间琉璃• 发布时间:2021-11-19 21:17:47 ,浏览量:2

文章目录
  • 前言
  • 一、GPIO介绍
    • 1.MX6U IO 复用
    • 2.MX6U IO 配置
    • 3.GPIO 配置
    • 4.GPIO 时钟使能
    • 5.==GPIO的使用步骤==
  • 二、程序编写
    • 1.使能 GPIO1 时钟
    • 2.设置 GPIO1_IO03 的复用功能
    • 3.配置 GPIO1_IO03属性
    • 4.设置GPIO1_IO03为输出
    • 5.控制 GPIO 的输出电平
  • 三、编写Makefile
    • 1.arm-linux-gnueabihf-gcc 编译文件
    • 2.arm-linux-gnueabihf-ld链接文件
    • 3.arm-linux-gnueabihf-objcopy 格式转换
    • 4.arm-linux-gnueabihf-objdump 反汇编
    • 5.Makefile
  • 四、烧录代码
    • 1.赋予可执行权限
    • 2.挂载SD卡
    • 3.烧写bin文件
  • 总结

提示:以下是本篇文章正文内容,下面案例可供参考

一、GPIO介绍

阿尔法GPIO命名规则

eg: 1.IOMUXC_SW_MUCCTL_PAD_XX_XX =>(IO复用功能) 2.IOMUXC_SW- PAD_CTL_PAD_XX_XX => (IO属性配置)

其是根据某个IO所拥有的功能来命名的,比如GPIO1_IO01做GPIO引脚

第一个和第二个主要是MCU和PAD的区别

1.MX6U IO 复用

以IOMUXC_SW_MUX_CTL_PAD_GPIO1_IO01为例 在这里插入图片描述 只要低5位用到了,我们来看看低4位 在这里插入图片描述 设置不同的0,1就是这个IO选择不同的复用功能(是不是和32差不多啊) 其中bit0-bit3(MUX_MODE)就是设置 GPIO1_IO00 的复用功能的。GPIO1_IO00 一共可以复用为 9种功能 IO,分别对应 ALT0~ALT8,其中 ALT5 就是作为 GPIO1_IO00

2.MX6U IO 配置

以IOMUXC_SW_PAD_CTL_PAD_GPIO1_IO01为例 在这里插入图片描述 寄存器地址为 0X020E02E8,只用到了其中的低 17 位

GPIO 功能图: 在这里插入图片描述 1.HYS

用来使能迟滞比较器,为 0 的时候禁止迟滞比较器,为 1 的时候使能迟滞比较器

2.PUS

用来设置上下拉电阻的

位设置含义00100下拉0147k上拉10100k上拉1122k上拉

3.PUE

用来设置 IO 使用上下拉还是状态保持器。当为 0 的时候使用状态保持器,当为 1 的时候使用上下拉

4.ODE

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

5.SPEED

设置 IO 速度

位设置速度00低速50M01中速100M10中速100M11最大速度200M

6.DSE

当 IO 用作输出的时候用来设置 IO 的驱动能力

位设置速度000输出驱动关闭001R0010R0/2011R0/3100R0/4101R0/5110R0/6111R0/7

注:3.3V 下 R0 是 260Ω, 1.8V 下 R0 是 150Ω,接 DDR 的时候是 240Ω 值越大驱动能力更强

7.SRE

设置压摆率,为 0 的时候是低压摆率,为 1的时候是高压摆率。压摆率指IO 电平跳变所需要的时间,比如从 0 到 1 需要多少时间,时间越小波形就越陡,说明压摆率越高;反之,时间越多波形就越缓,压摆率就越低

所以,寄存器 IOMUXC_SW_PAD_CTL_PAD_GPIO1_IO00 是用来配 置 GPIO1_IO00 的,包括速度设置、驱动能力设置、压摆率设置

3.GPIO 配置

IOMUXC_SW_MUX_CTL_PAD_XX_XX 和IOMUXC_SW_PAD_CTL_PAD_XX_XX 这两种寄存器都是配置 IO 的, GPIO 是一个 IO 众多复用功能中的一种, 所以,还需要对其 GPIO 的功能进行配置

GPIO结构如图 在这里插入图片描述 当 IO 用作 GPIO 的时候需要设置的寄存器,DR、 GDIR、 PSR、 ICR1、 ICR2、 EDGE_SEL、 IMR 和 ISR一个八个,MX6U 一共有 GPIO1~GPIO5 共五组 GPIO,每组 GPIO 都有这 8 个寄存器

(1) DR (数据寄存器)寄存器

此寄存器是 32 位的,一个 GPIO 组最大只有 32 个 IO,因此 DR 寄存器中的每个位都对应一个 GPIO。当 GPIO 被配置为输出功能以后,向指定的位写入数据那么相应的 IO 就会输出相应的高低电平;当 GPIO被配置为输入模式, 寄存器就保存着对应 IO 的电平值,每个位对对应一个 GPIO

eg:设置 GPIO1_IO00 输出高电平,那么就应该设置 GPIO1.DR=1

(2) GDIR(方向寄存器) 寄存器

用来设置某个 GPIO 的工作方向的,即输入(0)/输出(1)

eg:设置 GPIO1_IO00 为输入,那么 GPIO1.GDIR=0

(3)PSR( 状态寄存器) 寄存器

读取相应的位即可获取对应的 GPIO 的状态,也就是 GPIO 的高低电平值

(3)ICR1/ ICR2(中断控制寄存器)寄存器

ICR1用于配置低16个GPIO,ICR2 用于配置高 16 个 GPIO,一个 GPIO GPIO用两个位来配置中断的触发方式

位设置方式00低电平触发01高电平触发10上升沿触发11下降沿触发

eg:设置GPIO1_IO15为上升沿触发中断,GPIO1.ICR1= 2 led.dis clean: rm -rf *.o led.bin led.elf led.dis

编译工程:make 清理工程:make clean

四、烧录代码

需要用imxdownload将编译出来的.bin 文件烧写到 SD 卡,将它复制到该目录下,但是,必须给这个文件权限才可以执行

1.赋予可执行权限
chmod 777  imxdownload

边为绿色后,说明可以执行了

2.挂载SD卡

第一次我就是问题出现在这里的,把该写到sd卡的数据,不下心写到系统磁盘里面去了,到处系统崩溃,又重新配置了编译环境,极其痛苦

可以使用ls /dev/sd* 命令退出sd的设备名称 在这里插入图片描述 这里我的就是sd卡名称:== /dev/sdb==

3.烧写bin文件

使用 imxdownload 向 SD 卡烧写 led.bin 文件,命令格式

./imxdownload  

.bin 就是要烧写的.bin 文件, SD Card 就是你要烧写的 SD 卡

./imxdownload len.bin /dev/sdb 

执行完可以看到文件大小和出现loda.imx 在这里插入图片描述 最终烧写到 SD 卡里面的就是这load.imx 文件,而非led.bin

注意:将sd卡插入到开发板上,还要设置阿尔法的启动方式 设置BOOT_CFG为10000010(外部存储启动方式)

关注
打赏
1665385461
查看更多评论
立即登录/注册

微信扫码登录

0.0469s