新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > Cortex-M3 (NXP LPC1788)之GPIO

        Cortex-M3 (NXP LPC1788)之GPIO

        作者: 時間:2016-11-19 來源:網絡 收藏

        經過前一篇的分析,現在可以進入C環境進行各個模塊的學習。首先進行簡單的GPIO控制LED燈的操作,開發板通過GPIO1.18控制LED燈,電路如下圖:

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

        為了對LPC1788的內部結構有更好的理解和學習,雖然NXP給出了封裝好的庫函數,但是我將自己編寫代碼便于直接對內部原理進行分析。代碼如下

        1. #definerFIO1DIR(*(volatileunsigned*)0x20098020)//高速GPIO方向控制寄存器,用于配置管腳的輸入或輸出,默認為輸入
        2. #definerFIO1MASK(*(volatileunsigned*)0x20098030)//高速GPIO屏蔽寄存器,被屏蔽的位將不能進行GPIO的控制操作,默認無效
        3. #definerFIO1PIN(*(volatileunsigned*)0x20098034)//高速GPIO管腳值寄存器,可以操作未被FIOXMASK屏蔽的GPIO端口
        4. #definerFIO1SET(*(volatileunsigned*)0x20098038)//高速GPIO管腳置位寄存器,置一操作使相應位輸出高電平
        5. #definerFIO1CLR(*(volatileunsigned*)0x2009803c)//高速GPIO管腳清楚寄存器,置一操作使相應位輸出低電平
        6. voidDelay(int);
        7. intmain(void)
        8. {
        9. rFIO1DIR|=(1<<18);//GPIO1.18->OUTPUT
        10. while(1)
        11. {
        12. rFIO1SET|=(1<<18);//輸出高電平可以用rFIO1PIN|=(1<<18);
        13. Delay(500000);
        14. rFIO1CLR|=(1<<18);//輸出低電平可以用rFIO1PIN&=~(1<<18);
        15. Delay(500000);
        16. }
        17. }
        18. voidDelay(inti)
        19. {
        20. intk;
        21. for(k=0;k
        22. }
        23. voidSystemInit(void)
        24. {
        25. }

        程序比較簡單,對于GPIO的操作我們可以使用輸出置位寄存器FIOXSET和輸出清零寄存器FIOXCLR進行操作,也可以直接使用GPIO管腳值寄存器FIOXPIN進行操作。程序最后寫了一個void SystemInit(void)空函數,是因為在啟動程序startup_LPC177x_8x.S中 IMPORT SystemInit 聲明了一個外部函數,并且LDR R0, =SystemInit執行該函數。如果不定義該函數編譯會報錯。 我們可以在該函數中進行LPC1788的時鐘初始化。我們的程序中沒有進行初始化,根據LPC1788的數據手冊,系統上電或任何復位,將使用內部的IRC作為時鐘源。而后可以在軟件上進行切換,而該切換就可以在void SystemInit(void)中實現。

        最后可以使用之前環境搭建中介紹的進行Debug調試或者下載程序。



        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 三穗县| 西乌珠穆沁旗| 嘉定区| 临漳县| 融水| 龙胜| 韶关市| 大连市| 永泰县| 赫章县| 乾安县| 铁力市| 句容市| 吉水县| 鹤峰县| 广昌县| 乐清市| 大石桥市| 嘉兴市| 双辽市| 巨鹿县| 黄龙县| 工布江达县| 崇礼县| 乌鲁木齐县| 南开区| 泽库县| 增城市| 清徐县| 镇宁| 浙江省| 上思县| 定兴县| 北流市| 叶城县| 睢宁县| 佛冈县| 长宁区| 津市市| 旬阳县| 耿马|