一:LED驅(qū)動(dòng)編寫(xiě)
要編寫(xiě)LED驅(qū)動(dòng),首先的知道開(kāi)發(fā)板的構(gòu)造;開(kāi)發(fā)板分為核心板與底板;編寫(xiě)驅(qū)動(dòng)的第一步就是要看開(kāi)發(fā)板,找到LED燈在開(kāi)發(fā)板上的位置及所對(duì)應(yīng)的名字;第一步就要查看核心板電路圖,以及底板電路圖;最后就是查看開(kāi)發(fā)板手冊(cè),然后進(jìn)行程序編寫(xiě):
通過(guò)看開(kāi)發(fā)板我們可以知道LED燈的位置的核心板上,在核心板上找到LED的電路圖,Ctrl+F可以在文檔中快捷查找:

通過(guò)電路圖我們可以看出:LED燈的一端已經(jīng)接高電平,只要給另一端加低電平LED就會(huì)被點(diǎn)亮。
然后查看LED在核心板上的引腳:

由上圖我們可以看出,LED1對(duì)應(yīng)的是GPM4_0
然后通過(guò)芯片數(shù)據(jù)手冊(cè)可以查到它的具體用法:

通過(guò)手冊(cè)我們可以看出:GPM4CON 置一輸出,表示控制,置零輸入,表示檢測(cè),GPM4DAT表示它的值和引腳的電壓狀態(tài)對(duì)于,值為一時(shí)表示高電平,值為零時(shí)表示底電平,下面貼出代碼:
1 .global main 2 main: 3 mov ip, sp 4 sub sp, sp, #12 5 stmdb sp!, {fp, ip, lr} 6 add fp, sp, #8 7 8 ldr r3, gpmcon 9 ldr r0, =0x1 10 str r0, [r3] 11 12 ldr r3, gpmdat 13 ldr r0, =0x0 14 str r0, [r3] 15 16 add sp, fp, #4 17 ldmdb sp, {fp, sp, pc} 18 19 gpmcon: 20 .word 0x110002e0 21 22 gpmdat: 23 .word 0x110002e4
下面的用C語(yǔ)言代碼是實(shí)現(xiàn)四個(gè)LED燈的閃爍
1 #define GPM4CON (*(unsigned long *)0x110002e0)//宏定義
2 #define GPM4DAT (*(unsigned long *)0x110002e4)
3
4 void (*udelay)(int) = 0xc3e25f90;
5 int main()
6 {
7 GPM4CON &= ~0xffff;
8 GPM4CON |= 0x1111;
9
10 while(1) {
11 GPM4DAT |= 0xf;//led off
12 udelay(250000);
13 GPM4DAT &= ~0xf;
14 udelay(250000);//led on
15 }
16 }
跑馬燈:
1 #define GPM4CON (*(unsigned long *)0x110002e0)
2 #define GPM4DAT (*(unsigned long *)0x110002e4)
3
4 void (*udelay)(int) = 0xc3e25f90;
5
6 int main()
7 {
8
9 GPM4CON &= ~0xffff;
10 GPM4CON |= 0x1111;
11 unsigned long tmp = 0xf;
12
13 while(1) {
14
15 if((tmp & 0xf) == 0) {
16 tmp = 0xf;
17 }
18
19 GPM4DAT = tmp << 1;
20 tmp = GPM4DAT;
21 udelay(250000);
22
23 }
24
25 }
流水燈:
1 #define GPM4CON (*(unsigned long *)0x110002e0)
2 #define GPM4DAT (*(unsigned long *)0x110002e4)
3
4 void (*udelay)(int) = 0xc3e25f90;
5
6 int main()
7 {
8
9 GPM4CON &= ~0xffff;
10 GPM4CON |= 0x1111;
11 unsigned long i = 0;
12 while(1) {
13 GPM4DAT = 0xf;
14 GPM4DAT &= ~(1 << i);//流水
15 udelay(500000);//延時(shí)
16 i++;
17 if(i == 4) {
18 i = 0;
19 }
20 }
21
22 }
上面程序總用到的延時(shí)函數(shù)udelay(),由于U-Boot作為嵌入式Linux系統(tǒng)的引導(dǎo),不具有標(biāo)準(zhǔn)C庫(kù)中的內(nèi)容。要使用像printf函數(shù),延時(shí)函數(shù)udelay(),就需要u-boot中提供的。u-boot函數(shù)內(nèi)容在u-boot源碼文件中就需要u-boot中提供的。u-boot函數(shù)內(nèi)容在u-boot源碼文件中的System.map文件中。System.map文件是被內(nèi)核所使用的符號(hào)表。符號(hào)表是一個(gè)在符號(hào)名稱與它們的存儲(chǔ)器位置間的查詢表格。符號(hào)名稱可能是變量的名稱或是函數(shù)名稱。當(dāng)要查詢符號(hào)名稱的位置或是特定位置的符號(hào)名稱時(shí),就會(huì)需要System.map。找到函數(shù)的對(duì)應(yīng)地址,就可以對(duì)它進(jìn)行使用了;

