您的位置 首页 5G

ARM9(S3C2440)的IO口–LED流水灯

概述S3C2440A包含了130个多功能输入输出口引脚并且它们为如下显示的八个端口:ndash;端口A(GPA):25位输出端口ndash;端口

概述

S3C2440A 包括了130 个多功用输入/输出口引脚而且它们为如下显现的八个端口:
– 端口A(GPA):25 位输出端口
– 端口B(GPB):11 位输入/输出端口
– 端口C(GPC):16 位输入/输出端口
– 端口D(GPD):16 位输入/输出端口
– 端口E(GPE):16 位输入/输出端口
– 端口F(GPF):8 位输入/输出端口
– 端口G(GPG):16 位输入/输出端口
– 端口H(GPH):9 位输入/输出端口
– 端口J(GPJ):13 位输入/输出端口
每个端口都能够简略的由软件装备为各种系统装备和规划要求。你必须在开端主程序前界说运用的每个引脚的功用。假如没有运用某个引脚的复用功用,这个引脚能够装备为I/O 口。

IO口操控寄存器

端口装备寄存器(GPACON 至GPJCON)
S3C2440A 中,大多数端口为复用引脚。因而要决议每个引脚挑选哪项功用。PnCON(引脚操控寄存器)决
定了每个引脚运用哪项功用。
端口数据寄存器(GPADAT 至GPJDAT)
假如端口装备为输出端口,能够写入数据到PnDAT 的相应位。假如端口装备为输入端口,能够从PnDAT 的相
应位读取数据。
端口上拉寄存器(GPBUP 至GPJUP)
端口上拉寄存器操控每个端口组的使能/制止上拉电阻。当相应位为0 时使能引脚的上拉电阻。当为1 时制止上拉电阻。假如使能了上拉电阻,那么上拉电阻与引脚的功用设置无关(输入、输出、DATAn、EINTn 等等)
杂项操控寄存器
此寄存器操控睡觉形式,USB 引脚和CLKOUT 挑选的数据端口上拉电阻。
外部中止操控寄存器
24 个外部中止由各种信号办法触发。EXTINT 寄存器为外部中止恳求装备信号触发办法为低电平触发、高电平触发、下降沿触发、上升沿触发或双边缘触发。
因为每个外部中止引脚包括一个数字滤波器,中止操控能够承认恳求信号是否善于3 个时钟。
EINT[15:0]用于唤醒源

LED流水灯试验运用PB口的GPB5-PGB8操控4个LED循环点亮。选用共阳极接法,即当端口位为低电平时LED亮,高电平时LED灭。

过程:

1.IO口初始化,设置GPBCON,GPBUP寄存器。

在这里PB口的GPB5-PGB8作为通用IO口运用,完成输出功用,所以GPBCON的GPB5-PGB8位应别离都为01,即GPBCON[17:10] 为 01010101;GPBUP初始状况全为0,即便能上拉电阻功用,可不必设置,此处进行了设置。
I/O口与外围设备衔接一般要经过光电阻隔或其他阻隔器材,直接相连一定要承认负载不能超过 4个与非门。光电阻隔一是可维护微处理器;二是可进行电平转化;三是可对某些信号进行分配,所以在一般情况下都要加。
2.操控思路比较简略,让PB口的5-8位循环变为低电平(其他时刻均为高电平),即可完成流水灯,在两次电平改换中心参加延时。

3.程序

#define rGPBCON (*(volatile unsigned *)0x56000010)//Port B control
#define rGPBDAT (*(volatile unsigned *)0x56000014)//Port B data
#define rGPBUP (*(volatile unsigned *)0x56000018)//Pull-up control B

#define LED1_ON(rGPBDAT &=~(1<<5))//GPB5 位清0
#define LED1_OFF(rGPBDAT |=(1<<5) )//GPB5 方位1
#define LED2_ON(rGPBDAT &=~(1<<6))
#define LED2_OFF(rGPBDAT |=(1<<6))
#define LED3_ON(rGPBDAT &=~(1<<7))
#define LED3_OFF(rGPBDAT |=(1<<7))
#define LED4_ON(rGPBDAT &=~(1<<8))
#define LED4_OFF(rGPBDAT |=(1<<8))

void Delay(void)
{
int i;
for(i=0;i<1000000;i++);
}

int Main()
{
rGPBCON &=~((3<<10)|(3<<12)|(3<<14)|(3<<16));//对GPBCON[10:17]清零
rGPBCON |=((1<<10)|(1<<12)|(1<<14)|(1<<16));//设置GPB5~8为输出
rGPBUP &=~((1<<5)|(1<<6)|(1<<7)|(1<<8));//设置GPB5~8的上拉功用
rGPBDAT |=(1<<5)|(1<<6)|(1<<7)|(1<<8);//封闭LED

while(1)
{
LED1_ON;Delay();LED1_OFF;
LED2_ON;Delay();LED2_OFF;
LED3_ON;Delay();LED3_OFF;
LED4_ON;Delay();LED4_OFF;
}
return 0;
}

4.程序阐明,程序中对寄存器的设置选用了#define LED1_ON (rGPBDAT &=~(1<<5)) 这种办法,比较直接赋值的办法,这种表明办法比较简单调查出是寄存器的哪一位发生了改动,而且确保除了需求改动的位发生改动之外,其他位坚持不变!

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

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

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

微信扫一扫关注我们

返回顶部