Forum: Mikrocontroller und Digitale Elektronik 16-Bit SPI Master Mode an PIC32 funktioniert nicht


von Dennis (Gast)


Lesenswert?

Hallo Forumgemeinde,

ich versuche mich seit einiger Zeit mit den PIC32 anzufreunden. Als
Hardware habe ich das Ethernet Starter Kit . Die Beispielprogramme von
Microchip bekomme ich zum Laufen.

Jetzt wollte ich einfach mal ein simples
SPI-Programm erstellen. Aber schon bei so einem läppischen Projekt bin
ich am verzweifeln. Mein Code sieht wie folgt aus:

Mein erster Schritt war das Kopieren des Beispiel-Codes, der auf sich 
auf dem PIC32MX Family Reference Manual (DS61106F auf Seite 23-17) 
befindet.
Die Initialisierung habe ich auch vorgenommen.

Weiterhin habe ich das "Watch"-Fenster aktiviert und überwache SPI1CON, 
SPI1STAT und SPI1BUF.

Ich habe festgestellt, dass das SPI1CON Register 0x00008220 bedeutet, 
dass der SPI in 8-Bit-Modus ist, aber der Titel sagt, dass es 16-Bit 
ist. Eine Idee dazu?

Weiter unten ist mein Code. Ich habe kein Oszilloskop zu Hause, kann 
also die Signale nicht direkt überprüfen.


Was will ich machen?
Ich würde gerne mit meinem PIC32 eine LED ansteuern, der an einem 
MAX7301 angeschlossen ist.

Tausend Dank für Eure Hilfe

von Dennis (Gast)


Lesenswert?

> Weiter unten ist mein Code. Ich habe kein Oszilloskop zu Hause, kann
> also die Signale nicht direkt überprüfen.

 #include <plib.h>

  #define SYS_FREQ                      (80000000L)
  #pragma config FPLLMUL = MUL_20, FPLLIDIV = DIV_2, FPLLODIV = DIV_1,
  FWDTEN = OFF
  #pragma config POSCMOD = HS, FNOSC = PRIPLL, FPBDIV = DIV_8

  int j, rData;

  int main ()
  {
  SYSTEMConfig(SYS_FREQ, SYS_CFG_WAIT_STATES | SYS_CFG_PCACHE);

  // Port Initialisation and configuration
  AD1PCFGSET=0x4;                      // Set AN2 (`SS1) pin as digital
  TRISBbits.TRISB2=0;           // Set AN2 (`SS1) as Output
  TRISFbits.TRISF6=0;            // Set RF6 (SCK1) pin as output
  TRISFbits.TRISF7=1;           // Set RF7 (SDI1) pin as input
  TRISFbits.TRISF8=0;           // Set RF8 (SDO1) pin as output
  IEC0CLR = 0x03800000;
  SPI1CON = 0;
  rData = SPI1BUF;
  IFS0CLR = 0x03800000;
  IPC5CLR = 0x1F000000;
  IPC5SET = 0x0D000000;
  IEC0SET = 0x03800000;

  SPI1BRG = 0x1;
  SPI1STATCLR=0x40;
  SPI1CON=0x8220;
  SPI1BUF='A';

  while(!SPI1STATbits.SPIRBF);

  for (j=0;j<10;j++);

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.