Forum: Mikrocontroller und Digitale Elektronik SPI Funktion für XMega128A1 in Codevision


von Venga A. (venga)


Lesenswert?

Hallo Zusammen,

ich habe mir vor kurzem die neue Version des CodeVisionAVR Evaluation 
V2.04.5b heruntergeladen, da das Programm jetzt auch die ATxMeaga-Reihe 
unterstützen soll.

Um eine schnellere Konfiguration der Register zu erlangen habe ich den 
CodeWizard aufgerufen. Allerdings suche ich dort vergebens die 
Konfiguration der SPI-Module. Nur unter der USART-Schnittstelle habe ich 
einen Master SPI-Modus gefunden. Dies ist aber doch nicht das 
eignetliche SPI-Modul sondern nur eine, über das USART-Modul, simulierte 
SPI-Schnittstelle oder verstehe ich hier etwas falsch?

Wenn sich jemand von euch mit CodeWizard und dem SPI der Xmega-Reihe 
auskennt währe es sehr Nett wenn mir jemand erklären könnte wie man das 
richtige SPI-Modul aktiviert und was eigentlich der Master-SPI-Modus 
ist.

Schon mal vielen Danke!!!

von GG (Gast)


Lesenswert?

Hallo,

kein Wisard der Welt kann Dir bei der Funkton der SPI-Schnittstelle 
helfen.
Der stellt Dir höchstens die Grund-Configuration zur Verfügung.
Der Umstieg auf XMEGAS ist gar nicht so schwierig- Grundbedingung:
Du solltest einigermaßen fit im Umgang mit herkömmlichen AVR's sein.
SPI,TWI USART sollte kein Problem sein.
Die beste Lösung ist die ATMEL Seite  "Application Example and 
Algorithms".
(AVR1309 SPI Schnittstelle für XMEGAS).
Link: http://www.atmel.com/dyn/products/app_notes_mcu.asp?family_id=607

Gruß GG

von Dominik M. (lauso)


Lesenswert?

Für Code Vision gibt es zumindest eine Funktion mit der man die Daten 
auf den Bus gibt. Also SPI.h reinladen und Du kannst zumindest diese 
Funktion verwenden.
Ich habe mich damit auch etwas schwergetan. Der Fehler lag bei mir das 
ich die Ausgänge falsch Konfiguriert habe. Mit dem Scope konnte man das 
dann aber gut erkennen.
1
void SPI_Write(unsigned char addr,unsigned char data)
2
{
3
 unsigned char mcpzw=0;
4
  // Activate the CS pin
5
  PORTD.OUT = Bit_Reset(PORTD.OUT,4);
6
  delay_us(1);
7
  // Start MCP23S17 OpCode transmission 
8
 mcpzw = SPI_SLAVE_ID | ((SPI_SLAVE_ADDR << 1) & 0x0E)| SPI_SLAVE_WRITE;
9
  spi(mcpzw);
10
  // Start MCP23S17 Register Address transmission
11
  spi(addr);                      // Wait for transmission complete
12
  // Start Data transmission
13
  spi(data);  
14
  PORTD.OUT = Bit_Set(PORTD.OUT,4);
15
}
16
17
unsigned char SPI_Read(unsigned char addr)
18
{
19
 unsigned char mcpzw=0,rd_data=0;
20
  // Activate the CS pin
21
  PORTD.OUT = Bit_Reset(PORTD.OUT,4);
22
  delay_us(1);
23
  // Start MCP23S17 OpCode transmission 
24
 mcpzw = SPI_SLAVE_ID | ((SPI_SLAVE_ADDR << 1) & 0x0E)| SPI_SLAVE_READ;
25
  spi(mcpzw);
26
  // Start MCP23S17 Register Address transmission 
27
  delay_us(100);
28
  rd_data=spi(addr);                      // Wait for transmission complete
29
  delay_us(100);
30
  rd_data=spi(0x00);
31
  PORTD.OUT = Bit_Set(PORTD.OUT,4);
32
  return rd_data;
33
}
Hier sind meine zwei Funktionen mit dem ich den Bus anspreche.
CS muß natürlich durch Deinen Code erzeugen.

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.