zoukankan      html  css  js  c++  java
  • linux IMX6 汇编点亮一个LED灯

    驱动Linux引脚与驱动STM32其实是一样的,都是在操作寄存器,在相应的寄存器上附上相应的值即可驱动。

    IMX6U手册上有各个管脚的命名,跟STM32不同,IOMUXC_SW_MUC_CTL_PAD_GPIO1_IO00,是根据功能来命名的

     每个引脚都包含这两个寄存器,表中的 XXXX 表示引脚的名字,例如本芯片中有一个名为 GPIO1_IO03 的引脚,编号为 GPIO1.3,你可以在参考手册的 IOMUXC 章节中找到它的 这 两 个 寄 存 器 : IOMUXC_SW_MUX_CTL_PAD_GPIO1_IO04 以 及IOMUXC_SW_PAD_CTL_PAD_GPIO1_IO04,以下简称 MUX 寄存器及 PAD 寄存器。根据寄存器说明即可对该引脚进行相应的配置。

    可以看到,该寄存器主要有两个配置域,分别是 SION 和 MUX_MODE,其中 SION用于设置引脚在输出模式下同时开启输入通道。重点是 MUX_MODE 的配置,它使用 4 个寄存器位表示可选的 ALT0~ALT8这 9 个模式,若配置为 ALT5 则引脚会用作普通的 GPIO功能,用于输出高、低电平。

    相对来说 PAD 寄存器的配置项就更丰富了,而且图中仅是该寄存器的部分说明,仔细看这些配置项,如 HYS 设置使用施密特模式的滞后功能,PUS 配置上下拉电阻的阻值,其它的还包含 PUE、PKE、ODE、SPEED、DSE 及SRE 的配置。

     接下来则是要使用汇编来给这些寄存器赋值,并驱动它。

    流程:

    1、使能时钟

    2、复用为GPIO

    3、配置寄存器管脚

    4、设置管脚方向

    5、拉低管脚,点亮LED

     1 .global _start
     2 
     3 _start:
     4 ldr R0, =0X020C406C   //赋值给R0 时钟的地址
     5 ldr R1, =0x0C000000   //开启GPIO1的时钟
     6 str R1, [R0]           //赋值
     7 
     8 ldr R0, =0X020E0068   //赋值给R0 IO3的地址
     9 ldr R1, =0x00000005   //IO3设置复用为GPIO_IO3
    10 str R1, [R0]            //赋值
    11 
    12 ldr R0, =0X020E02F4   //赋值给R0 IO3的设置地址
    13 ldr R1, =0x000010B0   //配置管脚寄存器
    14 str R1, [R0]          //赋值
    15 
    16 ldr R0, =0X0209C004   //GDIR
    17 ldr R1, =0x00000008   //输出
    18 str R1, [R0]          //赋值
    19 
    20 loop:
    21     bl led_on
    22     bl delay
    23     bl led_off
    24     bl delay
    25 b loop
    26 
    27 led_on:
    28 ldr R0, =0X0209C000   //DR
    29 ldr R1, =0x00000000   //输出低
    30 str R1, [R0]          //赋值
    31 mov pc, lr            //返回被调用处 
    32 
    33 led_off:
    34 ldr R0, =0X0209C000   //DR
    35 ldr R1, =0x00000008   //输出低
    36 str R1, [R0]            //赋值
    37 mov PC, LR            //返回被调用处 
    38 
    39 delay:
    40 move R0, #0x4000
    41 for:
    42 sub R0, #1
    43 cmp R0, #0
    44 bne for
    45 mov PC, LR            //返回被调用处 

    这个代码初始化了GPIO1_3管脚,使用了delay函数,使led灯能闪烁

  • 相关阅读:
    NSArray的几个方法的简单使用
    内存管理常用知识点总结
    iOS是开发之 对数组中的元素排序后输出
    iOS开发之——单例的几种设计方式
    图论二:图的存储
    图论一:基本概念
    树状数组(hdu-4325,hdu-1166,pat-1057)
    pat1079+1086+1090+1094(树的遍历)感想
    pat 甲级 1086(树的遍历||建树)
    static关键字的功能
  • 原文地址:https://www.cnblogs.com/puchi/p/11800434.html
Copyright © 2011-2022 走看看