1. 確定硬件連接
打開OK6410底板電路圖,找到LED,可以發(fā)現(xiàn)NLEDx為0時LED點亮。

找到LED的控制引腳,發(fā)現(xiàn)LED控制引腳通過連接器連到了核心板:

打開核心板電路圖,找到對應(yīng)的連接器中相同位置下的引腳,發(fā)現(xiàn)核心板上的命名與底板相同。
注意:設(shè)計者為了方便會將核心板與底板連接處的端口命名為相同的名字,但判斷兩者的連接位置與端口名其實是沒有關(guān)系的。從底板上可以看出4個LED所在的連接器引腳編號分別為47,49,46和39,因此在核心板上應(yīng)該找連接器上這幾個編號的引腳,核心板連接器上47,49,46和39號引腳才是與底板LED相連的引腳,只不過設(shè)計者為了方便,將核心板上這幾個引腳也命名為NLED1~4。

繼續(xù)在核心板上尋找,能找到NLEDx控制的引腳為GPM0~3

2. 確定GPM相關(guān)寄存器的地址和要寫入的值
打開6410的芯片手冊,找到GPM相關(guān)寄存器

可以發(fā)現(xiàn)有3個寄存器與GPM相關(guān),三個寄存器的地址分別為0x7F008820、0x7F008824、0x7F008828,其中GPMCON用于配置引腳功能

我們要控制LED需要把GPM0~3都配置成輸出模式,因此GPMCON的位[15:0]應(yīng)為0x1111。GPMDAT用于控制引腳輸出電平

如果要控制LED全亮,則GPMDAT位[3:0]應(yīng)為0x0,全滅則為0xF。GPMPUD用于使能引腳的上下拉,一般會將LED控制引腳配置為上拉模式(注意區(qū)分信號的輸入輸出和電流的流入流出,GPMCON配置輸出指的是信號從6410輸出到外部,當(dāng)輸出信號為0的時候電流會流入6410芯片)。因此GPMPUD的位[7:0]應(yīng)為0xAA。

3. 編寫匯編代碼
編寫led.s
1 .section .text 2 .global _start 3 _start: 4 LDR R0, =0x7F008820 @GPMCON,也可以認(rèn)為是GPM寄存器基地值 5 6 LDR R1, [R0] @取出GPMCON的值 7 LDR R2, =0xFFFF 8 BIC R1, R1, R2 9 LDR R2, =0x1111 10 ORR R1, R1, R2 11 STR R1, [R0] @配置GPM0~3為輸出模式 12 13 LDR R1, [R0, #4] @取出GPMDAT的值 14 ORR R1, R1, #0xF 15 STR R1, [R0, #4] @GPMDAT低4位置1,所有LED關(guān)閉 16 17 LDR R1, [R0, #8] @取出GPMPUD的值 18 BIC R1, R1, #0xFF 19 ORR R1, R1, #0xAA 20 STR R1, [R0, #8] @GPM0~3使能上拉 21 loop: 22 LDR R1, [R0, #4] 23 BIC R1, R1, #0xF 24 ORR R1, R1, #0xE 25 STR R1, [R0, #4] @點亮第一個LED 26 BL delay 27 28 LDR R1, [R0, #4] 29 BIC R1, R1, #0xF 30 ORR R1, R1, #0xD 31 STR R1, [R0, #4] @點亮第二個LED 32 BL delay 33 34 LDR R1, [R0, #4] 35 BIC R1, R1, #0xF 36 ORR R1, R1, #0xB 37 STR R1, [R0, #4] @點亮第三個LED 38 BL delay 39 40 LDR R1, [R0, #4] 41 BIC R1, R1, #0xF 42 ORR R1, R1, #0x7 43 STR R1, [R0, #4] @點亮第四個LED 44 BL delay 45 B loop 46 delay: 47 LDR R2, =0x1000000 48 delay_loop: 49 SUB R2, R2, #1 50 CMP R2, #0 51 BNE delay_loop 52 MOV PC, LR 53 54 .end
輸入命令:
arm-none-linux-gnueabi-gcc -c led.s -o led.o
arm-none-linux-gnueabi-ld -Ttext 0 led.o -o led.elf
arm-none-linux-gnueabi-objcopy -O binary led.elf led.bin
此時生成了可執(zhí)行文件led.bin
4. 下載文件
連接minicom,重啟后進(jìn)入U-boot,輸入dnw 50008000
在虛擬機(jī)中輸入:sudo dnw led.bin
下載成功后在開發(fā)板中輸入:go 50008000
此時可以看到4個LED呈流水燈效果。
注意:我是利用U-boot下載程序,此時U-boot已經(jīng)運(yùn)行起來了,而U-boot已經(jīng)做了很多初始化工作了,如設(shè)置堆棧指針、關(guān)閉看門狗、指定外設(shè)基地址等,如果想要將程序燒寫進(jìn)Nandflash的0地址,則這些初始化工作必須自己做。
-
led
+關(guān)注
關(guān)注
244文章
24634瀏覽量
691367 -
寄存器
+關(guān)注
關(guān)注
31文章
5611瀏覽量
130130 -
連接器
+關(guān)注
關(guān)注
104文章
16176瀏覽量
147319
發(fā)布評論請先 登錄
用匯編給CH32寫了一個本機(jī)代碼FORTH實現(xiàn)
編寫簡單高效單片機(jī)匯編程序
LED驅(qū)動電路失效分析及解決方案
LED驅(qū)動電路設(shè)計
250種IC功放的電路圖
門老師教你快速看懂電子電路圖
GC9A01-TFT屏幕驅(qū)動(整理有stm32/51單片機(jī)/arduino等驅(qū)動代碼)
LED裸機(jī)驅(qū)動電路圖設(shè)計及編寫匯編代碼
評論