USI Buffer Register USIBR

OP #2924092
Lesenswert?
• ▲
▼
Guten Morgen,

ich bin dabei mit dem AtTiny261A einen SPI-Slave aufzubauen.

Problem habe ich in folgender ISR:
1
ISR (USI_OVF_vect)
2
{
3
  //uint8_t data = USIDR; //  << geht
4
  uint8_t data = USIBR;   //  << geht nicht
5
  if(data == 0x42)
6
  {
7
    TC1H ^= 0x03;
8
    OCR1D ^= 0xFF;  //LED schalten
9
  }
10
  USISR |= (1 << USIOIF);
11
}

Initialisierung:
1
int main(void)
2
{
3
  //USI als SPI
4
  USIPP |= (1 << USIPOS);    //Pins von PA[2:0] fuer USI nutzen  
5
  USICR |= (1 << USIWM0) | (1 << USICS1) | (1 << USICS0) | (1 << USIOIE);    //Three Wire, fallende Flanke, Interrupt bei Ueberlauf 
6
   
7
  DDRB |= R | G | B;    //Ports auf Ausgang stellen
8
  
9
  //PWM einschalten  
10
  PLLCSR = (1 << PCKE);  //Timer1 auf PLL clock als quelle (64MHz)
11
  TCCR1B = (1 << CS10) ;  //Timer Starten, Prescaler 1  
12
  TCCR1A |= (1 << COM1A0) | (1 << COM1B0) | (1 << PWM1A) | (1 << PWM1B);
13
  TCCR1C |= (1 << COM1D0) | (1 << PWM1D);
14
  TCCR1D |= (1 << WGM10);  
15
  TC1H = 0x03;
16
  OCR1C = 0xFF;  
17
  OCR1D = 0xFF;
18
  sei();
19
  
20
    while(1)
21
    {
22
    }
23
}

Beim verwenden von USIDR wird die LED umgeschaltet(PB5 per PWM).
Das gleiche mit USIBR geht nicht obwohl es ja beim Überlauf die Daten 
von USIDR nach USIBR kopiert werden sollten (so habe ich das aus dem 
Datenblatt verstanden).

Hatte es auch schonmal mit dem AtTiny25 und TWI probiert das USIBR zu 
benutzen, erfolglos.

Kennt jemand das Problem?
Gast #3748069
Lesenswert?
• ▲
▼
Hi!

Ich muss hier nochmal die Särge ausgraben, aber ich habe das gleiche 
Problem. Ich nutze einen ATTiny84 als SPI Slave. Das USIBR ist irgendwie 
nicht zu gebrauchen.

Im AppNote zu SPI steht leider nichts zum Buffer Register drin, im 
Gegenteil:

"The USI Data Register (USIDR) is an 8-bit Shift Register that contains 
the incoming and outgoing data. The register has no buffering so the 
data must be read as quickly as possible to ensure that no data is lost. 
"

http://www.atmel.com/images/doc2582.pdf

Das mag damit zusammenhängen, dass die Note von 2004 ist und laut 
Datenblatt des Tiny Juli 2006 neue Features hinzu kamen. August 2006 
wurde ein Codebeispiel eingefügt, dieses nutzt aber auch nicht das 
USIBR.

Aaalso: Hat jemand schon mal erfolgreich dieses Buffer Register benutzt? 
Gibt es noch eine Einstellung, die man beachten muss?

Grüße
Bene

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.