资讯详情

6ULL裸机使用语言点亮LED灯

由图可知当LED发光二极管可在低电平时点亮。LED0对应的是GPIO3,而GPIO3即为GPIO1_IO03。所以,在GPIO1_IO03输出0点亮,输出1熄灭。

需要对GPIO1_IO03进行以下配置:

1.使能GPIO1时钟。

GPIO1 的时钟由 CCM_CCGR1 的 bit27 和 bit26 控制这两个位置,设置这两个位置 11 即

可。

具体的开关方法是CCM_CCGR介绍如下:

这可能意味着每个人都有这四种设置模式:

2.设置GPIO1_IO功能复用03。

找到GPIO1_IO03复用配置寄存器IOMUXC_SW_MUX_CTL_PAD_GPIO1_IO03”的地址为

0X020E0068 ,然后设置此寄存器 GPIO1_IO03 这个 IO 复用为 GPIO 功能,也就是 ALT5 。

3.配置GPIO1_IO03

对应图 8.1.4.2 中 HYS,当用于使能迟滞比较器时 IO 有时作为输入功能 效,用于设置输入接收器的施密特触发器是否使能。如果需要对输入波形进行整形的话可以使 这个位置。这个位置是 0 为了 1 使能迟滞比较器。对应图 8.1.4.2 中的 PUS,设置上下拉电阻有四种选择 择,如表 所示:

图 8.1.4.2 没给,当 IO 这个位置用作输入设置 IO 使用上下 拉还是状态保持器。 0 使用状态保持器作为状态保持器 1 使用上下拉。状态保持器在 IO 作为输入是有用的,顾名思义,当外部电路断电时 IO 可以保持以前的状态 态。对应图 8.1.4.2 中的 PKE,用于使能或禁止上下拉/状态保持器功能 0 禁止上下拉/状态保持器 1 使能上下拉和状态保持器。对应图 8.1.4.2 中的 ODE,当 IO 作为输出,此位用于禁止或使能打开 此位为道路输出 0 当此位置为时,禁止开路输出 1 使开路输出功能。对应图中的 SPEED,当 IO 当用作输出时,此位用于设置 IO 速 设置如表 所示

:对应图 8.1.4.2 中的 DSE,当 IO 用于输出时设置 IO 驱动能力, 总共有 8 可选选项,如表 8.1.4.3 所示:

对应图 8.1.4.2 中的 SRE,设置压摆率,当此位置为 0 以低压摆率为例 1 是高压摆率。这里的压摆率是 IO 从 0 到 1 需要多少时 时间越小,波形越陡,压摆率越高;相反,波形越慢,压摆率越低。 如果你的产品要通过 EMC 如果你现在使用它,你可以使用小的压摆率,因为波形缓解。 IO 高压摆率可用于高速通信。

2.编程:

创建工程文件:

C 语言部分有两个文件 main.c 和 main.h,main.h 主要定义寄存器地址 main.h

输入代码:

#ifndef __MAIN_H #define __MAIN_H  #define CCM_CCGR0           *((volatile unsigned int *)0x020c4068) #define CCM_CCGR1           *((volatil unsigned int *)0x020c406c)
#define CCM_CCGR2           *((volatile unsigned int *)0x020c4070)
#define CCM_CCGR3           *((volatile unsigned int *)0x020c4074)
#define CCM_CCGR4           *((volatile unsigned int *)0x020c4078)
#define CCM_CCGR5           *((volatile unsigned int *)0x020c407c)
#define CCM_CCGR6           *((volatile unsigned int *)0x020c4080)

/*
 *IOMUX相关寄存器
 */
#define SW_MUX_GPIO1_IO03   *((volatile unsigned int *)0x020e0068)
#define SW_PAD_GPIO1_IO03   *((volatile unsigned int *)0x020e02f4)

/*
 *GPIO1相关寄存器地址
 */
