嵌入式Linux 13 裸機 C語言LED驅動

2021-10-11 15:32:37 字數 4041 閱讀 3056

此筆記由個人整理

塞上蒼鷹_fly

課程來自:正點原子_手把手教你學linux

.global _start

_start:

/* 設定處理器進入svc模式 */

mrs r0,cpsr /* 讀取cpsr到r0 */

bic r0,r0,#0x1f /* 對cpsr低五位清零 */

orr r0,r0,#0x13 /* 使用svc模式 */

msr cpsr,r0 /* 將r0寫入到cpsr中 */

/* 設定sp指標 */

ldr sp,=0x80200000

b main /* 跳轉到main函式中 */

#ifndef __main_h

#define __main_h

/*定義要使用的暫存器*/

#define ccm_ccgr0 *((volatile unsigned int *)0x020c4068)

#define ccm_ccgr1 *((volatile unsigned int *)0x020c406c)

#define ccm_ccgr2 *((volatile unsigned int *)0x020c4070)

#define ccm_ccgr3 *((volatile unsigned int *)0x020c4074)

#define ccm_ccgr4 *((volatile unsigned int *)0x020c4078)

#define ccm_ccgr5 *((volatile unsigned int *)0x020c407c)

#define ccm_ccgr6 *((volatile unsigned int *)0x020c4080)

#define sw_mux_gpio1_io03 *((volatile unsigned int *)0x020e0068)

#define sw_pad_gpio1_io03 *((volatile unsigned int *)0x020e02f4)

#define gpio1_dr *((volatile unsigned int *)0x0209c000)

#define gpio1_gdir *((volatile unsigned int *)0x0209c004)

#define gpio1_psr *((volatile unsigned int *)0x0209c008)

#define gpio1_icr1 *((volatile unsigned int *)0x0209c00c)

#define gpio1_icr2 *((volatile unsigned int *)0x0209c010)

#define gpio1_imr *((volatile unsigned int *)0x0209c014)

#define gpio1_isr *((volatile unsigned int *)0x0209c018)

#define gpio1_edge_sel *((volatile unsigned int *)0x0209c01c)

#endif

#include

"main.h"

/*使能外設時鐘*/

void

clk_enable

(void

)/*初始化led*/

void

led_init

(void

)/*短延時*/

void

delay_short

(volatile

unsigned

int n)

}/*長延時(大概一毫秒)*/

/*n:延時毫秒數*/

void

delay

(volatile

unsigned

int n)

}/*開啟led*/

void

led_on

(void

)/*關閉led*/

void

led_off

(void

)/*主函式*/

intmain

(void

)return0;

}

objs = main.o start.o		#定義變數objs,main.o和start.o是其依賴檔案

#注意start.o要在main.o的前面,這樣在編譯的時候才會最先編譯,第一次做的時候,我找了半天都沒找到原因在哪,後面編譯的時候也是第一冊將main.o放在start.o前面才會產生的結果

.rodata align(4) : /*將所有檔案的.rodata放入到rodata段*/

.data align(4) : /*將所有檔案的.data放入到data段*/

__bss_start = .; /*對bss段的起始位址進行賦值*/

.bss align(4) :

__bss_end = .; /*對bss段的結束位址進行賦值*/

嵌入式Linux裸機開發(十五) LCD

lcd liquid crystal display 是 液晶顯示器簡稱。lcd的構造是在兩片平行的 玻璃基板當中放置液晶盒,下基板玻璃上設定 tft 薄膜電晶體 上基板玻璃上設定彩色濾光片,通過tft上的訊號與電壓改變來控制液晶分子的轉動方向,從而達到控制每個畫素點偏振光出射與否而達到顯示目的。按...

嵌入式Linux裸機開發(十二) iNand簡介

inand 是sandisk公司研發的儲存晶元,可以看成sd卡或mmc卡晶元化。inand是sandisk公司符合emmc協議的晶元系列名稱,內部採用mlc儲存顆粒。inand介面電路設計複雜,功能完善,提供emmc介面協議,與soc的emmc控制器配對通訊。相對mlc nandflash inan...

嵌入式Linux 17 裸機 蜂鳴器實驗

此筆記由個人整理 塞上蒼鷹 fly 課程來自 正點原子 手把手教你學linux 函式宣告 void beep init void beep初始化 void beep switch int status beep控制函式 endif beep h include bsp beep.h beep初始化 ...