2016-04-19 9 views
0

Ich muss bestimmte Daten zu einem FPGA mit SPI mit meinem LPC1769 senden. Allerdings verstehe ich nicht ganz, wie ich das angehen soll. Ich habe derzeit diesen Code, der im Hardfault-Handler endet. Ich darf CMSIS nicht verwenden, daher musste ich die Register selbst definieren.SPI-Peripherie auf LPC1769

void sendData(uint8_t *buf, uint32_t Length) { 
    uint32_t i; 
    for (i = 0; i < Length; i++) { 
     while (S0SPSR != (1 << 7)) { 
      S0SPDR = *buf; 
      gpio0WritePin(15, 1); 
      gpio0WritePin(15, 0); 
      buf++; 
     } 
    } 
return; 
} 

und meine Hauptfunktion:

uint8_t TX[16]; 
int main(void) { 
    SpiInit(); 
    TX[0] = 0x48; 
    TX[1] = 0x65; 
    TX[2] = 0x6c; 
    TX[3] = 0x6c; 
    TX[4] = 0x6f; 
    while (1) { 
     SPI_Begin(); 
     sendData((uint8_t*)TX, 5); 
     SPI_End(); 
    } 
} 
+0

Das Problem könnte nur irgendwo sein, vor allem in dem Code, der hier nicht angezeigt wird. Sie müssen es debuggen. Untersuchen Sie Ihre Fehlerstatusregister und suchen Sie sie auf. –

+0

Wenn ich die Zeiger von Buf in Standard-Arrays ändere, wird es nicht mehr im Hard-Fault-Handler enden – Arrrow

Antwort

1

Sie definitiv nicht wollen, gehen Daten an den SPI-Bus wie das mit dieser Art auf modernen Mikrocontrollern Bit-hämmern.

Wenn Sie CMSIS aus irgendeinem Grund nicht verwenden dürfen, würde ich vorschlagen, dass Sie sich how CMSIS does SPI communication ansehen. Öffnen Sie dieses (oder besser: drucken Sie es aus) und verwenden Sie "Kapitel 17: LPC176x/5x SPI" aus der LPC176x/5x User Manual als Referenz während Sie gehen (Seiten 410-420). Der Code sollte relativ einfach zu befolgen sein.

Auf den Punkt gebracht, müssen Sie:

  • die SPI-Controller über den Power Control für Peripherie Register ermöglichen,
  • Setup und aktivieren Sie die Uhr für dieses Peripheriegerät (perpheral Clock Selection Register),
  • konfigurieren Sie die E/A-Pins zu SPI (MOSI, MISO, CLK, CS), Uhr Polarität, etc ... durch das SPI-Steuerregister,
  • Setup-Interrupts, so dass Sie keine Zeit verschwenden müssen um Status zu verschwenden registriert sich, während auf neue Daten gewartet wird,
  • Lesen und Schreiben von Daten mit jeweils 8 Bit unter Verwendung des SPI-Datenregisters.

Vergessen Sie nicht, Interrupts zu verwenden, werden Sie Ihre CPU-Zyklen am besten verwendet, um Daten als alles andere (insbesondere Abfragestatusregister, ein sehr häufiger Fehler leider) Knirschen.

Verwandte Themen