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)、暫存器特定位取反用~
相關文章
- 流水燈實現
- 51微控制器實現流水燈
- 順序賦值的方式實現流水燈賦值
- [原始碼解析] 深度學習流水線並行Gpipe(1)---流水線基本實現原始碼深度學習並行
- FPGA學習(第10節)-模組的例化-Verilog層次化設計實現LED流水燈FPGA
- ARM學習之Nand FLash控制器NaN
- Arm pwn學習
- ARM學習之時鐘體系結構
- 實習面試流水賬面試
- STM32學習筆記——GPIO筆記
- arm相關學習
- STM32之GPIO及第一個STM32程式(跑馬燈)
- 嵌入式作業3.1 GPIO點亮小燈
- Java學習之註解Annotation實現原理Java
- STM32F4 GPIO 呼吸燈【庫函式操作】函式
- 立創泰山派學習03--GPIO的控制
- vue3原始碼學習之reactive實現Vue原始碼React
- MAX32630FTHR設計筆記(1):流水燈(GPIO輸出配置)及I2C驅動MAX14690筆記
- 實現探照燈效果
- 在一臺ubuntu的arm板子上學習arm彙編Ubuntu
- [原始碼解析] 深度學習流水線並行之PopeDream(1)--- Profile階段原始碼深度學習並行
- 原生幻燈片封裝學習封裝
- STM32流水燈在Protues上執行教程
- 一個51程式設計和模擬——流水燈程式設計
- 多工學習模型之ESMM介紹與實現模型
- 多工學習模型之DBMTL介紹與實現模型
- 純JS實現走馬燈JS
- 實現閃爍燈星星動畫動畫
- ARM學習之中斷體系結構
- 簡單實現跑馬燈案例
- mask-image實現聚光燈效果
- 【iCore4 雙核心板_ARM】例程八:定時器PWM實驗——呼吸燈定時器
- ARM嵌入式系統該如何學習
- ARM學習中的必知基本常識
- Java複習筆記第二篇--集合學習之實現原理二Java筆記
- 51微控制器流水燈電路以及C程式碼C程式
- nodejs學習之使用nodejs實現rm/cp/mv命令NodeJS
- CapsuleAO實現的學習