#define GPIO1_DR            *((volatile unsigned int *)0x0209c000)
#define GPIO1_GDIR          *((volatile unsigned int *)0x0209c004)
#define GPIO1_PSR           *((volatile unsigned int *)0x0209c008)
#define GPIO1_IRC1          *((volatile unsigned int *)0x0209c00c)
#define GPIO1_IRC2          *((volatile unsigned int *)0x0209c010)
#define GPIO1_IMR           *((volatile unsigned int *)0x0209c014)
#define GPIO1_ISR           *((volatile unsigned int *)0x0209c018)
#define GPIO1_EDGE_SELECT   *((volatile unsigned int *)0x0209c01c)


#endif
在 main.h 中我们以宏定义的形式定义了要使用到的所有寄存器,后面的数字就是其地址,
比如 CCM_CCGR0 寄存器的地址就是 0X020C4068 ,这个很简单,很好理解。 接下看一下 main.c 文件,在 main.c 里面输入如下所示代码:
#include "main.h"

/*使能外设时钟*/
void clk_enable(void){
    CCM_CCGR1 = 0xffffffff;
    CCM_CCGR2 = 0xffffffff;
    CCM_CCGR3 = 0xffffffff;
    CCM_CCGR4 = 0xffffffff;
    CCM_CCGR5 = 0xffffffff;
    CCM_CCGR6 = 0xffffffff;

}

/*初始化LED*/
void led_init(void){
    SW_MUX_GPIO1_IO03 = 0x5;        /*复用为GPIO1_IO03 */
    SW_PAD_GPIO1_IO03 = 0x10b0;     /*设置GPIO1_IO03电器属性*/

    /*GPIO初始化*/
    GPIO1_GDIR = 0x8;               /*设置为输出*/
    GPIO1_DR   = 0x0;               /*打开LED灯*/

}
/*短延时*/
void delay_short(volatile unsigned int n){

    while(n--) {}

}

/*延时,一次循环大概是1ms,主频396MHz
 * n : 延时ms数
*/
void delay(volatile unsigned int n){

    while (n--)
    {
        delay_short(0x7ff);
    }
    

}

/*打开LED灯*/
void led_on(){

    GPIO1_DR &= ~(1<<3);    /*bit3清零*/
    
}
/*关闭LED灯*/
void led_off(){ 

    GPIO1_DR |= (1<<3);     /*bit3值置1*/

}

int main(void) {
    clk_enable();   /*使能外设时钟*/
    led_init();     /*初始化LED*/
    /*初始化LED */

    /*设置LED*/

    while(1){
        led_on(); 
        delay(500);

        led_off();
        delay(500);
    };
    return 0;

}
新建 Makefile 文件,在 Makefile 文件里面输入如下内容:
objs = start.o main.o

ledc.bin : $(objs)
	arm-linux-gnueabihf-ld -Timx6u.lds $^ -o ledc.elf
	arm-linux-gnueabihf-objcopy -O binary -S ledc.elf $@
	arm-linux-gnueabihf-objdump -D -m arm ledc.elf > ledc.dis

%.o : %.c
	arm-linux-gnueabihf-gcc -Wall -nostdlib -c -O2 -o $@ $<

%.o : %.S
	arm-linux-gnueabihf-gcc -Wall -nostdlib -c -O2 -o $@ $<

clean :
	rm -rf *.o ledc.bin ledc.elf ledc.dis

设置C语言运行环境,新建文件start.S:


.global _start

_start:
    /* 设置处理器进入SVC模式*/
    mrs r0, cpsr            /*读取cpsr到r0 */
    bic r0, r0, #0x1f       /*清除cpsr的bit4-0 */
    orr r0, r0, #0x13       /*使用svc模式*/
    msr cpsr, r0            /*将r0写入cpsr */

    /*设置SP指针 */
    ldr sp, =0x80200000
    b main                  /*跳转到C语言的main函数*/
使用软件 imxdownload 将编译出来的 ledc.bin 烧写到 SD 卡中,命令如下:
chmod 777 imxdownload
// 给予 imxdownload 可执行权限,一次即可
./imxdownload ledc.bin /dev/sdd
// 烧写到 SD 卡中
烧写成功以后将 SD 卡插到开发板的 SD 卡槽中,然后复位开发板,如果代码运行正常的
话 LED0 就会以 500ms 的时间间隔亮灭。

标签: 二极管sp0402u

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台