tutorial precio pinout datasheet caracteristicas blue black beaglebone c arm beagleboard omap

precio - Hola mundo, bare metal Beagleboard



beaglebone caracteristicas (3)

No se puede simplemente escribir ciegamente una cadena de caracteres en un UART; es necesario verificar el estado de cada carácter; funciona en el ejemplo de un solo carácter porque el UART siempre estará listo para el primer carácter, pero para el segundo y Caracteres posteriores que necesita sondear (o mejor aún, usar un ISR, pero caminemos antes de ejecutar).

Aquí hay un buen código de ejemplo: http://hardwarefreak.wordpress.com/2011/08/30/some-experience-with-the-beagleboard-xm-part-2/

Estoy tratando de ejecutar un programa tipo ''hello world'' en mi Beagleboard-xm rev. C, al invocar una función C puts del ensamblaje.

Hasta ahora he estado usando esto como referencia: http://wiki.osdev.org/ARM_Beagleboard

Esto es lo que tengo hasta ahora, pero no hay salida.

Hola C

volatile unsigned int * const UART3DR = (unsigned int *)0x49020000; void puts(const char *s) { while(*s != ''/0'') { *UART3DR = (unsigned int)(*s); s++; } } void hello() { puts("Hello, Beagleboard!/n"); }

boot.asm

.global start start: ldr sp, =stack_bottom bl hello b .

linker.ld

ENTRY(start) MEMORY { ram : ORIGIN = 0x80200000, LENGTH = 0x10000 } SECTIONS { .hello : { hello.o(.text) } > ram .text : { *(.text) } > ram .data : { *(.data) } > ram .bss : { *(.bss) } > ram . = . + 0x5000; /* 4kB of stack memory */ stack_bottom = .; }

Makefile

ARMGNU = arm-linux-gnueabi AOPS = --warn --fatal-warnings COPS = -Wall -Werror -O2 -nostdlib -nostartfiles -ffreestanding boot.bin: boot.asm $(ARMGNU)-as boot.asm -o boot.o $(ARMGNU)-gcc-4.6 -c $(COPS) hello.c -o hello.o $(ARMGNU)-ld -T linker.ld hello.o boot.o -o boot.elf $(ARMGNU)-objdump -D boot.elf > boot.list $(ARMGNU)-objcopy boot.elf -O srec boot.srec $(ARMGNU)-objcopy boot.elf -O binary boot.bin

Usar solo el archivo asm como este funciona.

.equ UART3.BASE, 0x49020000 start: ldr r0,=UART3.BASE mov r1,#''c''

Aquí hay alguna información relacionada con Beagleboard / minicom: http://paste.ubuntu.com/829072/

¿Alguna sugerencia? :)

También intenté

void hello() { *UART3DR = ''c''; }

Estoy usando minicom y envío el archivo a través de ymodem, luego trato de ejecutarlo con:

go 0x80200000

El flujo de control de hardware y software en minicom está desactivado.


eso debería haber funcionado para ti. Aquí hay un código que desenterré de cuando, esta noche no lo intenté en un beagleboard, solo me aseguré de que compilara, había funcionado al mismo tiempo ...

startup.s:

.code 32 .globl _start _start: bl main hang: b hang .globl PUT32 PUT32: str r1,[r0] bx lr .globl GET32 GET32: ldr r0,[r0] bx lr

Hola C :

extern void PUT32 ( unsigned int, unsigned int ); extern unsigned int GET32 ( unsigned int ); void uart_send ( unsigned char x ) { while((GET32(0x49020014)&0x20)==0x00) continue; PUT32(0x49020000,x); } void hexstring ( unsigned int d ) { //unsigned int ra; unsigned int rb; unsigned int rc; rb=32; while(1) { rb-=4; rc=(d>>rb)&0xF; if(rc>9) rc+=0x37; else rc+=0x30; uart_send(rc); if(rb==0) break; } uart_send(0x0D); uart_send(0x0A); } int main ( void ) { hexstring(0x12345678); return(0); }

memmap (secuencia de comandos del enlazador):

MEMORY { ram : ORIGIN = 0x82000000, LENGTH = 256K } SECTIONS { ROM : { startup.o } > ram }

Makefile:

CROSS_COMPILE = arm-none-eabi AOPS = --warn --fatal-warnings COPS = -Wall -Werror -O2 -nostdlib -nostartfiles -ffreestanding all : hello.bin hello.bin : startup.o hello.o memmap $(CROSS_COMPILE)-ld startup.o hello.o -T memmap -o hello.elf $(CROSS_COMPILE)-objdump -D hello.elf > hello.list $(CROSS_COMPILE)-objcopy hello.elf -O binary hello.bin startup.o : startup.s $(CROSS_COMPILE)-as $(AOPS) startup.s -o startup.o hello.o : hello.c $(CROSS_COMPILE)-gcc -c $(COPS) hello.c -o hello.o clean : rm -f *.o rm -f *.elf rm -f *.bin rm -f *.list

Parece que acabo de dejar el puntero de la pila donde sea que lo tenga el gestor de arranque. Del mismo modo, como usted, asumió que el gestor de arranque había inicializado el puerto serie.

Supongo que tiene acceso al puerto serie funcionando, ¿ve uboot y puede escribir comandos para descargar este programa (xmodem, o lo que sea) en el ram de las placas? Si no puede hacer eso, entonces puede ser que no esté conectado al puerto serie correcto. el puerto serie de beagleboards es complicado, podría necesitar hacer su propio cable.


No tengo suficiente repetición para comentar ... Pero mi respuesta fue

Funciona de cualquier manera. Ahora lo extraño es que puedo imprimir caracteres individuales con uart_send (''c'') por ejemplo, pero no puedo imprimir cadenas print_string (char * str) {while (* str! = ''/ 0'') uart_send (* str ++); } print_string ("Prueba"); . Tiene alguna idea sobre esto?

es:

Escribe más rápido en el búfer de salida, ya que UART puede enviar ... Por lo tanto, debe verificar si el búfer de salida está vacío antes de enviar un nuevo carácter.

Lo he hecho en el código de mi blog ( http://hardwarefreak.wordpress.com/2011/08/30/some-experience-with-the-beagleboard-xm-part-2/ )