Autor Tema: problemas con el SPI  (Leído 2826 veces)

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

Desconectado Renatox_

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 541
    • máquinas cnc
problemas con el SPI
« en: 06 de Enero de 2012, 12:07:53 »
Hola amigos estoy teniendo problemas para configurar el SPI en modo master del dspic30f4011, no puedo ver que se ponga a 1 el bit SPITBF cuando escribo en el SPI1BUF, tampoco veo que el flag de interrupcion SPI1IF se ponga a 1; este es mi simple codigo parece que lo he hecho bien no se en que pueda estar fallando.

Código: [Seleccionar]
void configSPI();
void __attribute__((interrupt, no_auto_psv))  _SPI1Interrupt(void);
/**************************************************************/
 
void __attribute__((interrupt, no_auto_psv))  _SPI1Interrupt(void)

   IFS0bits.SPI1IF = 0;
}
 
void configSPI()
{
   IEC0bits.SPI1IE=1;
   IFS0bits.SPI1IF=0;
   IPC2bits.SPI1IP=1;
   // config SPI1STAT
   SPI1STATbits.SPIEN=0;     // configura serial port pins SDI, SDO, SCK, SS
   SPI1STATbits.SPISIDL=0;   // continua operacion en IDLE module
   SPI1STATbits.SPIROV=0;    // flag bit de sobreflujo (1=no se leyo el dato previo)
   //SPI1STATbits.SPITBF=0;    // read, 0= SPI1TXB vacio
   //SPI1STATbits.SPIRBF=0;    // read, 0= SP1RXB leido y vacio
   // config SPI1CON
   SPI1CONbits.FRMEN=0;
   SPI1CONbits.SPIFSD=0;
   SPI1CONbits.DISSDO=0;     // SDO controlado por el modulo
   SPI1CONbits.MODE16=1;     // comunicacion es word/byte (16 bits)
   SPI1CONbits.SMP=0;
   SPI1CONbits.CKE=0;
   SPI1CONbits.SSEN=0;       // SS controlado por el puerto
   SPI1CONbits.CKP=0;        // estado activo en high level
   SPI1CONbits.MSTEN=1;      // modo MASTER
   SPI1CONbits.SPRE=7;       // Prescaler secundario = 1
   SPI1CONbits.PPRE=2;       // Prescaler primario = 4
   SPI1STATbits.SPIEN=1;     // configura serial port pins SDI, SDO, SCK, SS
}
int main (void)
{
     configSPI();
     while (1)
      {
         SPI1BUF=10;
      }
}


ayuda porfavor
gracias
control de movimiento

Desconectado MerLiNz

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2463
Re: problemas con el SPI
« Respuesta #1 en: 06 de Enero de 2012, 15:39:50 »
el SPIBF unicamente esta 1Tcy a 1, es decir, tu escribes en spibuf, entonces el modulo escribe spibuf=1, carga el spibuf en el spisr y en el siguiente ciclo spibuf=0.
El que si se pone a 1 es SPIRBF al hacer una recepcion.

Prueba a poner la prioridad a mas de 1, no recuerdo si 1 era la prioridad de codigo normal.
« Última modificación: 06 de Enero de 2012, 15:44:32 por MerLiNz »

Desconectado Renatox_

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 541
    • máquinas cnc
Re: problemas con el SPI
« Respuesta #2 en: 07 de Enero de 2012, 02:04:12 »
Gracias por la ayuda, ya subi la prioridad y nada tambien he puesto el SPIBUF=10 arriba del while(1):

     SPI1BUF=10;

     while (1);

pero tampoco consigo que salte a la interrupcion siempre se queda en while (1), tambien no puedo ver que el bit SPITBF se ponga a 1 estoy simulando con el MPLAB SIM.

control de movimiento

Desconectado MerLiNz

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2463
Re: problemas con el SPI
« Respuesta #3 en: 07 de Enero de 2012, 17:03:33 »
creo que el mplab sim y digo creo porque lo he usado un par de veces solo que no emula ningun modulo excepto el timer que creo que si, yo probando mi codigo que lleva CAN SPI y demas lo tuve que desactivar porque no hacia nada.
Para lo unico que he usado el mplab sim es para ver si los calculos los hace bien.

Desconectado Renatox_

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 541
    • máquinas cnc
Re: problemas con el SPI
« Respuesta #4 en: 08 de Enero de 2012, 03:33:58 »
Pues si tienes razon hoy implemente mi codigo y si entra en la interrupcion y observo transmision por los pines SDO y SCK, tendre mas cuidado
con el MPLAB SIM. Ahora estoy tratando de comunicar el dspic con un DAC de 12 bits el MAX5312.

saludos
gracias
control de movimiento


 

anything