Forum: Mikrocontroller und Digitale Elektronik SPI Initialisierung auf AT91SAM7S


von Peter Pippinger (Gast)


Lesenswert?

Hallo NG,

kann mir bitte jemand sage, der schon mal SPI auf dem AT91SAM7S
verwendet hat, ob die SPI-Initialisierung so passt (Die Pins vom 
SD-Kartenleser sollen zugewiesen werden)? Oder habe ich noch was 
vergessen?

Vielen Dank!
Peter

init_spi:

  // verwendete Register auf Stack legen
  PUSH  {r0, r1}

  // Basisadresse setzen
  LDR  r0, =PIO_BASE

  // den entsprechenden PINS die Funktion zuweisen
  LDR  r1, =BIT11 | BIT12 | BIT13 | BIT14
  STR  r1, [r0, #PIO_PDR]
  STR  r1, [r0, #PIO_ASR]
  LDR  r1, =0
  STR  r1, [r0, #PIO_BSR]

  // Basisadresse setzen
  LDR  r0, =PIO_BASE

  // enable SPI-Clock (ID=5)
  LDR  r1, =1 << 5
  STR  r1, [r0, #PMC_PCER]

  // Basisadresse setzen
  LDR  r0, =SPI_BASE

  // SPI-MODE: fixed
  LDR  r1, =0x81;    // SPI Enable, Software Reset
  STR  r1, [r0, #SPI_CR]
  LDR  r1, =0x01;    // SPI Enable
  STR  r1, [r0, #SPI_CR]
  LDR  r1, =0xE0011;    // Master Mode, Fixed Select
  STR  r1, [r0, #SPI_MR]
  LDR  r1, =0x4A02;    // 8bit, CPOL: 0, ClockPhase: 1,
  STR  r1, [r0, #SPI_CSR0]  // SCLK: 200kHz

  // Basisadresse setzen
  LDR  r0, =PDC_BASE
  LDR  r1, =AT91C_PDC_TXTEN | AT91C_PDC_RXTEN
  STR  r1, [r0, #PDC_PTCR]

  // Basisadresse setzen
  LDR  r0, =SPI_BASE
  STR  r1, [r0, #SPI_PTCR]

  // urspruengliche Register vom Stack holen
  POP  {r0, r1}

  // Zurueck aus Subroutine
  MOV  pc, r14

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.