Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Nächste Überarbeitung
Vorhergehende Überarbeitung
artikel:ateval:usart-ringpuffer [2013/04/07 11:13] – angelegt Hannes Jochriemartikel:ateval:usart-ringpuffer [2024/02/06 09:43] (aktuell) – Externe Bearbeitung 127.0.0.1
Zeile 1: Zeile 1:
 <code c> <code c>
 /* /*
- LED-Blinker+ Ringpuffer
  * Einfacher Code, der den UART initialisiert und die   * Einfacher Code, der den UART initialisiert und die 
- * empfangenen Bytes in einen Rinpuffe schiebt + * empfangenen Bytes in einen Rinpuffer schiebt 
- * Sind Bytes im Ringpuffer werden diese zurueckgeschickt+ * Sind Bytes im Ringpufferwerden diese zurueckgeschickt
  * Als Baudrate wird 9600Bd eingestellt  * Als Baudrate wird 9600Bd eingestellt
  * http://www.eHaJo.de  * http://www.eHaJo.de
Zeile 20: Zeile 20:
  
 // Defines: // Defines:
-#define PUFFERSIZE 8+#define LED1 (1<<PD6) 
 +#define PUFFERSIZE 8
  
 // globale Variablen // globale Variablen
-// volatile ist noetig da die Variablen in der ISR veraendert werden+// volatile ist noetigda die Variablen in der ISR veraendert werden
 volatile uint8_t ringpuffer[PUFFERSIZE]; volatile uint8_t ringpuffer[PUFFERSIZE];
 volatile uint8_t ring_schreibe = 0;  volatile uint8_t ring_schreibe = 0; 
Zeile 36: Zeile 37:
  temp = UDR;  temp = UDR;
   
- // Schreibeposition inkrementieren+ // Schreibposition inkrementieren
  ring_schreibe++;  ring_schreibe++;
   
- //Schreibeposition auf Puffergroesse beschraenken+ //Schreibposition auf Puffergroesse beschraenken
  ring_schreibe %= PUFFERSIZE;  ring_schreibe %= PUFFERSIZE;
   
  if(ring_schreibe != ring_lese)  if(ring_schreibe != ring_lese)
  { // Puffer ist nicht voll, Byte schreiben  { // Puffer ist nicht voll, Byte schreiben
 + // LED aus
 + PORTD &= ~LED1;
 +
  ringpuffer[ring_schreibe] = temp;  ringpuffer[ring_schreibe] = temp;
  }  }
  else  else
- { // Puffer ist voll, Schreibeposition wieder dekrementieren+ { // Puffer ist voll, Schreibposition wieder dekrementieren 
 + // LED an zeigt vollen Buffer an 
 + PORTD |= LED1; 
 +
  ring_schreibe--;  ring_schreibe--;
  }  }
Zeile 53: Zeile 60:
  
 int main() int main()
-{ +{ 
 + // LED-Pin als Ausgang definieren 
 + DDRD |= LED1; 
 +
  // Receive-Interrupt einschalten, RX und TX einschalten  // Receive-Interrupt einschalten, RX und TX einschalten
  UCSRB |= (1<<RXCIE) | (1<<RXEN) | (1<<TXEN);  UCSRB |= (1<<RXCIE) | (1<<RXEN) | (1<<TXEN);
Zeile 70: Zeile 80:
  {  {
  if(ring_lese != ring_schreibe)  if(ring_lese != ring_schreibe)
- { // He, es ist was im Rinpguffer!!!+ { // He, es ist was im Ringpuffer!!!
   
  // Leseposition inkrementieren  // Leseposition inkrementieren