今日写一下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;
- #defineGPMCON(*(unsignedlongvolatile*)0x7F008820)
- #defineGPMDAT(*(unsignedlongvolatile*)0x7F008824)
- #defineGPMPUD(*(unsignedlongvolatile*)0x7F008828)
- /*
- *NLED1GPM0
- *NLED2GPM1
- *NLED3GPM2
- *NLED4GPM3
- */
- voidset_gpio(void);
- voidudelay();
- intmain(void)
- {
- set_gpio();
- printf(“%2x/n”,GPMDAT);
- GPMDAT=0x00;
- inti;
- while(1){
- for(i=0;i<=3;i++)
- {
- GPMDAT=(1<
- udelay();
- }
- }
- return0;
- }
- /*
- *delay
- */
- voidudelay()
- {
- unsignedlongi=0;
- for(i=0;i<1000000;i++);
- }
- voidset_gpio(void)
- {
- GPMCON&=0xffff1111;
- }
这样,leds就替换亮了。