AVR32 SPI Problem (gelöst)

OP #1001545
Lesenswert?
• ▲
▼
Hallo,

hab seit kurzem einen AT32UC3B1256 auf einer eigenen Platine in betrieb. 
Serielle Schnittstelle zum PC funktioniert, ich bekomme aber das 
SPI(-Interface) nicht zum laufen.
Benutze das AVR32 Studio und die mitgelieferten "Treiber" von Atmel.

Der verantwortliche Code sieht so aus:
1
//SPI (die Zuordnungen sind korrekt, sind eigene Defines aus einer .h-Datei
2
gpio_enable_module_pin(AVR32_SPI_MISO_PIN, AVR32_SPI_MISO_FUNCTION);
3
gpio_enable_module_pin(AVR32_SPI_MOSI_PIN, AVR32_SPI_MOSI_FUNCTION);
4
gpio_enable_module_pin(AVR32_SPI_SCK_PIN, AVR32_SPI_SCK_FUNCTION);
5
gpio_enable_module_pin(AVR32_SPI_NPCS0_PIN, AVR32_SPI_NPCS0_FUNCTION);
6
gpio_enable_module_pin(AVR32_SPI_NPCS1_PIN, AVR32_SPI_NPCS1_FUNCTION);
7
gpio_enable_module_pin(AVR32_SPI_NPCS2_PIN, AVR32_SPI_NPCS2_FUNCTION);
8
gpio_enable_module_pin(AVR32_SPI_NPCS3_PIN, AVR32_SPI_NPCS3_FUNCTION);
9
  
10
static const spi_options_t SPI_OPTIONS =
11
{
12
  .reg     = SPI_CS_AT8,  //=1
13
  .baudrate   = 35000,  //Verhaltnis zu FOSC0(8MHz) ist kleiner 255
14
  .bits   = 8,
15
  .spck_delay     = 10,
16
  .trans_delay  = 10,
17
  .stay_act = 0,
18
  .spi_mode = 0,
19
  .modfdis = 1
20
};
21
  
22
spi_enable(&AVR32_SPI);
23
  
24
if (spi_initMaster(&AVR32_SPI, &SPI_OPTIONS) != SPI_OK)
25
  usart_putchar(&AVR32_USART1, 'E');
26

27
if (spi_selectionMode(&AVR32_SPI, 0, 0, 10) != SPI_OK)
28
  usart_putchar(&AVR32_USART1, 'f');
29

30
if (spi_setupChipReg(&AVR32_SPI, &SPI_OPTIONS, FOSC0) != SPI_OK)
31
  usart_putchar(&AVR32_USART1, 'F');
32

33
while(1)
34
{
35
  if (spi_selectChip(&AVR32_SPI, SPI_CS_AT8) != SPI_OK)
36
    usart_putchar(&AVR32_USART1, 'H');
37

38
  if (spi_write(&AVR32_SPI, 2) != SPI_OK)
39
    usart_putchar(&AVR32_USART1, 'I');
40

41
  spi_unselectChip(&AVR32_SPI, SPI_CS_AT8);
42
  delay_ms(1000);
43
}

So und hier meldet mit die USART 1x pro Sekunde ein 'I', also ein 
TimeoutError beim schreiben. Die Initialisierunng funktioniert jedoch 
(inzwischen, hatte den Takt am Anfang zu gering).
CLK ist ständig low, SPI_CS_AT8 und MOSI high. Da ändert sich nix. Das 
sieht ja soweit ganz korrekt aus, nur das eben nicht gesendet wird.

So und hier die Problemlösung:
spi_enable(&AVR32_SPI); erst nach der Initialisierung aufrufen, also bei 
mir vor der while(1)-Schleife.

Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.