Autor Tema: Consulta sobre funcion SPI_READ() y SPI_READ(xxx)  (Leído 3222 veces)

0 Usuarios y 2 Visitantes están viendo este tema.

Desconectado Chenao

  • PIC18
  • ****
  • Mensajes: 414
Consulta sobre funcion SPI_READ() y SPI_READ(xxx)
« en: 15 de Enero de 2010, 13:03:14 »
Saludos

Me he topado con una funciones de la comunicación spi que no entiendo muy bien, hasta ahora por el manual de usuario del CCS conozco que la función SPI_READ() leé un valor que se carga en SI del micro pero la función SPI_READ(xxx) no sólo leé el valor que esta en SI si no que también carga al buffer SO con el valor que estan en parentisis, es decir, (xxxx). Acá va mi consulta

La función SPI_READ(xxx) es equivalente a los siguiente?

VAR = SPI_READ()
SPI_WRITE(xxx)             

además otra consulta, afecta el orden del código es decir,

SPI_READ(xxx) es distinto de?

SPI_WRITE(xxx)
VAR = SPI_READ()

Y para terminar la función SPI_READ(xxxx) para que versión del CCS en adelante es compatible, la pregunta es porque tengo un compilador muy viejito es la versión 3.094 "creo" y al parecer no la tiene incorporada.

Bueno esa es la consultica que queria hacer, y espero no haberlos corchado :D :D :D


Un saludo desde Pereira - Colombia

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Consulta sobre funcion SPI_READ() y SPI_READ(xxx)
« Respuesta #1 en: 15 de Enero de 2010, 13:13:18 »
No es lo mismo hacer lo que comentas, fíjate que seguramente las 2 funciones son idénticas y hacen algo así:

Código: ASM
  1. movfw SSPBUF; para borrar bit BF.-
  2.      movfw a ; donde a seria el valor XXX..
  3.      movwf SSPBUF;
  4.      btfss ...,BF ; se testea bit BF.-
  5.      goto $-1
  6.      return SSPBUF; se retorna el valor cargado externamente en el registro.



Lo hago de memoria y puedo estar errando al nombre del registro buffer del modulo SPI y ademas no me acuerdo en que registro esta el bit BF  :mrgreen: Pero es la traducción a ASM de las funciones Read y Write.


Saludos!
No contesto mensajes privados, las consultas en el foro

Desconectado Chenao

  • PIC18
  • ****
  • Mensajes: 414
Re: Consulta sobre funcion SPI_READ() y SPI_READ(xxx)
« Respuesta #2 en: 16 de Enero de 2010, 18:49:08 »

Hola. Suky la verdad no te entendí :mrgreen:. He seguido buscando pero todavia tengo la duda.

Saludos.
Un saludo desde Pereira - Colombia

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Consulta sobre funcion SPI_READ() y SPI_READ(xxx)
« Respuesta #3 en: 16 de Enero de 2010, 19:02:52 »
 :D :D Es normal que no me entiendan  :undecided: Intento explicarme mejor:

Al hacer Var=spi_read(0xXX); hacemos algo parecido a las lineas de assembler del mensaje anterior, donde a es el valor de 0xXX. Ahora al hacer spi_write se siguen los mismos pasos, solamente que puede no devolver el valor recibido en SSPBUF (return SSPBUF; ).

Entoces no es lo mismo realizar:

Código: C
  1. VAR = SPI_READ(0xFF);

Código: ASM
  1. movfw SSPBUF; para borrar bit BF.-
  2.           movfw a ; En este caso el parametro es 0xFF.
  3.           movwf SSPBUF;
  4.           btfss ...,BF ; se testea bit BF.-
  5.           goto $-1
  6.           return SSPBUF; se retorna el valor cargado externamente en el registro.



que ninguna de las 2 secuencias siguientes:

Código: C
  1. VAR = SPI_READ()
  2. SPI_WRITE(0xFF)


Código: ASM
  1. ;spi_read:
  2.           movfw SSPBUF; para borrar bit BF.-
  3.           movfw a ; En este caso el parametro es nulo (spi_read...)
  4.           movwf SSPBUF;
  5.           btfss ...,BF ; se testea bit BF.-
  6.           goto $-1
  7.           return SSPBUF; se retorna el valor cargado externamente en el registro.
  8.  
  9. ; spi_write:
  10.           movfw SSPBUF; para borrar bit BF.-
  11.           movfw a ; A vale 0xFF
  12.           movwf SSPBUF;
  13.           btfss ...,BF ; se testea bit BF.-
  14.           goto $-1
  15.           //return SSPBUF; Puede no retornar ningun valor.

Código: C
  1. SPI_WRITE(xxx)
  2. VAR = SPI_READ()


Saludos!

No contesto mensajes privados, las consultas en el foro

Desconectado Chenao

  • PIC18
  • ****
  • Mensajes: 414
Re: Consulta sobre funcion SPI_READ() y SPI_READ(xxx)
« Respuesta #4 en: 16 de Enero de 2010, 19:08:21 »
Hola.

Listo más claro no puede quedar. Gracias por la explicación Suky. Un comentario la función SPI_READ(xx) es una instrucción muy interesante que si uno no la sabe manejar bien se gana más de un dolor de cabeza yo me ganado ya varios :mrgreen: .

Saludos.
Un saludo desde Pereira - Colombia