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;
}