0
问答首页 最新问题 热门问题 等待回答标签广场
我要提问

关于LPC43XX系列IO配置方法:

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,禁止滤波

       

提问者:yunhan8756 地点:- 浏览次数:5726 提问时间:08-28 07:08
我有更好的答案
提 交
撰写答案
提 交
1 / 3
1 / 3