Chapter 8. LED(GPIO操作)

Chapter 8. LED(GPIO操作)


【参考】

  1. 【正点原子】I.MX6U嵌入式Linux驱动开发指南V1.5.pdf
  2. 【Makefile讲解-Chapter 3.4】–【正点原子】I.MX6U嵌入式Linux驱动开发指南V1.5.pdf
  3. arm汇编手册(中文版).chm
  4. IMX6UL参考手册.pdf
  5. IMX6UL数据手册(商用级).pdf

01 i.mx6u GPIO详解

  1. IO复用选择和属性配置寄存器

    1. i.mx6u的IO口是选定的,首先找到指定的IO,然后通过复用选择到所需要的IO功能
    2. 寄存器
      1. 复用选择:IOMUXC_SW_MUX_CTL_PAD_XX_XX
      2. 属性配置:IOMUXC_SW_PAD_CTL_PAD_XX_XX
  2. GPIO寄存器配置

    1. i.mx6u有GPIO1~GPIO5五组GPIO,每组GPIO各有8个寄存器。如下:

      DR:数据寄存器

      GDIR:方向寄存器

      PSR:状态寄存器(只读)。输入下,同DR

      ICR1:中断控制寄存器(低16个GPIO)。用于配置触发方式【低/高/上升沿/下降沿】

      ICR2:中断控制寄存器(高16个GPIO)。用于配置触发方式【低/高/上升沿/下降沿】

      EDGE_SEL:边沿选择寄存器。1-无视ICR配置,双边沿触发,0-遵守ICR规则

      IMR:中断屏蔽寄存器。0-Disable,1-Enable

      ISR:中断状态(标志)寄存器。(中断处理完后,需要软件清零

  3. 时钟使能

    1. i.mx6u的时钟系统(CCM)包含7个控制寄存器CCM_CCGR0~CCM_CCGR6。对这些寄存器操作即可打开/关闭指定外设的时钟。
    2. CCM_CCGRx中每两位对应一个外设。位设置如下:在这里插入图片描述
  4. 【小结】(GPIO使用配置步骤)

    1. 使能GPIO对应的寄存器;
    2. 设置IO复用功能IOMUXC_SW_MUX_CTL_PAD_XX_XX
    3. 设置IO属性:IOMUXC_SW_PAD_CTL_PAD_XX_XX
    4. 配置GPIO:对GPIO的8个寄存器进行操作即可
  5. 疑问

    1. 如何找到某个GPIO引脚对应的IOMUXC_SW_MUX_CTL_PAD_XX_XX寄存器?
      1. 通过【datasheet】找到引脚,得到【Ball Name】
      2. 通过【Ball Name】去【参考手册】中【Chapter 30 xxx】搜索对应的寄存器即可

02 编译程序

  1. 编译文件【arm-linux-gnueabihf-gcc】

    例:arm-linux-gnueabihf-gcc -g -c led.s -o led.o

    -g :产生调试信息

    -c :编译源文件,但不链接

    -o :指定编译产生的文件名

  2. 链接文件【arm-linux-gnueabihg-ld】

    1. 概念:

      1. 可执行文件的运行起始地址,就是链接地址
      2. 正点原子教程所有裸机例程的链接地址都是在DDR中,链接起始地址为:0x87800000
    2. 例:arm-linux-gnueabihf-ld -Ttext 0x87800000 led.o -o led.elf

      -Ttext :指定链接地址

      -o :指定生成的elf文件

  3. 格式转换【arm-linux-gnueabihf-objcopy】

    1. 类似于格式转换工具,可将xxx.elf格式转换为xxx.bin格式

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

      -O :指定什么格式输出。如-O binary输出问二进制

      -S :表示不要复制源文件中的重定位信息和符号信息

      -g :表示不复制源文件中的调试信息

  4. 反汇编【arm-linux-gnueabihf-objdump】

    1. 需要查看汇编代码时使用

    2. 例:arm-linux-gnueabihf-objdump -D led.elf > led.dis

      -D :表示反汇编所有的段

  5. Makefile 完成上述所有操作

    led.bin:led.s
     arm-linux-gnueabihf-gcc -g -c led.s -o led.o
     arm-linux-gnueabihf-ld -Ttext 0X87800000 led.o -o led.elf
     arm-linux-gnueabihf-objcopy -O binary -S -g led.elf led.bin
     arm-linux-gnueabihf-objdump -D led.elf > led.dis
    clean:
    	rm -rf *.o led.bin led.elf led.dis
    

03 程序烧写

  1. i.mx6u 基本信息

    1. i.mx6u内部有96k的ROM,但是这96k的ROM是NXP自己用的,不向用户开放
    2. 正点原子做了个将xxx.bin文件烧写到SD卡的软件,叫【imxdownload】
  2. 【imxdownload】使用方法

    1. 将【imxdownload】拷贝到工程目录下

    2. 给予【imxdownload】可执行权限

    3. 确定要烧写的SD卡

      1. 确定SD卡没有数据,可能会格式化SD卡

      2. 确保SD卡连接到Linux(Ubuntu)

      3. ls /dev/sd* 查看相关的设备

        如显示:/dev/sda /dev/sda1 /dev/sda2 /dev/sda5

        /dev/sda即对应的SD卡,后面的/dev/sda1 /dev/sda2 /dev/sda5都是该盘的分区

    4. 向SD卡烧写bin文件

      格式:./imxdownload <.bin file> <SD Card>

      例:./imxdownload led.bin /dev/sdd

      注意事项

      1. 正常烧写速度应该是几百KB/s。
      2. 若速度大于几十甚至几百MB/s,那么肯定烧写失败了。一般需要重启Ubuntu才能解决该问题
      3. 运行imxdownload后,在项目目录会生成对应的load.imx文件,此文件是根据NXP官方启动方式介绍的内容,在xxx.bin文件前添加了一些数据头后生成的。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值