Mark Underwood wrote:
--- Jonathan McDowell noodles@earth.li wrote:
On Sat, Jan 28, 2006 at 01:09:06AM +0000, David Given wrote:
On Friday 27 January 2006 23:16, Jonathan McDowell wrote: [...]
I haven't looked at the code, but my notes say NOR flash is at 0x0, SDRAM is at 0x10000000 and SRAM is at 0x20000000.
That's different from the E2. Do you know if the jump-to opcode works on the E2's version of pbl? Because while pblq can write to RAM and flash, it can't execute anything.
I believe you can jump to code in SRAM, but not SDRAM. So you'd load your kernel into SDRAM, load a small piece of setup code into SRAM and jump to that. It would setup registers as appropriate and jump to the kernel.
J.
Thanks for the help. I can now write my program to my RAM (both SRAM & SDRAM) and have read back the contents and it match's what I have written :-). I have implemented the exec function so I _should_ now be able to run my own program on my E3. However, I have written a few simple assember programs and haven't seen any life from them (no UART output). I have tested the exec code by reading some data from the E3 and then running pbl exec 0x00000000 which starts the unit booting, so unless the have changed to byte order of the address that you need to pass to pbl for the exec the only thing I can think is wrong is my test program (my ARM assembly is a bit rusty :-( ).
I have attached both my modifed pbltool and my latest test program. Any pointers would be great. If anyone has got some standalone code to run on the E3 please could you send me it so I can try it out.
Mark
Hi,
After making a minor change to your source I get the following output :
(/mnt/usr3/src/ckermit/) C-Kermit>c Connecting to /dev/ttyS0, speed 9600 Escape character: Ctrl-\ (ASCII 28, FS): enabled Type the escape character followed by C to get back, or followed by ? to see other options. ---------------------------------------------------- ?îîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîî < many lines snipped> ?îîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîî (Back at here) ---------------------------------------------------- (/mnt/usr3/src/ckermit/) C-Kermit>
So I think the code is executing now
Here is your (modified) source code ...
.text
_start: .global _start
entry: ldr r1, uart0_base @ Load R1 with the base address of UART0 mov r0, #0 @ R0 = 0 strb r0, [r1, #0x04] @ Store 0 in in IER of UART0 ldr r1, uart1_base @ Load R1 with the base address of UART1 strb r0, [r1, #0x04] @ Store 0 in in IER of UART1 ldr r1, uart2_base @ Load R1 with the base address of UART2 strb r0, [r1, #0x04] @ Store 0 in in IER of UART2
loop: mvn r0, #0x30 @ Store '0' in r0 ldr r1, uart0_base @ Load R1 with the base address of UART0 strb r0, [r1] @ Store 0 in the TX of UART0
mvn r0, #0x31 @ Store '1' in r0 ldr r1, uart1_base @ Load R1 with the base address of UART1 strb r0, [r1] @ Store 0 in the TX of UART1
mvn r0, #0x32 @ Store '2' in r0 ldr r1, uart2_base @ Load R1 with the base address of UART2 strb r0, [r1] @ Store 0 in the TX of UART2 b loop @ Carry on forever
uart0_base: .word 0xfffb0000 uart1_base: .word 0xfffb0800 uart2_base: .word 0xfffb9800 _end:
By the way, I got errors when I tried to write to 0x20000000 so I tried 0x20010000 just as a test and it worked.
assembled as ... /opt/cross/arm/bin/arm-linux-gnu-as -marm9tdmi --gdwarf2 uart_hi.S
linked as /opt/cross/arm/bin/arm-linux-gnu-ld -o dummy a.out
I'm completely new to ARM so if the above is wrong I welcome corrections.
Regards, Mark.