ARM学习之GPIO实现流水灯
生活随笔
收集整理的這篇文章主要介紹了
ARM学习之GPIO实现流水灯
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
今天在學(xué)習(xí)MMU時的時候,寫了一個流水燈程序。雖然很簡單,但是不怕大家笑話,由于學(xué)C語言的時候沒學(xué)位運算操作,再加上硬件實驗做的少,所以實現(xiàn)這個也費了不少力氣呢。
/** leds.c: 循環(huán)點亮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對應(yīng)的GPF4/5/6三個引腳設(shè)為輸出while(1){wait(30000);GPFDAT |= 0x70; //每次循環(huán)關(guān)閉4,5,6三個燈GPFDAT &= ~(1<<i); //0位每次循環(huán)4,5,6位if(++i == 7)i = 4;}return 0; } 代碼分析:在實現(xiàn)流水燈程序時,主要是配置GPF數(shù)據(jù)寄存器和GPF控制寄存器。在向GPFDAT中寫數(shù)的時候,就本人認(rèn)為,應(yīng)該保證不影響到其他的位(這里是除了4,5,6的其他的位,因為你不知道其他的位有沒有用于其他的用途,在這里雖然沒影響。)對于寄存器的操作,對寄存器特定位進(jìn)行置 1 或者清 0 或者取反, 關(guān)鍵點在于要事先構(gòu)建一個特別的數(shù), 這個數(shù)和原來的值進(jìn)行位與、 位或、 位異或等操作。(1)、寄存器特定位清零用&。(2)、寄存器特定位置 1 用|(3)、寄存器特定位取反用~總結(jié)
以上是生活随笔為你收集整理的ARM学习之GPIO实现流水灯的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 经典汽车电瓶充电电路图讲解_电工基础电路
- 下一篇: 影响SIM卡座连接器的有哪些指标?