mikrocontroller.net

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


Autor: Dennis (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Dennis (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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++);

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.