Red de conocimiento informático - Computadora portátil - Ejemplo de solicitud de programación mixta en lenguaje C y lenguaje ensamblador

Ejemplo de solicitud de programación mixta en lenguaje C y lenguaje ensamblador

/*

* main.c

* Este código de demostración está diseñado para usarse con las placas de demostración IP2022

* V1.0 y V3.0.

*

* Demuestra el uso del periférico virtual UART del paquete ipUART

* Creación de un loopback serial simple. La UART está configurada para utilizar el

* puerto "A PC" en la IPUART. > El UART está configurado para usar el

* puerto "A PC" en la placa de demostración y está conectado a un programa de terminal de PC (como HyperTerminal) mediante un cable serie directo

*. Las características de UART se establecen en la herramienta de configuración.

*

* Copyright © 2001 Ubicom Inc. Todos los derechos reservados.

*

* Este documento contiene el Acuerdo de licencia de software de Ubicom, Inc. Ubicom distribuido con

* este documento. Si no está seguro de ser un usuario autorizado o de informar

* cualquier uso no autorizado, comuníquese con Ubicom.

* La copia o distribución no autorizada de este documento está sujeta a sanciones civiles y penales. y

* Sanciones penales.

*

* $RCSfile: main.c, v $

* $Fecha: 2002/07/31 00:37:05 $

* $Revisión: 1.25.4.1 $

* $Fecha: 2002/07/31 00:37:05 $

* $Revisión: 1.25.4.1 $

*/

#include lt;ipOS.hgt;

#include lt;ipUART.hgt;

/*

*Bloque de configuración IP2022

*/

CONFIG_ BLOCK (

FUSE0(FUSE0_XTAL | FUSE0_PIN_DIV1 | FUSE0_POUT_DIV2 | FUSE0_WUDP_128us | FUSE0_WUDX_1ms),

FUSE1(0),

OSC1_FREQ,

"UBICOM",

"arranque",

CONFIG_VER(0 , 0, 0, 0),

CONFIG_DATE(0, 0, 0),

CONFIG_DATE(0, 0, 0)

p> p>

/* Temporizador para LED parpadeante. */

struct oneshot led_timer;

/*

* uart_recv_intr()

*

* UART Esta función se llama cada vez que se recibe un byte.

*/

void uart_recv_intr(void * protocol_instance)

{

datos u8_t;

estructura uart_instance *uarti = (struct uart_instance*)protocol_instance;

/* Lee los bytes recibidos de UART. */

data = uarti-gt; recv(uarti);

/* Enviar los mismos bytes nuevamente.

uarti-gt; enviar(uarti, datos);

}

/*

* led_callback()

* Devolución de llamada para el temporizador LED.

*/

void led_callback(u8_t *led)

{

debug_set_lights(*led);

(*led) ;

/* Vuelva a conectar el temporizador para poder llamarlo nuevamente.

**Vuelve a conectar el temporizador para que podamos volver a llamarnos.

oneshot_attach(amp; led_timer, TICK_RATE/10, (oneshot_callback)led_callback, led

}

/*

* main()

*/

debug_init();

heap_add((addr_t)(amp;_bss_end), (addr_t)(RAMEND - (DEFAULT_STACK_SIZE - 1)) - (addr_t)(amp;_bss_end));

timer_init();

/* Crea una instancia de UART y comienza a escuchar. */

uarti = echoo_uart_vp_instance_alloc();

uarti-gt; listening(uarti, uarti, NULL, uart_recv_intr, NULL);

/* Configurar ISR y empieza a correr. */

tmr0_init();

set_int_vector( isr);

global_int_enable();

/* Crear tiempo para el parpadeo del LED dispositivo. */

oneshot_init(amp; led_timer);

/*

/*

/* El método adjunto no se llama aquí En cambio, el ISR está configurado para ejecutarse.

*/

led_callback(amp; led);

/* Bucle indefinidamente, haciendo parpadear el LED y sondeando el UART.

*/

except_try {

while (VERDADERO) {

echoo_uart_vp_recv_poll(uarti);

echoo_uart_vp_send_poll(uarti); >

timer_poll();

}

}

except_catch(ex) {

#if definido(DEBUG)

debug_ print_prog_str("\nmain: excepción no controlada\n");

while (TRUE); );

#endif

}

devuelve 0;

}