GPIO / LED---- 驱动开发编程
一般来说,GPIO的Pin都是可选功能的:
GPIO[x] :selects the function of GPIO Pin.
为什么?不要问.
操作:
1.将某一个GPIO选择功能复用为GPIO.
2.将该GPIO选择为GPIO输出.
3.控制该管脚输出高/低电平.
1、电路原理图
底板电路原理图:x6818bv2.pdf
结论,控制LED1的亮或者灭
实质就是控制导线GPIOC12出现低或者高电平
核心板电路原理图:x4418cv3_release20150713.pdf
规则,底板和核心中名称相同的导线是同一条导线
方法,拷贝底板中导线的名称
在核心板电路原理图中搜索该名称
结论,控制LED1的亮或者灭
实质就是控制CPU上的W15输出低或者高电平
问题:软件上如何控制W15输出低或者高电平?
要去商品S5P6818的使用说明书(datasheet/数据手册)中找答案
SEC_S5P6818X_Users_Manual_preliminary_Ver_0.00.pdf
2、cpu datasheet
P77
W15, 可选功能1(GPIO)
s5p6818上有537个管脚,其中160个可以作为GPIO
ARM中特殊功能寄存器都是4字节(32bit)
GPIOCALTFN0 0xc001c020
[25:24] 01, W15配置为可选功能1(IO功能)
GPIOCOUTENB 0xc001c004
[12] 1, W15管脚选择为输出模式
GPIOCOUT 0xc001c000
[12] 0/1, W15输出低/高电平
总结:软件控制硬件的媒介就是特殊功能寄存器
特殊功能寄存器每个bit含义要查芯片的手册
C语言回顾:
1.指针:
int a;
a = 100;
*(&a) = 100;
*((int *) 0x10000000) = 100;
地址 (volatile int *) 0x10000000
访问 *(volatile int *) 0x10000000
2.位操作:
// 错误的 误将其他管脚的功能改变了
//应该只改变需要改变的位,其他的位应该保持不变.
*(volatile int *) 0x10000000 = 0x01000000; //bit 24位置1,bit 25位置 0
// 正确做法 先将 24 25 位置0,再将 24位置1
*(volatile int *) 0x10000000 &= 0xfcffffff;
*(volatile int *) 0x10000000 |= 0x01000000;
// 标准做法: