Autor Tema: Mis experiencias con el BUS CAN  (Leído 606765 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado afelio

  • PIC16
  • ***
  • Mensajes: 130
Re: Mis experiencias con el BUS CAN
« Respuesta #1260 en: 02 de Noviembre de 2012, 17:11:00 »
En C32. Una lástima.
He de suponer que habrá una interrupción para la recepción y otra para la transmisión al Bus, ¿Verdad?. Estoy buscando los registros de interrupciones para los módulos.

Un saludo.

Desconectado MGLSOFT

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 7841
Re: Mis experiencias con el BUS CAN
« Respuesta #1261 en: 02 de Noviembre de 2012, 17:15:08 »
Como dicen los americanos en los foros, aplique RTFM.!!


Read The Fucking Manual !!!! :D :D :D :D
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado MerLiNz

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2463
Re: Mis experiencias con el BUS CAN
« Respuesta #1262 en: 02 de Noviembre de 2012, 17:26:31 »
Y como se accede sin uso del cpu??

Leete esto:
http://www.todopic.com.ar/foros/index.php?topic=38271.0

aunque no este 100% terminado, pero mas o menos lo comprenderas.

Desconectado afelio

  • PIC16
  • ***
  • Mensajes: 130
Re: Mis experiencias con el BUS CAN
« Respuesta #1263 en: 02 de Noviembre de 2012, 17:38:19 »
Pero que no tiene éste foro??Lo miraré

Gracias.

Desconectado MerLiNz

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2463
Re: Mis experiencias con el BUS CAN
« Respuesta #1264 en: 02 de Noviembre de 2012, 17:42:11 »
Pero que no tiene éste foro??Lo miraré

Gracias.

Te contesto: CHICAS  :(

Desconectado MGLSOFT

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 7841
Re: Mis experiencias con el BUS CAN
« Respuesta #1265 en: 02 de Noviembre de 2012, 18:04:19 »
Si que hay, pero deben ser feas, porque son muy inteligentes !!   :D :D
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado afelio

  • PIC16
  • ***
  • Mensajes: 130
Re: Mis experiencias con el BUS CAN
« Respuesta #1266 en: 02 de Noviembre de 2012, 18:07:06 »
 :D :D :D :D :D :D :D :D

Desconectado afelio

  • PIC16
  • ***
  • Mensajes: 130
Re: Mis experiencias con el BUS CAN
« Respuesta #1267 en: 02 de Noviembre de 2012, 18:39:28 »
Buenas chicos,

Cómo ya sabeis estoy un poco pillado al querer desarrollar el CAN con interrupciones. Quiero que cuando mi placa reciba un mensaje de otro SID, salte a una interrupción y procesar la trama dentro de la interrupción.

Estoy usando un PIC32 en C.

Viendo los registros, ando un poco liado, ya se cual es el registro para la prioridad, subprioridad, bandera de interrupción, y para activar el bit de interrupción del CAN1.
Pero no se muy bien que bit del registro de interrupciones del CAN1 tengo que activar para lo descrito anteriormente.

Todo me lleva a pensar en el bit RBIE del registro de nterrupciones del CAN1. Pero no estoy seguro si sólo tengo que activar éste o alguno más.

En la página 18 se puede ver el registro de interrupciones: http://ww1.microchip.com/downloads/en/DeviceDoc/61154C.pdf

Les pongo aquí parte del código (del tema de la interrupción por si así lo veis más claro):

Citar
C1CONbits.ON = 1;       /*Activo el módulo CAN1*/

    C1INTbits.RBIE = 1;     /*Activo Interrupción de Recepción en el Buffer*/

    IPC11bits.CAN1IP = 1;   /*Prioridad 1*/
    IPC11bits.CAN1IS = 0;   /*Subprioridad 0*/

    IFS1bits.CAN1IF = 0;    /*Limpio la bandera de interrupción*/
    /*Tengo que borrar tambien RBIF??????????????????*/

    INTEnableSystemSingleVectoredInt(); /*Activa el modo Single Vector*/

    IEC1bits.CAN1IE = 1;    /*Activa la interrupción de CAN1*/
   
    while(1);

    return 0;
}

//Rutina de Interrupción
void __ISR(0, ipl1) InterruptHandler(void){
    /*Código*/
    /*Tengo que borrar tambien RBIF??????????????????*/
    /******************/

    CANRxMessageBuffer *buffer;
    buffer  = (CANRxMessageBuffer*)(PA_TO_KVA1(C1FIFOUA1));

    /*Comprobar si hay algún mensaje para leer*/
    if (buffer->CMSGEID.DLC == 4)
    {
        /*if(message->data[0] == FALSE)
   {
      
   }
   else
   {
      
   }*/
    }

    /******************/
    IFS1bits.CAN1IF = 0; /*Limpio la bandera de interrupción*/
}

Espero que me podais ayudar.

Muchas gracias.
Un saludo.
« Última modificación: 02 de Noviembre de 2012, 19:22:41 por afelio »

Desconectado MerLiNz

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2463
Re: Mis experiencias con el BUS CAN
« Respuesta #1268 en: 02 de Noviembre de 2012, 21:17:55 »
RBIF no lo podras borrar, se borra solo cuando vacias el FIFO.

Para ver por que te ha saltado la interrupcion (ya que CAN1IF salta tanto en recepcion, envio, error...) debes comprobar el flag seria:

if(C1INTbits.RBIF) {
//flag de recepcion
//procesas lectura del FIFO

}

ahora bien, para saber que fifo es el que llama a la interrupcion (imagina que recibes 2 msjs seguidos y no te da tiempo a atenderlos pq estas en otra interrupcion) utilizas el registo C1VECbits.ICODE. Este te indica a que buffer/fifo pertenece la llamada de la interrupcion, por logica deberia ser siempre el 0. Tambien tal y como lo tienes con el C1FIFOUA1 te puede servir. Luego despues de esto debes poner el flag de que ya has leido ese fifo (para que no vuelva a saltar la interrupcion, seria: C1FIFOCONxSET = 0x2000

Desconectado afelio

  • PIC16
  • ***
  • Mensajes: 130
Re: Mis experiencias con el BUS CAN
« Respuesta #1269 en: 03 de Noviembre de 2012, 05:53:01 »
Creo que te entiendo MerLiNz.

De lo último que me has contado de las FIFOS no me he enterado, voy a seguir releyendolo y con los registros al lado a ver si pudiese verlo.


Muchas gracias.
Un saludo.
« Última modificación: 03 de Noviembre de 2012, 06:14:29 por afelio »

Desconectado afelio

  • PIC16
  • ***
  • Mensajes: 130
Re: Mis experiencias con el BUS CAN
« Respuesta #1270 en: 03 de Noviembre de 2012, 07:49:12 »
Más o menos lo voy entendiendo.

Os pongo el núevo código en la rutina de interrupción para ver si realmente lo he entendido o soy un negado.

Citar
void __ISR(0, ipl1) InterruptHandler(void){
    /*Código*/
    /******************/
    if (C1INTbits.RBIF){        /*Si ha sido interrupción de lectura*/

        CANRxMessageBuffer *buffer;
        if (C1VECbits.ICODE && '0000001'){ /*Verifico que la INT es en la FIFO1*/
           
            C1FIFOCON1SET = 0x2000;     /*Ya se ha leido la FIFO1*/
            buffer = (CANRxMessageBuffer*)(PA_TO_KVA1(C1FIFOUA1));

            /*Comprobar si hay algún mensaje para leer*/
            if(buffer -> CMSGEID.DLC == 4){
              /*if(message->data[0] == FALSE)
                    {

                    }
              else
                  {

                  }*/
            }
        }
    }
   

 
    /******************/
    IFS1bits.CAN1IF = 0; /*Limpio la bandera de interrupción*/
}

Cuando ha saltado la interrupción del CAN1 verifico que ha sido la de lectura.
Después compruebo que ha sido en FIFO1 (Aunque creo que sería mejor cambiarla a la 0).
Indico que si es en la FIFO1 ya lo estoy leyendo.
Y la tarea a realizar......

Un saludo.

Desconectado MerLiNz

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2463
Re: Mis experiencias con el BUS CAN
« Respuesta #1271 en: 03 de Noviembre de 2012, 11:43:37 »
Utiliza FIFO0. Como es First In First Out creo que al ponerlo el FIFO0SET se borra y el mensaje del FIFO1 se pasa al FIFO0, pero esto lo ideal es que lo vayas probando segun programas.

Desconectado afelio

  • PIC16
  • ***
  • Mensajes: 130
Re: Mis experiencias con el BUS CAN
« Respuesta #1272 en: 03 de Noviembre de 2012, 12:32:25 »
Si, la verdad que empecé a picar código con FIFO1 sin pensarlo pero llevas toda la razón, tendré que hacerlo con la FIFO0.

Por lo menos me consuela que he entendido lo que me habías puesto y lo que había programado está bien puesto, no??

A seguir mirando el manual.

Un saludo.

Desconectado MerLiNz

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2463
Re: Mis experiencias con el BUS CAN
« Respuesta #1273 en: 03 de Noviembre de 2012, 12:53:07 »
Lo que has programado ya te digo, vas probando a ver si te va funcionando bien, esto es así, en la teoria puede que funcione pero en la practica puede que algo no concuerde.

Desconectado afelio

  • PIC16
  • ***
  • Mensajes: 130
Re: Mis experiencias con el BUS CAN
« Respuesta #1274 en: 03 de Noviembre de 2012, 12:55:46 »
Si. Lo mejor será la táctica Prueba y error.

Un saludo.


 

anything