comunicación en serie usando LPC2214

A

Aashu

Guest
Amigos DHello,

Estoy usando LPC2214.Soy novato en este controlador.He escrito un código de comunicación en serie que transmite con éxito (como he comprobado en el terminal hyper), pero no puede recibir.El código se pega a continuación.Estoy usando CrossWorks Rowley de la versión de prueba ARM descargado desde la red como un IDE.Por favor, señalar el error en el código.También estoy buscando algunos códigos de ejemplo de trabajo desarrollado con este IDE, por lo que si alguno tienen, por favor, envíe los códigos de trabajo de la muestra sobre la comunicación de serie, las interrupciones del temporizador, etc
También tengo algunas preguntas mentiioned como bajo, favor de responder:

1) ¿Cuál es el flujo correcto de escribir la rutina de comunicación de serie. (Transmisión y recepción)?

2) ¿Cuáles son los registros iniciales a las y con qué valor si estoy usando UART0

3) ¿Cómo puedo hacer una serie de interrumpir la función ejecutar cuando recibo algo en UART0 serie.

4) En CrossWorks ¿cuál es la manera de definir una función de interrupción.¿Y cómo se
compilador de llegar a saber que es una función de ISR de serie.Thanks & regards,
Aashuel código es el siguiente:
/*_________________________________________________________________*/# include <targets/LPC22xx.h>
# include <stdio.h>

# define UART0_INT 6
# define TEMT (1 <<6)
# define READ_P3_0_7 (IO3PIN & 0xff) / / lee el byte inferior de P3
# define WRITE_P3_0_7 (b) ((= IO3PIN | 0xFF) & = b) / / Escribir el byte inferior de P3retraso (int);
ser_initialise void ();
serial_tx_byte void (l_uch_data_port unsigned char);
unsigned char UARTReadChar ();rxchar unsigned char;
static void uartISR (void) __attribute__ ((interrupción (IRQ ")));

static void uartISR (void)
(
/ * Leer IIR para borrar interrumpir y averiguar la causa * /
IIR signo = U0IIR;
serial_tx_byte ( 'A');

/ * Maneje UART interrupción * /
switch ((IIR>> 1) y 0x7)
(
case 1:
/ * THRE interrupción * /
break;
case 2:
/ * RDA interrupción * /
rxchar = UARTReadChar ();

serial_tx_byte (rxchar); / / no trabajo

break;
Caso 3:
/ * SPI interrupción * /
break;
Caso 6:
/ * CTI de interrupción * /
break;
)
/ * Actualización de las prioridades de Vic * /
VICVectAddr = 0;
)unsigned char UARTReadChar ()
(
while ((U0LSR & 0x01) == 0);
U0RBR retorno;
)serial_tx_byte void (l_uch_data_port unsigned char)
(
U0THR = l_uch_data_port;
while (! (U0LSR & TEMT));
)

ser_initialise void ()
(
PINSEL0 = 0x5; / / Inicializar Pin Block seleccionar para Tx y Rx
U0FCR = 0x7; / / Habilitar FIFO y reponerlos
U0LCR = 0x83; / / Set dLab y la longitud de la palabra establece en 8 bits
U0DLL = 0x28, / / Velocidad de transmisión establecido en 9600
U0DLM = 0x0;
U0LCR = 0x3; dLab / / Borrar
U0FCR = 1;

/ * Configuración UART RX interrupción * /
VICIntSelect & = ~ (1 <<UART0_INT); / * IRQ de interrupción * /
VICVectCntl0 = (1 <<5) | UART0_INT; / * ranura Utilice 0 para el botón de interrupción * /
VICVectAddr0 = (unsigned int) uartISR / * ISR botón Configuración * /
VICIntEnable | = 1 <<UART0_INT;
U0IER = 1;
__ARMLIB_enableIRQ (); / * Activar las interrupciones global * /
)/ / Delay
retraso (int d)
(
for (; d; - d)
;
)

/ / Start de los principales
int main (void)
(
int i;

__ARMLIB_enableIRQ (); / * Activar las interrupciones global * /

PINSEL0 = 0x00000005;
IO0DIR = 0x000000F0;
/ / PINSEL2 = 0x00000000;
ser_initialise ();

IO0SET = 0x00000020 / / conmutar un LED
retraso (200000);
IO0CLR = 0x00000020;
retraso (200000);while (1)
(
IO0SET = 0x00000020;
serial_tx_byte ( 'M');
retraso (100000);

if (rxchar! = NULL)
(
IO0CLR = 0x00000020 / / si cualquier carácter recibido
/ / Ponga fuera de la LED
break;
)

)) / / Fin de "main ()"
/*_________________________________________________________________*/[/ b]

 

Welcome to EDABoard.com

Sponsor

Back
Top