TODOPIC
Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: medidort en 06 de Febrero de 2012, 22:25:56
-
Hola todos.
Tengo un PIC 16F690 conectado a un cirrus CS5463. El pic es el SPI master y el cirrus el slave.
El pic envia un dato de 8bits y luego 3 veces FF. El cirrus al mismo momento que mando FF me manda 1 byte de informacion.
Estoy teniendo problemas para leer ese byte que me manda el esclavo.
Visto en el osciloscopio los datos vienen bien pero en el pic yo solo agarro ceros.
mi rutina de es la escrita en hitech
char SPI_writeRead(char data){
//char TempVar = SSPBUF;
SSPBUF = 0xFF; // Se carga dato a enviar
while (!BF); // Se espera que envie y a la vez se recibe
return ( SSPBUF ); // se retorna lectura
}
CONFIGURACION DEL PUERTO SPI
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//Retorno: int ; Devuelve 1 si pudo configurar
//Parametro: void
//Descripcion: Configura el puerto SPI como maestro para trabajar con CKE = 1 y el CKP = 0
//
// SSPCON b7 b6 b5 b4 b3 b2 b1 b0
// |WCOL | SSPOV | SSPEN | CKP | SSPM3 | SSPM2 | SSPM1 | SSPM0 |
// | 0 | X | 1 | 0 | 0 | 0 | 0 | 0 |
// SSPSTAT b7 b6 b5 b4 b3 b2 b1 b0
// | SMP | CKE | D/A | P | S | R/W | UA | BF |
// | 1 | 1 | 0 | 0 | 0 | 0 | 0 | 0 |
//
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void configuracionSPI(void){
//---------SSPCON: SYNC SERIAL PORT CONTROL REGISTER--------------
SSPCON = 0b00100010;
//---------SSPSTAT: SYNC SERIAL PORT STATUS REGISTER--------
SSPSTAT = 0b11000000;
SSPEN = 1;
}
Desde ya muchas gracias
-
No sé si lo habrás tenido en cuenta pero tanto el pin SDO como SCK tienen que estar explícitamente configurados como salida.
También habría que ver sin al pin que se utiliza para SDI no hay que configurarlo como entrada digital, ya que también puede ser configurado como entrada analógica.
Para asegurarte que el puerto funciona como entrada digital tienes que hacer 0 el bit 2 del registro ANSELH. Se puede hacer con lo siguiente