imu6xl点灯(C语言)

本文详细介绍了IMX6UL平台中如何通过设置寄存器来配置GPIO3,包括IO复用、属性设置、时钟启用以及LED控制的基本步骤。还涉及了GPIO的中断、速度和驱动能力的配置以及延时函数的使用。
摘要由CSDN通过智能技术生成

参考正点原子开发指南

 

根据原理图可以看出,我们需要设置低电平导通电路。

 在原理图上找到LED0,对应IO为GPIO3

IO复用配置

IMX6UL每个引脚都可以复用

在用户手册第30章可以找到IOMUXC_SW_MUX_CTL_PAD_GPIO1_IO03这个寄存器,地址为0x020E0068,只用到了低五位,其中前四位为功能引脚,第五位为强制功能引脚(会覆盖前面四位的配置),每个引脚都有专属的强制功能。

IO属性配置

在第30章同一节后面,还有一个中间是PAD的寄存器

它是用来配置我们IO的属性,包括压摆速率、驱动能力等。

这个寄存器只用到了低17位。

HYS:用来使能迟滞比较器,如果需要对输入波形进行整形的话可以使能此位。

PUS:设置上下拉电阻

PUE:当IO作为输入的时候,这个位用来设置IO使用上下拉还是状态保持器。当为0的时候使用状态保持器,当为1的时候使用上下拉。状态保持器在IO作为输入的时候才有用,顾名思义,就是当外部电路断电以后此IO口可以保持住以前的状态。

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

SPEED:IO输出时速度

DSE:IO输出时,设置IO驱动能力

SRE:设置压摆率(IO高低电平跳变所需时间),0低(慢)  1高(快)

寄存器

先看IO框图

地址如图

DR:数据寄存器(一共32位),一个GPIO组最大32个IO,输出模式每个控制一个IO的(高低电平),输出模式就存着每个IO的电平状态

GDIR:方向寄存器,设置IO的输入输出。(0:input          1:output)

PSR:状态寄存器·,读取高低电平,和输入状态的DR寄存器1一样

ICR1、ICR2:中断控制寄存器,ICR1用于配置低16位,ICR2配置高16位

IMR:中断屏蔽寄存器,,用于控制中断的禁止与使能(1使能  0禁止)

ISR:中断标志寄存器,哪个IO发生了中断,ISR寄存器中相应的值就会被置为1。当想清除标志位

时候,向相应位写1就行

EDGE_SEL:设置边沿中断,这个寄存器会覆盖ICR1和ICR2的设置,同样是一个GPIO对应一个位。如果相应的位被置1,那么就相当与设置了对应的GPIO是上升沿和下降沿(双边沿)触发

时钟

IMX6UL的每个外设都有单独的时钟,可以独立使能或禁止。

在用户手册第18章找到对应时钟寄存器

我们只需要设置CCM_CCGR2的26-27位为11即可打开对应时钟。

我们需要一下几步:

①、使能GPIO对应的时钟。

②、设置寄存器IOMUXC_SW_MUX_CTL_PAD_XX_XX,设置IO的复用功能,使其复用为GPIO功能。

③、设置寄存器IOMUXC_SW_PAD_CTL_PAD_XX_XX,设置IO的上下拉、速度等等。

④、第②步已经将IO复用为了GPIO功能,所以需要配置GPIO,设置输入/输出、是否使用中断、默认输出电平等。

#include "led.h"

void led_init(void)//GPIO1_io3
{
    //init -> clock
    CCM_CCGR2 &= ~(0x3 << 26);
    CCM_CCGR2 |= (0x3 << 26);

    //复用GPIO3
    MUX_GPIO3 = (0x5 << 0);

    //GPIO3 -> OUTPUT_ENABLE
    PAD_GPIO3 |= (0x1 << 11);
    GPIO1_GDIR |= (0x1 << 3);
    GPIO1_DR = 0x0;
}

void led_on(void)
{
    GPIO1_DR &= ~(0x1 << 3);
}

void led_off(void)  
{
    GPIO1_DR |= (0x1 << 3);
}

void delay_short(volatile unsigned int n)
{
    while(n--);
}

void delay_us(volatile unsigned int n)
{
    while(n--)
    {
        delay_short(0x7ff);
    }
}
int main()
{
    led_init();
    while(1)
    {
        led_on();
        delay_us(1000);
        led_off();
        delay_us(1000);    
    }
    return 0;
}

  • 27
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值