IO配置环节:
首先必须是能GPIO的时钟,
调用函数:
GPIO_CLKEnable();//自己编写
选择IO的功能:
LPC_SCU->SFSPX_Y:
X 代表具体IO端口 数字为 0~F
Y 示具体IO端口的管脚数目而定,最大数字为20
配置IO的方向:
主要操作的是LPC_GPIO_PORT 里面的DIR寄存器
主要操作为,0 表示此IO作为输入,1表示IO为输出
根据不同GPIO端口的分组的不同,将所有的IO统一到一个数组宽度为8的32位寄存器里面
具体分配可参考原理图,弄懂到底是怎么分配的
EX:配置一个4X4的矩阵:
选择PA1_3 作为列:
LPC_SCU->SFSPA_1 = 4;
LPC_SCU->SFSPA_2 = 4;
LPC_SCU->SFSPA_3 = 4;
LPC_SCU->SFSPA_4 = 4;
LPC_GPIO_PORT->DIR[4] |= ((1 << 8) |(1 << 9)|(1 << 10));//PA1_3// 输出
LPC_GPIO_PORT->DIR[5] |= (1 << 19);//PA4
选择PB0_3 作为行:
LPC_SCU->SFSPB_0 = 4;//配置为通用IO功能
LPC_SCU->SFSPB_1 = 4;
LPC_SCU->SFSPB_2 = 4;
LPC_SCU->SFSPB_3 = 4;
LPC_GPIO_PORT->DIR[5]&=~((1 << 20)| (1 << 21)|(1 << 22) | (1 << 23));//输入
键盘设置为一个按键对应一个IO,共阴,在此IO需设置为上拉输入
选择PB0_4 作为例子
LPC_SCU->SFSPB_0 = e;//配置为通用IO功能,使能上拉,禁止下拉,输入缓冲使能,IO反转快速,并是能滤波功能
LPC_SCU->SFSPB_1 = e;
LPC_SCU->SFSPB_2 = e;
LPC_SCU->SFSPB_3 = e;
LPC_GPIO_PORT->DIR[5]&=~((1 << 20)| (1 << 21)|(1 << 22) | (1 << 23));//输入
反之共阳,则IO需设置为下拉输入
LPC_SCU->SFSPB_0 = 0x18;//配置为通用IO功能
LPC_SCU->SFSPB_1 = 0x18;
LPC_SCU->SFSPB_2 = 0x18;
LPC_SCU->SFSPB_3 = 0x18;
LPC_GPIO_PORT->DIR[5]&=~((1 << 20)| (1 << 21)|(1 << 22) | (1 << 23));//输入
关于SFSPX_Y 寄存器位操作说明:
BIT 2:0 选IO功能,
BIT 3
0,禁止下拉
1,开启下拉
BIT 4
0,使能上拉
1,禁止下拉
BIT 5
0,IO反转速度为低速
1, IO反转为高速
BIT 6
0,输入缓冲禁止
1,输入缓冲使能
BIT 7
0,使能滤波
1,禁止滤波
|