imu6xl点灯(C语言)

参考正点原子开发指南

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

在原理图上找到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;
}
相关推荐
蓝斯4971 小时前
从.到实现一个Windows上的虚拟hid键盘设备
windows·单片机·计算机外设
熙芯XiChip1 小时前
硬实时与软实时RTOS核心区别
嵌入式硬件
伟大的前程2 小时前
unsigned int 定义的变量 在 电脑的 64 位系统中 和 32 位 cortex-m0 和 8 位的 51 单片机
单片机·嵌入式硬件
小渔村的拉线工2 小时前
1.HPM6E80 解析芯片整体工作原理和存储架构
单片机·嵌入式硬件·mcu·架构·hpm6e80
熙芯XiChip3 小时前
CAN与CANopen的本质区别
单片机
lilihewo3 小时前
Altium Designer 封装库的创建(分享pcb 3D封装库)
嵌入式硬件·51单片机
神罚天下ET4 小时前
典型arm位单片机启动流程(从上电到main.c)
c语言·arm开发·单片机
碧海银沙音频科技研究院5 小时前
蓝牙耳机使用WSDF5361锂保芯片进入船运模式实现方法
嵌入式硬件·算法
Zevalin爱灰灰6 小时前
模拟信号链电路——基于TL431的电压基准电路
单片机·嵌入式硬件
csdn杰哥6 小时前
瑞萨单片机开发教程[二十七] DTC 外部中断触发传输实验
单片机·嵌入式硬件·mongodb·瑞萨·ra6m5