mini2440硬件篇之GPIO

1. 硬件原理

GPIO是最简单的硬件,通用输入/输出端口,可以输入输出高电平、低电平。一般也没太多东西,就记录一下上拉电阻和下拉电阻。上拉电阻的作用是,当GPIO引脚处于第三态,既不是高电平,也不是低电平,而是呈高阻态,相当于悬空,没有接任何东西,它的电平由上拉电阻上拉到高电平状态。

如图,当GPIOx为输入时,如果没有上拉电阻,电平将不确定,通过上拉电阻VCC连接,读到的将是高电平,下拉电阻同理。

2. 芯片手册

3. mini2440电路图

 

由原理图可以看出,GBP5~8引脚接4个led灯,当引脚输出低电平,led亮。下面是流水灯的实现代码

4. S3C2440寄存器

对于s3c2440来说,它有上百个IO口,分为A-J 9组,每组类似,都有3个寄存器。

GPxCON配置寄存器,A组比较特殊,0配置为输出,1配置为特殊功能,一般GPACON全设1。其它组每2位控制一引脚,00表示输入,01表示输出,10表示特殊功能,11保留。

CPxDAT数据寄存器,很简单,配置为输出时,写1输出高电平,配置为输入时,读到1就是读入高电平。

GPxUP上拉寄存器,写1内部无上拉,写0上拉。一般配置成输入时,需要上拉。


led.h

/*******************************************************************
 * Copyright (C),2011-2012, XXX.
 * FileName: led.h 
 * Author:HuangYinqing
 * Version:1.0
 * Date::2012-04-22
 * Description:led驱动.
 * Function List:
 * History:
 ******************************************************************/
#ifndef __LED_H__
#define __LED_H__

#define LED_CON_MASK	( (3<<10) | (3<<12) | (3<<14) | (3<<16) )
#define LED_CON_OUT	( (1<<10) | (1<<12) | (1<<14) | (1<<16) )

/*led对应的引脚*/
#define LED1_PIN		(1<<5)
#define LED2_PIN		(1<<6)
#define LED3_PIN		(1<<7)
#define LED4_PIN		(1<<8)

/*函数声明*/
void LedInit(void);
void LedOn(unsigned long ulLedPin);
void LedOff(unsigned long ulLedPin);
void LedTest(void);

#endif



led.c
/*******************************************************************
 * Copyright (C),2011-2012, XXX.
 * FileName: led.c 
 * Author:HuangYinqing
 * Version:1.0
 * Date::2012-04-22
 * Description:led驱动.
 * Function List:
 * History:
 ******************************************************************/
#include "common.h"
#include "core.h"
#include "led.h"


/********************************************************************
函数功能:led初始化。
入口参数:无。
返    回:无。
备    注:无。
********************************************************************/
void LedInit(void)
{
	/*设置GPB5-GPB8为输出端口*/
	rGPBCON &= ~LED_CON_MASK;
	rGPBCON |= LED_CON_OUT;
}

/********************************************************************
函数功能:点亮某个led灯。
入口参数:
	ulLedPin:led引脚号,取LEDn_PIN(1<=n<=4)
返    回:无。
备    注:无。
********************************************************************/
void LedOn(unsigned long ulLedPin)
{
	rGPBDAT &= ~ulLedPin;
}

/********************************************************************
函数功能:关闭某个led灯。
入口参数:
	ulLedPin:led引脚号,取LEDn_PIN(1<=n<=4)
返    回:无。
备    注:无。
********************************************************************/
void LedOff(unsigned long ulLedPin)
{
	rGPBDAT |= ulLedPin;
}

/********************************************************************
函数功能:流水灯测试。
入口参数:无
返    回:无。
备    注:无。
********************************************************************/
void LedTest(void)
{
	LedOn(LED1_PIN);
	mdelay(1000);	
	LedOff(LED1_PIN);
	
	LedOn(LED2_PIN);
	mdelay(1000);		
	LedOff(LED2_PIN);
	
	LedOn(LED3_PIN);
	mdelay(1000);
	LedOff(LED3_PIN);
	
	LedOn(LED4_PIN);
	mdelay(1000);
	LedOff(LED4_PIN);
}


  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值