GPIOプログラミング(二)ledランプの制御
制御レジスタは、入力とすると、読み出しレジスタが対応するピン状態を知る.出力とすると、ライトレジスタは、対応するリード角を高低レベルに出力することができる.
ここで抵抗を引くかどうかはledランプの点灯に影響しません.
直接ソースにアクセスします.c
開発ボードに降りると、コアボードの4つの小さなランプが点滅しています.
ここで抵抗を引くかどうかは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つの小さなランプが点滅しています.