1 #define reg _ gpio _ ctrl *(volatile int *)(ToVirtual(GPIO _ REG _ CTRL))
2 #define reg _ gpio _ data *(volatile int *)(ToVirtual(GPIO _ REG _ DATA))
3 /*初始化 LED*/
专业始于专注 卓识源于远见
‐ 10 ‐
4 void LightInit(void)
5 {
6 reg _ gpio _ ctrl |= (1 << n); /*设置 GPIO 为输出*/
7 }
8
9 /*点亮 LED*/
10 void LightOn(void)
11 {
12 reg _ gpio _ data |= (1 << n); /*在 GPIO 上输出高电平*/
13 }
14
15 /*熄灭 LED*/
16 void LightOff(void)
17 {
18 reg _ gpio _ data &= ~(1 << n); /*在 GPIO 上输出低电平*/
19 }
需要理解#define reg _ gpio _ ctrl *(volatile int *)(ToVirtual(GPIO _ REG _ CTRL))
ToVirtual(GPIO _ REG _ CTRL) 表示一个数值,如0x20
那么 (volatile int *)(ToVirtual(GPIO _ REG _ CTRL)
前面加(volatile int *) 表示0x20是个地址,而且这个地址类型是volatile int,有着固定的地址。
再在前面加"*":*(volatile int *)0x20则变成了变量
*(volatile int *)0x20可看作是一个普通变量,这个变量有固定的地址,指向0x20。而0x20只是个常量,不是指针更不是变量。
后面的代码,就是针对这个地址进行赋值处理