您的位置:首页 > 其它

OK6410裸机程序---leds

2011-05-02 15:49 323 查看
今天写一下OK6410裸机中的led灯,led是差不最简单的裸机驱动了吧。详细的说一下,以便梳理自己的知识。

我们首先看一下OK6410的LED连接图:



其中NLED1234,和s3c6410的GPIO引脚相连,如图:



其实LED发光的原理很简单的,就是把LED连接到s3c6410的GPIO引脚,通过改变s3c6410的GPIO上的电平来控制LED发光。

这样的话就很清楚了,我们来看下s3c6410 datasheet上关于GPIO引脚的设置:

首先是GPMCON寄存器:



因为我们要控制GPIO的电平,所以要把对应的GPIO引脚设置为Output,即:0001

像我们这个就是:GPMCON &=0xffff fff1;

把这个引脚设置好后,我们可以通过改变GPMDAT的值来改变引脚上的电平。下面是GPMDAT:



可以看出来我们只要把对应的位设置为0或1,就可以控制LED了。简单吧?

下面看下源程序:

void (*printf)(char *,...) = 0xc7e11650;
#define GPMCON (*(unsigned long volatile *)0x7F008820)
#define GPMDAT (*(unsigned long volatile *)0x7F008824)
#define GPMPUD (*(unsigned long volatile *)0x7F008828)
/*
* NLED1 GPM0
* NLED2 GPM1
* NLED3 GPM2
* NLED4 GPM3
*/
void set_gpio(void);
void udelay();
int main(void)
{
set_gpio();
printf("%2x/n",GPMDAT);
GPMDAT = 0x00;

int i;
while(1) {

for(i=0;i<=3;i++)
{
GPMDAT = (1<<i);
udelay();
}
}
return 0;
}
/*
* delay
*/
void udelay()
{
unsigned long  i=0;
for(i=0;i<1000000;i++);
}
void set_gpio(void)
{
GPMCON &= 0xffff1111;
}


这样,leds就交替亮了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: