新聞中心

        OK6410裸機程序---leds

        作者: 時間:2016-11-09 來源:網(wǎng)絡(luò) 收藏
        今天寫一下OK6410裸機中的led燈,led是差不最簡單的裸機驅(qū)動了吧。詳細的說一下,以便梳理自己的知識。

        我們首先看一下OK6410的LED連接圖:

        本文引用地址:http://www.104case.com/article/201611/317818.htm

        其中NLED1234,和s3c6410的GPIO引腳相連,如圖:

        其實LED發(fā)光的原理很簡單的,就是把LED連接到s3c6410的GPIO引腳,通過改變s3c6410的GPIO上的電平來控制LED發(fā)光。

        這樣的話就很清楚了,我們來看下s3c6410 datasheet上關(guān)于GPIO引腳的設(shè)置:

        首先是GPMCON寄存器:

        因為我們要控制GPIO的電平,所以要把對應(yīng)的GPIO引腳設(shè)置為Output,即:0001

        像我們這個就是:GPMCON &=0xffff fff1;

        把這個引腳設(shè)置好后,我們可以通過改變GPMDAT的值來改變引腳上的電平。下面是GPMDAT:

        可以看出來我們只要把對應(yīng)的位設(shè)置為0或1,就可以控制LED了。簡單吧?

        下面看下源程序:

        1. void(*printf)(char*,...)=0xc7e11650;
        2. #defineGPMCON(*(unsignedlongvolatile*)0x7F008820)
        3. #defineGPMDAT(*(unsignedlongvolatile*)0x7F008824)
        4. #defineGPMPUD(*(unsignedlongvolatile*)0x7F008828)
        5. /*
        6. *NLED1GPM0
        7. *NLED2GPM1
        8. *NLED3GPM2
        9. *NLED4GPM3
        10. */
        11. voidset_gpio(void);
        12. voidudelay();
        13. intmain(void)
        14. {
        15. set_gpio();
        16. printf("%2x/n",GPMDAT);
        17. GPMDAT=0x00;
        18. inti;
        19. while(1){
        20. for(i=0;i<=3;i++)
        21. {
        22. GPMDAT=(1<
        23. udelay();
        24. }
        25. }
        26. return0;
        27. }
        28. /*
        29. *delay
        30. */
        31. voidudelay()
        32. {
        33. unsignedlongi=0;
        34. for(i=0;i<1000000;i++);
        35. }
        36. voidset_gpio(void)
        37. {
        38. GPMCON&=0xffff1111;
        39. }

        這樣,leds就交替亮了。



        關(guān)鍵詞: OK6410裸機程序led

        評論


        技術(shù)專區(qū)

        關(guān)閉
        主站蜘蛛池模板: 德钦县| 广德县| 新绛县| 诏安县| 黎城县| 盘山县| 合江县| 宽城| 北安市| 福州市| 武定县| 陆良县| 山丹县| 尼木县| 萨嘎县| 富民县| 西充县| 巩义市| 古田县| 辽中县| 临西县| 建水县| 江安县| 伊春市| 宝坻区| 镇远县| 武宁县| 隆子县| 温州市| 永德县| 九台市| 崇州市| 五大连池市| 施秉县| 古交市| 安阳市| 道孚县| 望谟县| 丘北县| 昭通市| 三穗县|