无操做系统时的 LED 驱动

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 }spa

须要理解#define reg _ gpio _ ctrl *(volatile int *)(ToVirtual(GPIO _ REG _ CTRL))指针

ToVirtual(GPIO _ REG _ CTRL) 表示一个数值,如0x20it

那么 (volatile int *)(ToVirtual(GPIO _ REG _ CTRL) io

前面加(volatile int *)  表示0x20是个地址,并且这个地址类型是volatile int,有着固定的地址。变量

再在前面加"*":*(volatile int *)0x20则变成了变量co

*(volatile int *)0x20可看做是一个普通变量,这个变量有固定的地址,指向0x20。而0x20只是个常量,不是指针更不是变量。data

后面的代码,就是针对这个地址进行赋值处理volatile

相关文章
相关标签/搜索