GPIO编程(二)led灯的控制

控制寄存器,当设为输入时,读取寄存器可知相应引脚状态。当设为输出时,写寄存器可以使相应引角输出高低电平。

在这里设置上拉电阻与否不影响led灯的点亮。

直接上源码led.c

#define GPKCONC0        (*(volatile int*)0x7f008800) /*把地址强制转换为指针*/
#define GPKDAT          (*(volatile int*)0x7f008808)
#define GPKPUD          (*(volatile int*)0x7f00880c)

void init(void);
void led(int, int);
void delay(int);

void entry(void)
{
        init();
        while(1)
        {
                led(0, 1);
                delay(1000);
                led(1, 1);
                delay(1000);
                led(2, 1);
                delay(1000);
                led(3, 1);
                delay(1000);
                led(0, 0);
                delay(1000);
                led(1, 0);
                delay(1000);
                led(2, 0);
                delay(1000);
                led(3, 0);
                delay(1000);
        }
}

void init(void)
{
        GPKCONC0 = (GPKCONC0 & ~(0xffffU << 16)) | (0x1111U << 16);
        GPKPUD = (GPKPUD & ~(0xffU << 8)) | (0x00U << 8);
}

void led(int num, int light)
{
        if (light)
        {
                GPKDAT |= 1 << (num+4);
        }
        else
        {
                GPKDAT &= ~(1 << (num + 4));
        }
}

void delay(int times)
{
        volatile int i;
        for(i = 0; i <(times << 5); ++i);
}
编译命令

arm-linux-gcc -S -o led.S led.c
arm-linux-as -o led.o led.S
arm-linux-ld -Ttext 0xc0008000 -nostdinc -o led.elf led.o
arm-linux-objcopy -O binary -R .comment -R .note -S led.elf led.bin

下到开发板上,这个时候你就看到了,核心板上的四个小灯闪啊闪的

你可能感兴趣的:(编程,c,delay)