www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik SJA100 Leseproblem


Autor: Duran (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Leute,
ich habe ein SJA1000 CAN Controller  über EBI (External Bus Interface) 
SMC Inteface (static memory controller)des Atmel AVR32UC3 angeschlossen. 
Habe aber die DATEN Leitung mit dem AD Leitung verbunden. Da der SJA100 
Multiplexte Adres und Datenleitung hat, habe ich den ALE über ein GPIO 
pin gesteuert. Zuerst setze ich den ALE auf High dann schreibe ich die 
adresse, Dann setze ich den ALE auf LOW und lese die Daten. Habe auch 
die Timings nach dem Datenblatt des CAN Controllers eingestellt. Wenn 
ich alle Regsiter nacheinander Lese bekomme ich folgendes: 00 04 08 0C 
10 14 18 1C 20 24 28 2C 30 34 38 3C 40 44 48 4C 50 54 58 5C 60 64 68
 6C 70 74 78 7C.
Aber aus dem Register 30 kann men laut Datenblatt nur ein FFH lesen.
Das ist aber nicht der Fall.
Was jemand wo der Wurm drin ist ?

Autor: Werner B. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
In der CAN-Lib auf 
http://www.kreatives-chaos.com/artikel/universelle...
wird es wie Unten gezeigt gemacht.
Vielleicht hilft dir das.

Aber wie immer: Ohne Quarantäne.

void sja1000_write(uint8_t address, uint8_t data)
{
  // set address
  SET(SJA1000_ALE);
  PORT(SJA1000_DATA) = address;
  _NOP();
  RESET(SJA1000_ALE);
  
  // write data
  PORT(SJA1000_DATA) = data;
  RESET(SJA1000_WR);
  _NOP();
  SET(SJA1000_WR);
}

uint8_t sja1000_read(uint8_t address)
{
  uint8_t data;
  
  // set address
  SET(SJA1000_ALE);
  PORT(SJA1000_DATA) = address;
  _NOP();
  RESET(SJA1000_ALE);
  DDR(SJA1000_DATA) = 0;
  
  // read data
  RESET(SJA1000_RD);
  _NOP();
  data = PIN(SJA1000_DATA);
  SET(SJA1000_RD);
  DDR(SJA1000_DATA) = 0xff;
  
  return data;
}

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> 00 04 08 0C 10 14 18 1C 20 24 28 2C 30 34 38 3C 40 44 48 4C 50 54 58 5C 60
> 64 68 6C 70 74 78 7C.
Das sieht aus, als ob du einfach die Addresse*4 zurückliest.
Irgendwie riecht das nach einem 32-Bit-Prozessor...

> Zuerst setze ich den ALE auf High dann schreibe ich die
> adresse, Dann setze ich den ALE auf LOW und lese die Daten.
Und führst dabei natürlich 2 mal den kompletten Buszyklus mit nRD bzw. 
nWR aus. Kontrollier doch mal mit einem passenden Messgerät (Oszi, LA) 
das Timing deines Buszyklus. Der sieht sicher anders aus, als der SJA 
das erwartet.

EDIT:
Das Beispiel von Werner B. funktioniert über einen Port, nicht über das 
Speicherinterface...
Damit wird das Bustiming des SJA von Hand nachgebildet.

Autor: Duran (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
OK Danke ich probiers mal.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.