OK6410裸機(jī)程序---leds
我們首先看一下OK6410的LED連接圖:
本文引用地址:http://m.butianyuan.cn/article/201611/317818.htm其中NLED1234,和s3c6410的GPIO引腳相連,如圖:
其實(shí)LED發(fā)光的原理很簡(jiǎn)單的,就是把LED連接到s3c6410的GPIO引腳,通過改變s3c6410的GPIO上的電平來控制LED發(fā)光。
這樣的話就很清楚了,我們來看下s3c6410 datasheet上關(guān)于GPIO引腳的設(shè)置:
首先是GPMCON寄存器:
因?yàn)槲覀円刂艷PIO的電平,所以要把對(duì)應(yīng)的GPIO引腳設(shè)置為Output,即:0001
像我們這個(gè)就是:GPMCON &=0xffff fff1;
把這個(gè)引腳設(shè)置好后,我們可以通過改變GPMDAT的值來改變引腳上的電平。下面是GPMDAT:
可以看出來我們只要把對(duì)應(yīng)的位設(shè)置為0或1,就可以控制LED了。簡(jiǎn)單吧?
下面看下源程序:
- 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就交替亮了。
評(píng)論