Motorola GP32 Problemas con la Recepción del Puerto Serie

Estimados,

es la primera vez que escribo en el foro y cómo le ocurre a una gran parte llegué acá buscando información que pudiera salvarme de un pequeño problema al que no le encuentro solución hasta el momento.

Necesito programar la línea serie del Motorola GP32 tanto Tx cómo Rx para manejar un modem GSM G24 de motorola. Bien he conseguido realizar la configuración de la línea en el modo Tx y los mensajes salen con éxito, pero tengo fallas con la recepción, cada vez que el micro recibe un caracter se cuelga, y hasta ahora no encontré el motivo, las pruebas las estoy haciendo directamente con la interfaz serial de la pc, a través del circuito armado con el max232. Ya verifiqué y re verifiqué todas las conexiones y parecen estar bien, sólo conecté mi línea rx, tx y tierra. Y el programita que estoy utilizando en C es mas o menos el siguiente:

VECTOR:
extern void _Startup(void);
extern interrupt void Timer2ms (void);
extern interrupt void KBD (void);
extern interrupt void BateryPW (void);
extern interrupt void SerialRx (void);

//-- Interrupt Vector Table --

void (*const _vectab[])(void) @0xFFDC = {
_Startup, // FFDC Time Base Vector
BateryPW, // FFDE ADC (not valid for QT1,QY1)
KBD, // FFE0 Keyboard Vector
_Startup, // FFE2 SCI Transmit Vector
_Startup, // FFE4 SCI Recive Vector
_Startup, // FFE6 SCI Error Vector
_Startup, // FFE8 SPI Transmit Vector
SerialRx, // FFEA SPI Recive Vector
_Startup, // FFEC TIM2 Overflow Vector
_Startup, // FFEE TIM2 Channel 1 Vector
_Startup, // FFF0 TIM2 Channel 0 Vector
_Startup, // FFF2 TIM1 Overflow Vector
_Startup, // FFF4 TIM1 Channel 1 Vector
Timer2ms, // FFF6 TIM1 Channel 0 Vector
_Startup, // FFF8 PLL Vector
_Startup, // FFFA IRQ1 Vector
_Startup, // FFFC SWI Vector
_Startup // FFFE Reset Vector
};

INICIALIZACION LINEA SERIE:
SCC1 = 0x40; // ENSCI tiene un 1. Enable SCI
SCC2 = 0x2c; // 0x08: Enable Tx; 0x2c: Enable Tx y Rx. Mas Interrupción de recepción
SCBR = 0x03; // condiguro velocidad en 9600 BAUDIOS 03=9600 02=19200

RUTINA DE INTERRUPCION:
interrupt void SerialRx (void){

(void) SCS1; //BAJO LA BANDERA
datosci=SCDR; //GUARDO LO QUE ME LLEGO POR LINEA SERIE EN UNA VARIABLE

//TIRA EN EL DISPLAY QUE RECIBIO UNA INTERRUPCION POR LINEA SERIE

LCD4Ctrl(0x01); // Clear Display
(void) sprintf(bufferLCD," *ENTRO UNA");
LCD4Ctrl(LINE1); Write(bufferLCD);
(void) sprintf(bufferLCD," INTERRUPCION");
LCD4Ctrl(LINE2); Write(bufferLCD);

}

Basicamente es esto lo que armé con el objetivo de sólo probar que al menos no se cuelgue el micro cada vez que recibe una interrupción por línea serie. En verdad agradecería mucho si alguien pudiera darme una mano con esto ya que no se me ocurre mucho mas a dónde recurrir.

Muchas gracias y saludos a todos.
Atte.
Cristian
 
Es posible que la programacion del UART del micro (bits/data, paridad, Stop/start bit, bauds) no es la misma del GSM. Chequea por favor. Salu2.
 
Gracias por la respuesta, pero hoy encontré la falla con la ayuda de Jorge Dhios. Resultó ser que estaba inicializando la interrupción incorrecta en el vector. Debía colocar la SCI y estaba inicializando la de SPI.

Muchas gracias a todos y saludos,
Cristian.
 
crostian
Me puse a observar su codigo y creo que ud me puede ayudar, estoy tratando de manejar una LCD de 2*16 o de 4*20 con un HC908GP32 y veo que en su codigo ud maneja una LCD, si me pudiera ayudar con esto

Gracias
 
javker29: Para trabajar con modulos LCD primero es ubicar la información del hardware del modulo. Tambien busca la lista de comandos de programacion. Con eso el resto es "coser y cantar". Salu2.
 
La ventaja de la programacion en C es que no cambia la estructura general cuando necesitas cambiar de micros por lo que te recomiendo que leas cualquier tutorial de C en el foro o en la red y despues solo necesitas adecuar ciertas partes del programa para que funcionen con un GP32, ARM, AVR o lo que necesites...
 
Atrás
Arriba