Autor Tema: SPI simple... pero no funciona  (Leído 2199 veces)

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

Desconectado virolay

  • PIC12
  • **
  • Mensajes: 50
SPI simple... pero no funciona
« en: 17 de Abril de 2007, 16:39:54 »
Hola a todos

Tengo dos simples rutinillas de SPI. El master envía una M, el Esclavo la recibe y le envía una "S" Y EL MASTER RECIBE BASURA. Os pongo lo básico para no cansaros. Por faver, echarle un vistazo, llevo tres días y cada vez me lío más (creo que ya estoy viejo para esto).

Gracias y saludos.

Master:
Código: [Seleccionar]
DEVICE 16F877
DECLARE XTAL 4

all_digital on
portb_pullups on

SYMBOL SSPIF = PIR1.3 ' interrupt flag - last bit set
SYMBOL BF = SSPSTAT.0       ' Buffer Full Status flag

DIM MasterOUT AS byte ' Byte a enviar al ESCLAVO
DIM SlaveIN AS byte ' Byte recibida desde el ESCLAVO
dim dummy as byte
' DEFINIR el /SS (Slave Select)
symbol SS0 = portC.0
' Configuración Puertos SPI
trisc = %10010000     
portc.0=1
' Configuración módulo SPI
sspstat = $40
sspcon = $31

'=== PRINCIPAL =================================================================
WHILE 1

MasterOUT = "M"
GOSUB SPI_TRANS
DELAYuS 10
WEND

'--- SUBRUTINA DE TRANSACCION --------------------------------------------------
' Envía una "M" y debería recibir una "S" PERO RECIBE CUALQUIER COSA
SPI_TRANS:
low SS0                     ' Activa el Selector de Esclavo

SSPIF = 0     ' Borra la interrupción SSPIF

' Envía el Byte AL esclavo
SSPBUF = MasterOUT         ' => ENVIA BYTE
While SSPIF=0:Wend ' Espera a que la trnasmisión termine
DELAYUS 10     ' Retardo mínimo de 10uS

' Recibe el Byte DESDE el esclavo
while bf=0: wend            ' BF: (Buffer de recepción lleno) Sólo lectura
SlaveIN = SSPBUF         ' <= RECIBE BYTE

high SS0
RETURN
'-------------------------------------------------------------------------------
END

Esclavo:
Código: [Seleccionar]
device 16f873
xtal 4

all_digital = true
portb_pullups = true

' CONFIGURAR VARIABLES
DIM MasterIN AS byte ' Byte recibido desde el MASTER
DIM SlaveOUT AS byte ' Byte a enviar al MASTER
DIM dummy as byte

SYMBOL BF = SSPSTAT.0   ' Buffer Full Status flag
'SYMBOL RBIF = INTCON.0 ' RB Port Interrupt Flag (Ojo, será necesaria)
SYMBOL SSPIF = PIR1.3   ' Synchronous Serial Port (SSP) Interrupt Flag
SYMBOL SSPIE = PIE1.3   ' Synchronous Serial Port Interrupt Enable
SYMBOL PEIE = INTCON.6  ' Peripheral Interrupt Enable
SYMBOL GIE = INTCON.7   ' Global Interrupt Enable

' CONFIGURACION SPI ESCLAVO
trisa = %00100000  ' Bit 5 es el /SS, deberá configurarse como entrada
trisc = %11011111  'Bit 3:SCK, Bit 4:SDI, Bit 5:SDO
sspcon = $34
sspstat = $40

on_interrupt goto SPI_ISR

goto SPI_INIT
'--- RUTINA SPI_ISR ------------------------------------------------------------
SPI_ISR:

sspie = 0          ' Se deshabilita la interrupción del módulo SSP
' Recibe el Byte DESDE el Master
while bf=0: wend   ' BF: (Buffer de recepción lleno) Sólo lectura
MasterIN = SSPBUF  ' <= RECIBE BYTE
'
delayus 10
' Envía el Byte AL Master
SSPIF = 0     ' Borra la interrupción SSPIF
SSPBUF = SlaveOUT ' => ENVIA BYTE
While SSPIF=0:Wend ' Espera a que la trnasmisión termine
DELAYUS 10     ' Retardo mínimo de 10uS

sspie = 1                   ' Se habilita la interrupción del módulo SSP   
context restore             

'--- RUTINA DE INICIALIZACION DEL ESCLAVO --------------------------------------
SPI_INIT:
SSPIF = 0     ' Flag de interrupción del módulo SSP
SSPIE = 1     ' Habilitación a la interrupción del SSP
PEIE = 1      ' Habilitación de interrupciones periféricas
GIE = 1       ' Habilitación global de interrupciones


'=== PRINCIPAL =================================================================
MAIN:
SlaveOUT = "S"

delayus 500

goto main

End
Quod natura non dat Salmantica non praestat

Desconectado virolay

  • PIC12
  • **
  • Mensajes: 50
Re: SPI simple... pero no funciona
« Respuesta #1 en: 24 de Abril de 2007, 23:52:26 »
:shock: Hummm, pues vaya éxito que he tenido.

Bueno, pues lo he resuelto yo solito, con "truco", pero funciona. En cuanto lo tenga más presentable lo pondré por si acaso le interesa a alguien.

Saludos,


Quod natura non dat Salmantica non praestat

Desconectado dogflu66

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 3549
Re: SPI simple... pero no funciona
« Respuesta #2 en: 29 de Abril de 2007, 07:24:04 »
jeje, no es que no interese, es que puede que no se haya utilizado el modulo como me pasa a mi, o simplemente que en este sub-foro hay varias versiones de basic
y cuesta trabajo leer el codigo de otra version. Pero tu ejemplo es muy interesante, es un buen inicio para no empezar desde cero... :mrgreen:
Saludos desde Granada, España.