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