PIC18F2420 hört auf SPI, obwohl SS high

Gast #1419255
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
}
Gast #1419431
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
Gast #1422630
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!

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren