GPIOプログラミング(二)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

開発ボードに降りると、コアボードの4つの小さなランプが点滅しています.