SPI Initialisierung auf AT91SAM7S

Gast #636044
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

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