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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

ARM学习之GPIO实现流水灯

發布時間:2023/12/29 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ARM学习之GPIO实现流水灯 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

今天在學習MMU時的時候,寫了一個流水燈程序。雖然很簡單,但是不怕大家笑話,由于學C語言的時候沒學位運算操作,再加上硬件實驗做的少,所以實現這個也費了不少力氣呢。

/** leds.c: 循環點亮4個LED* 屬于第二部分程序,此時MMU已開啟,使用虛擬地址*/ #define GPFCON (*(volatile unsigned long *)0x56000050) #define GPFDAT (*(volatile unsigned long *)0x56000054) #define GPF4_out (1<<(4*2)) #define GPF5_out (1<<(5*2)) #define GPF6_out (1<<(6*2))static inline void wait(volatile unsigned long dly) {int i;for(; dly > 0; dly--)for(i = 0;i<100;++i); }int main(void) {unsigned long i = 4;GPFCON = GPF4_out|GPF5_out|GPF6_out; // 將LED1,2,4對應的GPF4/5/6三個引腳設為輸出while(1){wait(30000);GPFDAT |= 0x70; //每次循環關閉4,5,6三個燈GPFDAT &= ~(1<<i); //0位每次循環4,5,6位if(++i == 7)i = 4;}return 0; } 代碼分析:在實現流水燈程序時,主要是配置GPF數據寄存器和GPF控制寄存器。在向GPFDAT中寫數的時候,就本人認為,應該保證不影響到其他的位(這里是除了4,5,6的其他的位,因為你不知道其他的位有沒有用于其他的用途,在這里雖然沒影響。)對于寄存器的操作,對寄存器特定位進行置 1 或者清 0 或者取反, 關鍵點在于要事先構建一個特別的數, 這個數和原來的值進行位與、 位或、 位異或等操作。(1)、寄存器特定位清零用&。(2)、寄存器特定位置 1 用|(3)、寄存器特定位取反用~

總結

以上是生活随笔為你收集整理的ARM学习之GPIO实现流水灯的全部內容,希望文章能夠幫你解決所遇到的問題。

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