日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

(转)Cortex-M3 (NXP LPC1788)之GPIO

發布時間:2025/3/8 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 (转)Cortex-M3 (NXP LPC1788)之GPIO 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

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

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

?

[cpp]
  • #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)?
  • {?
  • ?????
  • }?
  • #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 -> OUTPUTwhile(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的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。