1. 確定硬件連接
打開OK6410底板電路圖,找到LED,可以發現NLEDx為0時LED點亮。
找到LED的控制引腳,發現LED控制引腳通過連接器連到了核心板:
打開核心板電路圖,找到對應的連接器中相同位置下的引腳,發現核心板上的命名與底板相同。
注意:設計者為了方便會將核心板與底板連接處的端口命名為相同的名字,但判斷兩者的連接位置與端口名其實是沒有關系的。從底板上可以看出4個LED所在的連接器引腳編號分別為47,49,46和39,因此在核心板上應該找連接器上這幾個編號的引腳,核心板連接器上47,49,46和39號引腳才是與底板LED相連的引腳,只不過設計者為了方便,將核心板上這幾個引腳也命名為NLED1~4。
繼續在核心板上尋找,能找到NLEDx控制的引腳為GPM0~3
2. 確定GPM相關寄存器的地址和要寫入的值
打開6410的芯片手冊,找到GPM相關寄存器
可以發現有3個寄存器與GPM相關,三個寄存器的地址分別為0x7F008820、0x7F008824、0x7F008828,其中GPMCON用于配置引腳功能
我們要控制LED需要把GPM0~3都配置成輸出模式,因此GPMCON的位[15:0]應為0x1111。GPMDAT用于控制引腳輸出電平
如果要控制LED全亮,則GPMDAT位[3:0]應為0x0,全滅則為0xF。GPMPUD用于使能引腳的上下拉,一般會將LED控制引腳配置為上拉模式(注意區分信號的輸入輸出和電流的流入流出,GPMCON配置輸出指的是信號從6410輸出到外部,當輸出信號為0的時候電流會流入6410芯片)。因此GPMPUD的位[7:0]應為0xAA。
3. 編寫匯編代碼
編寫led.s
1 .section .text 2 .global _start 3 _start: 4 LDR R0, =0x7F008820 @GPMCON,也可以認為是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關閉 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
此時生成了可執行文件led.bin
4. 下載文件
連接minicom,重啟后進入U-boot,輸入dnw 50008000
在虛擬機中輸入:sudo dnw led.bin
下載成功后在開發板中輸入:go 50008000
此時可以看到4個LED呈流水燈效果。
注意:我是利用U-boot下載程序,此時U-boot已經運行起來了,而U-boot已經做了很多初始化工作了,如設置堆棧指針、關閉看門狗、指定外設基地址等,如果想要將程序燒寫進Nandflash的0地址,則這些初始化工作必須自己做。
-
led
+關注
關注
242文章
23312瀏覽量
661657 -
寄存器
+關注
關注
31文章
5357瀏覽量
120690 -
連接器
+關注
關注
98文章
14585瀏覽量
136789
發布評論請先 登錄
相關推薦
評論