1. 程式人生 > 其它 >Cortex-M3 (NXP LPC1788)之GPIO

Cortex-M3 (NXP LPC1788)之GPIO

技術標籤:LPC1788

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

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

#define rFIO1DIR	(*(volatile unsigned*)0x20098020) //高速GPIO 方向控制暫存器,用於配置管腳的輸入或輸出,預設為輸入
#define rFIO1MASK 	(*(volatile unsigned*)0x20098030) //高速GPIO 遮蔽暫存器,被遮蔽的位將不能進行GPIO的控制操作,預設無效
#define rFIO1PIN (*(volatile unsigned*)0x20098034) //高速GPIO 管腳值暫存器,可以操作未被FIOXMASK遮蔽的GPIO埠 #define rFIO1SET (*(volatile unsigned*)0x20098038) //高速GPIO 管腳置位暫存器,置一操作使相應位輸出高電平 #define rFIO1CLR (*(volatile unsigned*)0x2009803c) //高速GPIO 管腳清楚暫存器,置一操作使相應位輸出低電平 void Delay(int); int main(void) { rFIO1DIR |= (1<<18);
//GPIO1.18 -> OUTPUT while(1) { rFIO1SET |= (1<<18);//輸出高電平 可以用 rFIO1PIN |= (1<<18); Delay(500000); rFIO1CLR |= (1<<18);//輸出低電平 可以用 rFIO1PIN &= ~(1<<18); Delay(500000); } } void Delay(int i) { int k; for(k=0; k<i; k++); } void SystemInit (void) { }

程式比較簡單,對於GPIO的操作我們可以使用輸出置位暫存器FIOXSET和輸出清零暫存器FIOXCLR進行操作,也可以直接使用GPIO管腳值暫存器FIOXPIN進行操作。

程式最後寫了一個void SystemInit(void)空函式,是因為在啟動程式startup_LPC177x_8x.S中 IMPORT SystemInit 聲明瞭一個外部函式,並且LDR R0, =SystemInit執行該函式。如果不定義該函式編譯會報錯。 我們可以在該函式中進行LPC1788的時鐘初始化。我們的程式中沒有進行初始化,根據LPC1788的資料手冊,系統上電或任何復位,將使用內部的IRC作為時鐘源。而後可以在軟體上進行切換,而該切換就可以在void SystemInit(void)中實現。

最後可以使用之前環境搭建中介紹的進行Debug除錯或者下載程式。

本文章轉載自 Cortex-M3 (NXP LPC1788)之GPIO