Forum: Mikrocontroller und Digitale Elektronik PIC18F2420 hört auf SPI, obwohl SS high


von Michael M. (Gast)


Lesenswert?

Hallo Forum!

Ich habe hier einen PIC18F2440, dessen SPI ich als Slave MIT "SS Control 
enable" konfiguriert habe. Aber er setzt sein SSPIF (Synchronous Serial 
Port Interrupt Flag), wenn ein Byte über die SPI übertragen wurde, 
OBWOHL sein SS-Pin andauernd high ist.
Weder die Initialisierung durch manuelles Setzen der Register, noch die 
Funktion OpenSPI() liefern ein gewünschtes Ergebnis.

Hat jemand einen Tipp für mich? Bin langsam am verzweifeln...

Danke schon mal,
Grüße,
Michael
1
#include <stdio.h>
2
#include <stdlib.h>
3
#include <p18cxxx.h>
4
#include <spi.h>
5
#include "defs.h"
6
7
#pragma config OSC = HS   //high speed osc
8
#pragma config PWRT = ON  //powerup timer
9
#pragma config WDT = OFF  //Watchdog aus
10
#pragma config LVP = OFF  //LV-ICSP
11
12
#define TAKT 14745600UL
13
14
15
void init_mcu(void)
16
{
17
  LATA |= (1<<5);
18
  TRISA = ~(1<<4);
19
  LATB=0;
20
  TRISB = ~((1<<3)|(1<<4)|(1<<5));
21
22
  /* SPI enable, slave , rising clk */  
23
//  SSPSTAT |= (1<<CKE);
24
//  SSPCON1 = (1<<SSPEN)|(1<<SSPM2);
25
  OpenSPI(SLV_SSON, MODE_00, SMPEND);
26
27
  /* interrupt */
28
  /* glob en - SPI en */
29
  PIE1 = (1<<SSPIE);
30
  INTCON = (1<<GIE)|(1<<PEIE);
31
}
32
33
34
#pragma code
35
void main()
36
{
37
  unsigned char i=0;
38
  init_mcu();
39
40
  while(1)
41
  {
42
    LATB = (1<<i);
43
    i++;
44
    if(i>2)    i=0;
45
    Delay10KTCYx(1000);
46
  }
47
}
48
49
void high_isr(void);
50
#pragma code high_vector=0x08
51
void interrupt_at_high_vector(void) { _asm goto high_isr _endasm }
52
#pragma code
53
#pragma interrupt high_isr
54
void high_isr (void)
55
{
56
  if(PIR1 & (1<<SSPIF))
57
  {  /* SPI transaction done */
58
    LATB ^= (1<<4);
59
    PIR1 &= ~(1<<SSPIF);
60
  }
61
}

von holger (Gast)


Lesenswert?

Schalte mal ADC- und Komparatormodul ab.

von Michael M. (Gast)


Lesenswert?

Hallo holger,

ich hab das ADON bit in ADCON0 auf 0 gesetzt und die ComparatorMode-Bits 
in CMCON alle auf 1.
Damit sollte beides aus sein. Meine SPI funktioniert leider trotzdem 
noch nicht wie gewünscht.

Grüße,
Michael

von holger (Gast)


Lesenswert?

>ich hab das ADON bit in ADCON0 auf 0 gesetzt

Das reicht aber nicht!
ADCON1 auch richtig setzen.

von Michael M. (Gast)


Lesenswert?

holger schrieb:
>>ich hab das ADON bit in ADCON0 auf 0 gesetzt
>
> Das reicht aber nicht!
> ADCON1 auch richtig setzen.

Hab ich auch gesetzt. Sogar das PBADEN config pragma hab ich auf OFF 
gestellt.
Hilft alles nichts!

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.