二:蜂鳴器驅(qū)動(dòng)編寫(xiě):
通過(guò)開(kāi)發(fā)板我們可以看出蜂鳴器位于底板:
查看電路圖:

通過(guò)查看底板手冊(cè)可知,當(dāng)XpwmTOUT0處于高電平是蜂鳴器就會(huì)響起;通過(guò)XpwmTOUT0我們?cè)诤诵陌迳险业剿囊_
然后查看芯片手冊(cè):

由圖我們可以看出GPD0CON為0x1時(shí)控制控制:GPD0DAT為1為高電平:下面貼出匯編代碼:
1 .global main
2 main:
3 mov ip, sp
4 sub sp, sp, #12
5 stmdb sp!, {fp, ip, lr}
6 add fp, sp, #8
7
8 ldr r3, gpdcon
9 ldr r0, =0x1
10 str r0, [r3]
11
12 ldr r3, gpmdat
13 ldr r0, =0x1
14 str r0, [r3]
15
16 add sp, fp, #4
17 ldmdb sp, {fp, sp, pc}
18
19 gpdcon:
20 .word 0x114000a0
21
22 gpmdat:
23 .word 0x114000a4
C語(yǔ)言的代碼:
1 #define GPD0CON (*(volatile unsigned long*)0x114000a0)
2 #define GPD0DAT (*(volatile unsigned long*)0x114000a4)
3
4 void (*udelay)(int) = 0xc3e25f90;
5 int main(void)
6 {
7 GPD0CON = 0x0001;
8 while(1){
9 GPD0DAT = 0x1;
10 udelay(250000);
11 GPD0DAT = 0x0;
12 udelay(250000);//延時(shí)
13 }
14
15 return 0;
16 }
-
led
+關(guān)注
關(guān)注
243文章
24622瀏覽量
691201 -
存儲(chǔ)器
+關(guān)注
關(guān)注
39文章
7739瀏覽量
171770 -
LED驅(qū)動(dòng)
+關(guān)注
關(guān)注
73文章
1089瀏覽量
142626 -
蜂鳴器
+關(guān)注
關(guān)注
12文章
900瀏覽量
47780
發(fā)布評(píng)論請(qǐng)先 登錄
深入解析LM3519:高頻升壓白光LED驅(qū)動(dòng)器的卓越之選
TPS61042:高性能LED驅(qū)動(dòng)芯片的深度解析
深入解析LM27952:高效白光LED驅(qū)動(dòng)芯片的全方位洞察
LT1932:高效LED驅(qū)動(dòng)芯片的設(shè)計(jì)與應(yīng)用解析
電子工程師必看:LTM8040 LED驅(qū)動(dòng)模塊深度解析
LTC3212 RGB LED 驅(qū)動(dòng)芯片深度解析
LT3746:高效32通道LED驅(qū)動(dòng)芯片的解析與應(yīng)用
LT3478:高性能LED驅(qū)動(dòng)芯片的深度解析
ADP8863:多功能LED驅(qū)動(dòng)芯片的深度解析
ADP8860:多功能LED驅(qū)動(dòng)芯片的全解析
LT3950:多功能LED驅(qū)動(dòng)芯片的全面解析
LT3909:高性能2MHz升壓LED驅(qū)動(dòng)器的深度解析
LED1642GW:16通道LED驅(qū)動(dòng)芯片的深度解析
深入解析LED7708:高效LED驅(qū)動(dòng)的理想之選
關(guān)于有源蜂鳴器及無(wú)源蜂鳴器的區(qū)別及驅(qū)動(dòng)各類(lèi)單片機(jī)案例
一文解析蜂鳴器驅(qū)動(dòng)及LED驅(qū)動(dòng)編寫(xiě)
評(píng)論