mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik CS8900A: kein Rdy4TxNOW Flag


Autor: MarioFischer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo!

ich habe den CS8900A (via http://www.olimex.com/dev/cs8900a-h.html ) mit 
einem ATmega32 im 8bit-Mode verbunden. Ich kann auch bereits Frames 
korrekt empfangen.
Aber mit dem Senden habe ich kein Glueck. In der Beschreibung des CS ( 
http://www.cirrus.com/en/pubs/proDatasheet/CS8900A_F4.pdf S. 103 ) 
heisst es:
1. TxCmd geben ("start Sending after Complete Frame uploaded)
2. Laenge des Frames geben
3. Das Rdy4TxNOW in BusST auslesen und es muss 1 sein
4. Den Frame sequenziell in den TxFramePort schreiben.

Ich bekomme jedoch kein Rdy4TxNOW Flag, egal wie lange ich danach polle.
Hier mal ein Code-Snipplet, die LoLevel-Sachen wie ob das Hi/LoByte 
zurest/zuletzt von der hohen/niedrigen Adresse gelesen/geschrieben 
werden muss ("a0l_a1h") hab ich mal weggelassen, das sollte funzen (kann 
zB auch die MAC setzen und wieder korrekt auslesen).

Der ganze Code ist sehr eng an den Olimex-Democode ( 
http://olimex.com/dev/soft/msp430/easyweb_test.zip ) angelehnt. Hat 
jemand eine Idee, warum der CS keine Frames von mir haben will?

Danke und Gruesse aus Muenchen

Mario [ FischerMario bei geh em ix punkt net ]
void cs8900_init(void) {
  ... softreset, setmac, ...
  cs8900a_writerepp(PP_LineCTL, SERIAL_RX_ON | SERIAL_TX_ON);
  cs8900a_writerepp(PP_RxCTL,   RX_OK_ACCEPT | RX_IA_ACCEPT | RX_BROADCAST_ACCEPT);
}

bool_t cs8900a_gettxready(void) {
  return (cs8900a_readpp(PP_BusST) & READY_FOR_TX_NOW); 
}

void cs8900a_settxframelen(uint16_t len) {
  cs8900a_write_a0l_a1h(TX_CMD_PORT, TX_START_ALL_BYTES);
  cs8900a_write_a0l_a1h(TX_LEN_PORT, len);
}

void cs8900a_writetxframebuf(uint16_t data) {
  cs8900a_write_a0l_a1h(TX_FRAME_PORT, data);
}

bool_t cs8900a_writetxframe(uint16_t* data, uint16_t len) {
  cs8900a_settxframelen(len);
  if (!cs8900a_gettxready()) {
    return FALSE;
  }
  
  while (len--) {
    cs8900a_writetxframebuf(*data);
    data++;
  }
  return TRUE;
}

Autor: MarioFischer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ergaenzung:
Hier ( http://blog.linuxsky.org/?uid-463-action-viewspace... ) 
hatte ein Kollege aus Fernost wohl das selbe Problem.
Bei ihm hat es funktioniert, indem er staendig zum Senden Re-Requestet, 
also so was:
bool_t cs8900a_writetxframe(uint16_t* data, uint16_t len) {
  do {
    cs8900a_settxframelen(len); // redo that request on every reject
  } while (!cs8900a_gettxready());

  while (len--) {
    cs8900a_writetxframebuf(*data);
    data++;
  }
  return TRUE;
}

Zum einen fuktioniert das bei mir auch nicht, zum anderen ist damit auch 
nicht die Ursache geklaert.

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.