首先,我在這裏按照這個教程(http://www.cl.cam.ac.uk/projects/raspberrypi/tutorials/os/)。Raspberry Pi:嵌入式編程練習,入門
在第一個練習中,您將瞭解如何尋址負責打開綠色好LED的GPIO引腳。我有Raspberry pi的rev C,據我所知,它使用Broadcom(BCM2835)微處理器,它的外設有以下數據表:(http://www.cl.cam.ac.uk/projects/raspberrypi/tutorials/os/downloads/SoC-Peripherals.pdf)。
我已閱讀數據表的第89至104頁,但仍然丟失。即使提供了交叉編譯器構建鏈,作者提供的程序似乎也不運行。條帶化的意見了由作者我所提供的源:
.section .init
.global _start
_start:
ldr r0, =0x20200000
/* Enable output on the 16th pin */
mov r1, #1
lsl r1, #18
str r1, [r0, #4]
/* Turn the pin off to turn LED light on */
mov r1,#1
lsl r1,#16
str r1, [r0, #40]
loop$:
/* Keep the system running */
b loop$
我在哪裏卡住了,在數據表中我看到任何關於地址0x20200000。從表6-2的91頁開始,我們看到描述前32位的表格。在表6-1中,我們看到一個寄存器描述。第一個寄存器的地址是0x7E200000。我試圖在這個地方使用這個地址,但我仍然沒有運氣讓燈亮起來。
底線LED燈不亮,所以我可以學習,我應該去哪裏獲得有關如何調試的信息?其次,我錯過了什麼?
如果它很有用,這是一個img文件的hexdump,我dd'ing到SD卡。
[email protected]:~/Devel/scripts/assembly/raspberry-pi-mini-os/example1$ make clean all
rm -f build/*.o
rm -f build/output.elf
rm -f kernel.img
rm -f kernel.list
rm -f kernel.map
../arm-2008q3/bin/arm-none-eabi-as -I source/ source/main.s -o build/main.o
../arm-2008q3/bin/arm-none-eabi-ld --no-undefined build/main.o -Map kernel.map -o build/output.elf -T kernel.ld
../arm-2008q3/bin/arm-none-eabi-objcopy build/output.elf -O binary kernel.img
../arm-2008q3/bin/arm-none-eabi-objdump -d build/output.elf > kernel.list
[email protected]:~/Devel/scripts/assembly/raspberry-pi-mini-os/example1$
hexdump -C ./kernel.img
00000000 18 00 9f e5 01 10 a0 e3 01 19 a0 e1 04 10 80 e5 |................|
00000010 01 10 a0 e3 01 18 a0 e1 28 10 80 e5 fe ff ff ea |........(.......|
00000020 00 00 20 20 |.. |
編輯
這裏是.LIST文件
00000000 <_start>:
0: e59f0018 ldr r0, [pc, #24] ; 20 <loop$+0x4>
4: e3a01001 mov r1, #1 ; 0x1
8: e1a01901 lsl r1, r1, #18
c: e5801004 str r1, [r0, #4]
10: e3a01001 mov r1, #1 ; 0x1
14: e1a01801 lsl r1, r1, #16
18: e5801028 str r1, [r0, #40]
0000001c <loop$>:
1c: eafffffe b 1c <loop$>
20: 20200000 .word 0x20200000
如果顛倒你看到了排隊與.LIST文件hexdump都的字節序。
e59f0018
e3a01001
e1a01901
e5801004
e3a01001
e1a01801
e5801028
eafffffe
20200000
@dwelch一秒重新啓動,我會把它給你。 – 2013-05-04 19:12:24
我仍然困惑常量去了哪裏,嘗試改變ldr r0,= 0x2020000兩行mov r0,#0x20000000; orr r0,r0,#0x00200000 – 2013-05-04 19:35:19
broadcom文檔描述了gpio,您將看到包含外設的內存空間從0x7E000000開始,映射到0x20000000處的ARM內存空間。所以0x7E20000的外設是arm內存空間的地址0x20200000。 – 2013-05-04 19:37:11