您的位置 首页 模拟

ARM9 S3C2440—GPIO初始化设置

用于外部输入输出的GPIO配置主要有以下几步:1GPxCON的配置。每个IO引脚的功能都是复用的,由GPxCON决定引脚的功能是输出(01)输入(00)

用于外部输入输出的GPIO装备主要有以下几步:

1.GPxCON的装备。

每个IO引脚的功用都是复用的,由GPxCON决议引脚的功用是输出(01)输入(00)仍是其他功用(外部中止、串口等等),两个二进制位表明。

2.GPxUP的装备。

IO口是否敞开上拉电阻功用,0表明运用上拉电阻,1表明不运用,上拉电阻的用途是将引脚经过电阻与电源衔接,使引脚电平为高电平而不是悬空,芯片引脚悬空简单受外部的搅扰,导致过错输入输出。一般设置不运用上拉电阻,即rGPxUP=0xffffffff,每个IO口用1位二进制表明。

3.GPxDAT的设置。

每一位为相应引脚的输出电平或引脚的状况输入电平,一般在初始化中对这个寄存器不设置,可是对IO初始状况有要求的要设置,该寄存器默认值为未界说,假如想LED灯在敞开时全亮,那么就应该设置rGPxDAT=0x0(一般引脚输出低电平,LED亮),每个IO口用一位二进制表明。

假定装备四个LED灯,四个LED灯别离接GPB5-GPB8,LED灯初始化程序如下:

voidLed_port_init(void)

{

rGPBCON&=~((3<<10)|(3<<12)|(3<<14)|(3<<16));

rGPBCON|=(1<<10)|(1<<12)|(1<<14)|(1<<16);

rGPBUP=0xffffffff;//B组IO上拉电阻悉数不运用

rGPBDAT=0x0;//初始化B组IO口输出0,使LED灯亮

}

“rGPBCON&=~((3<<10)|(3<<12)|(3<<14)|(3<<16))”行的作用是将GPB5-GPB8地点的功用装备位清零,

“rGPBCON|=(1<<10)|(1<<12)|(1<<14)|(1<<16)”行才给相应位赋值01,输出功用。这两句的意思打个比方,要向一个桶里装麦子,先要把这个桶里的其他东西清空,把其他东西倒出来,当然了,或许这个桶原本便是空的,可是为了稳妥,仍是先倒一次桶,然后才再把麦子装进去。对其他寄存器的装备也是相同的道理,比方EINT0中止触发形式

rEXTINT0&=~(7|(7<<8));

rEXTINT0|=(0|(0<<8));//低电平触发外部中止

四位作为一个控制符的话便是“15<<多少位”,以此类推。别的为什么不直接写成“rGPBCON=0xfffc57ff”更省劲呢,一方面是因为这需求先写出二进制,再转化为16进制,32位的二进制转化起来仍是比较费事的,稍不留意就有过失,再者这样写也不便于程序的了解,程序的可读性变差。

0xfffc57ff的二进制为:11111111111111010101011111111111

以上便是LED灯的GPIO口初始化装备,下次用到的话只需求根据IO口的不同和IO口功用的不同稍作修正就能用。

为了程序的可读性,一般都把相应的数据操作宏界说为直观的英文,如“#defineLED1_ON~(1<<5)”用LED1_ON表明灯1亮。

voidLed_port_init(void);

#defineLED1_ON~(1<<5)

#defineLED2_ON~(1<<6)

#defineLED3_ON~(1<<7)

#defineLED4_ON~(1<<8)

#defineLED1_OFF(1<<5)

#defineLED2_OFF(1<<6)

#defineLED3_OFF(1<<7)

#defineLED4_OFF(1<<8)

voidMain(void)

{

inti;

Led_port_init();

for(i=0;i<100;i++)

{

rGPBDAT&=(LED1_ON)&(LED2_ON)&(LED3_ON)&(LED4_ON);

delay(10000);

rGPBDAT|=(LED1_OFF)|(LED2_OFF)|(LED3_OFF)|(LED4_OFF);

delay(10000);

}

}

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/zhishi/moni/255768.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部