本文和(1)只有main.c程序不一样,具体如下:
#include "imx6ul.h"
// @description : 使能I.MX6U所有外设时钟
void clk_enable(void)
{
CCM->CCGR0 = 0xFFFFFFFF;
CCM->CCGR1 = 0xFFFFFFFF;
CCM->CCGR2 = 0xFFFFFFFF;
CCM->CCGR3 = 0xFFFFFFFF;
CCM->CCGR4 = 0xFFFFFFFF;
CCM->CCGR5 = 0xFFFFFFFF;
CCM->CCGR6 = 0xFFFFFFFF;
}
void led_init(void)
{
IOMUX_SW_MUX->GPIO1_IO03 = 0X5;
IOMUX_SW_PAD->GPIO1_IO03 = 0x10B0;
GPIO1->GDIR = 0x0000008;
GPIO1->DR &= ~(1 << 3);
}
void led_on(void)
{
GPIO1->DR &= ~(1<<3);
}
void led_off(void)
{
GPIO1->DR |= (1<<3);
}
void delay_short(volatile unsigned int n)
{
while(n--){}
}
//@param - n : 要延时的ms数
void delay(volatile unsigned int n)
{
while(n--)
{
delay_short(0x7ff);
}
}
int main(void)
{
clk_enable();
led_init();
while(1)
{
led_off();
delay(500);
led_on();
delay(500);
}
return 0;
}
这是(1)中关于main.h里面各个寄存器的宏定义,然后我们在main.c里面进行了调用,但我们不可能每次都还要自己写这种,于是各个开发板商家配套了这种具有寄存器的定义文件。本次实验中的定义在 ——imx6ul.h
因此,在具体的程序中:
(自己定义寄存器)
(店家定义寄存器)
通过图片我们可以看出:自己写的寄存器版本就是一个整型指针。而店家的是结构体指针。结构体指针具有更高的代码阅读性。
其中 与等取反 表示对这个寄存器的哪个位置置0
或等 表示对这个寄存器的哪个位置置1



