ARM9点灯实验
友善之臂的ARM9板子做实验发现:
/* key_led.c */#define GPBCON (*(volatile unsigned long *)0x56000010)#define GPBDAT (*(volatile unsigned long *)0x56000014)#define GPGCON (*(volatile unsigned long *)0x56000060)#define GPGDAT (*(volatile unsigned long *)0x56000064)/* * LED1~4,GPB5/GPB6/GPB7/GPB8 */#define GPB5_out (1 << (5 * 2))#define GPB6_out (1 << (6 * 2))#define GPB7_out (1 << (7 * 2))#define GPB8_out (1 << (8 * 2))/* * KEY1~4, GPG0/GPG3/GPG5/GPG6 */#define GPG0_in (0 << (0 * 2))#define GPG3_in (0 << (3 * 2))#define GPG5_in (0 << (5 * 2))#define GPG6_in (0 << (6 * 2))int main(){ unsigned long dwDat; GPBCON = GPB5_out | GPB6_out | GPB7_out | GPB8_out; GPGCON = GPG0_in & GPG3_in & GPG5_in & GPG6_in; while(1) { dwDat = GPGDAT; /* 对应位同1做与运算,低电平LED亮 */ if (dwDat & (1<<0)) GPBDAT |= (1 << 5); // LED1 turn off else GPBDAT &= ~(1 << 5); // LED1 turn on if (dwDat & (1<<3)) GPBDAT |= ( 1 << 6); // LED2 turn off else GPBDAT &= ~(1 << 6); // LED2 turn on if (dwDat & (1<<5)) GPBDAT |= (1 << 7); // LED3 turn off else GPBDAT &= ~(1 << 7); // LED3 turn on if (dwDat & (1 << 6)) GPBDAT |= (1 << 8); // LED4 turn off else GPBDAT &= ~(1 << 8); // LED4 turn on } return 0;}