Bonjour à tous,
J'ai un gros problème...
Cela fait un peu plus d'une semaine que je tente de mettre en oeuvre une communication par bus SPI entre deux PIC (le 24HJ12GP201 : le maître, et le 24HJ12GP202 : l'esclave), mais je n'y arrive toujours pas.
Afin de trouver là où mon erreur se trouvait, j'ai finit par utiliser une mémoire EEPROM de microchip (25AA1024). J'ai réussi à établir la communication. Donc, du côté du maître, il ne semble pas y avoir de problème. En revanche, je n'arrive pas à communiquer avec mon PIC esclave. Pourtant, il semble que je l'ai bien configuré (MSTEN = 0, SMP = 0...). De plus, je n'arrive pas à rentrer dans l'interruption que j'ai créer pour l'esclave...
Quelqu'un serait-il ce qui ne va pas?
Voici le code que j'ai mis en place pour mon EEPROM:
/****************************** ****************************** *****/
/* Nom du fichier : Main.c */
/* Date de création : 16 avril 2008 */
/****************************** ****************************** *****/
#include "Gateway.h"
/****************************** ****************************** **********/
#define CS _LATB9
word i = 0;
int a = 0;
int b = 0;
int Freq = 6;
char MIPS = 24;
byte ReponseSPI = 0;
char Tab[16] = "0123456789ABCDEF";
byte VarTemp = 0;
byte Message = 0;
void InitPort(void)
{
IOpin8 = 8; // Patte 8 du PIC --> SCK1OUT (SPI1 Clock Output)
IOpin10 = 7; // Patte10 du PIC --> SDO1 (SPI1 Data Output)
IOpin11 = 8; // Patte11 du PIC --> SDI1 (SPI1 Data Input)
IOpin12 = 9; // Patte12 du PIC --> SS1OUT (SPI1 Slave Select Output)
_NSTDIS = 0;
PORTB = 0;
TRISB = 0x0100;
AD1PCFGL= 0x003F;
}
void InitSPI(void)
{
SPI1STAT = 0x0000;
_SPIROV = 0;
SPI1CON1bits.DISSCK = 0;
SPI1CON1bits.DISSDO = 0;
SPI1CON1bits.MODE16 = 0;
SPI1CON1bits.SMP = 1;
SPI1CON1bits.CKE = 1;
SPI1CON1bits.SSEN = 0;
SPI1CON1bits.CKP = 0;
SPI1CON1bits.MSTEN = 1;
SPI1CON1bits.SPRE = 5;
SPI1CON1bits.PPRE = 2;
SPI1CON2bits.FRMEN = 0;
SPI1STATbits.SPIEN = 1;
}
int main(void)
{
InitUC();
while(1)
{
_SPIROV = 0;
CS = 0;
SPI1BUF = 0xAB;
while(!_SPIRBF);
VarTemp = SPI1BUF;
while(_SPITBF);
_SPIROV = 0;
SPI1BUF = 0x99;
while(!_SPIRBF);
VarTemp = SPI1BUF;
while(_SPITBF);
_SPIROV = 0;
SPI1BUF = 0x99;
while(!_SPIRBF);
VarTemp = SPI1BUF;
while(_SPITBF);
_SPIROV = 0;
SPI1BUF = 0x99;
while(!_SPIRBF);
VarTemp = SPI1BUF;
while(_SPITBF);
_SPIROV = 0;
SPI1BUF = 0x00;
while(!_SPIRBF);
Message = SPI1BUF;
while(_SPITBF);
CS = 1;
}
return 1;
}
Cordialement
Crepuscule3
-----