為什麼要使用led?
(bootloader,kernel)開發初期,由於串列埠等硬體尚未被初始化,因此除錯手段相當有限,這時通常會採用led來做為程式除錯的重要手段。
led驅動設計:
1、設定gpio控制暫存器,把引腳設定為輸出功能
2、根據原理圖設定gpio資料暫存器,點亮led
.text黃色部分就是點亮led的程式,我之前學51、k60、stm32的時候,發現這些設定暫存器是驚人的相似,都是先選擇模式,在選擇怎麼輸出。.global
_start
_start:
b reset
ldr pc, _undefined_instruction
ldr pc, _software_interrupt
ldr pc, _prefetch_abort
ldr pc, _data_abort
ldr pc, _not_used
ldr pc, _irq
ldr pc, _fiq
_undefined_instruction: .word undefined_instruction
_software_interrupt:.word software_interrupt
_prefetch_abort:.word prefetch_abort
_data_abort:.word data_abort
_not_used:.word not_used
_irq:.word irq
_fiq:.word reset
undefined_instruction:
nopsoftware_interrupt:
nopprefetch_abort:
nopdata_abort:
nopnot_used:
nopirq:
nopfiq:
nopreset:
bl set_svc
bl disable_watchdog
bl disable_interrupt
bl disable_mmu
bl light_led
set_svc:
mrs r0, cpsr
bic r0, r0, #
0x1f
orr r0, r0, #
0xd3
msr cpsr, r0
mov pc, lr
#define pwtcon 0x53000000disable_watchdog:
ldr r0, =pwtcon
mov r1, #
0x0str r1, [r0]
mov pc, lr
disable_interrupt:
mvn r1, #
0x0ldr r0, =0x4a000008
str r1,[r0]
mov pc, lr
disable_mmu:
mcr p15,
0,r0,c7,c7,0
mrc p15,
0,r0,c1,c0,0
bic r0,r0,#
0x00000007
mcr p15,
0,r0,c1,c0,0
mov pc, lr
#define gpbcon 0x56000010
#define gpbdat 0x56000014light_led:
ldr r0, =gpbcon
ldr r1, =0x15400
str r1,[r0]
ldr r0, =gpbdat
ldr r1, =0x6bf
str r1, [r0]
mov pc, lr
6410還需要外設基位址初始化,cp15暫存器裡面有管理外設基位址的暫存器。
外設基位址是0x70000000,這個在6410手冊裡面搜尋70000000就行
這樣就生成了含有加頭**的gboot
智慧型路燈點亮新型城市
大概很多人都有聽說過智慧型城市,但是也有很多人不會想到路燈,而它卻是智慧型城市中不可或缺的一部分。目前,全球越來越多的城市把路燈改造作為物聯網建設的節點,並相容多個行業的應用。例如,監測節約照明能源 尋找空閒車位 測量空氣質素 安防行業等。一 什麼是物聯網智慧型路燈 二 智慧型路燈 小身段,大功能 ...
點亮led過程分析
在mini2440中,led,按鍵等驅動預設已經被編譯入核心,所以一直不知道同乙個硬體裝置資源能不能作為多個模組,編譯入核心。故重寫了乙個myled.ko,系統預設是led.ko,並用應用程式檢測。myled.c include include include include include inc...
點亮LED燈(一)
想當初都是用彙編來編寫微控制器的程式,那滋味現在想來都是滿滿的回憶,還是用c語言寫起來爽快啊!用c寫微控制器程式,只需要引入標頭檔案即可,實際上該標頭檔案只是定義了特殊功能暫存器位址。為了今後使用方便,我們封裝乙個函式,用來開關led燈,通過引數來控制操作的p埠,並且引入掩碼來操作單個和多個bit位...