Forum: Mikrocontroller und Digitale Elektronik USI Buffer Register USIBR


von Jurij H. (kebabfreund)


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?

von Bene (Gast)


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

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.