1. 程式人生 > >GPIO程式設計(二)led燈的控制

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

下到開發板上,這個時候你就看到了,核心板上的四個小燈閃啊閃的