Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
artikel:ateval:usart-ringpuffer [2013/04/07 11:13] – angelegt Hannes Jochriem | artikel:ateval:usart-ringpuffer [2024/02/06 09:43] (aktuell) – Externe Bearbeitung 127.0.0.1 | ||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
<code c> | <code c> | ||
/* | /* | ||
- | | + | |
* Einfacher Code, der den UART initialisiert und die | * Einfacher Code, der den UART initialisiert und die | ||
- | * empfangenen Bytes in einen Rinpuffe | + | * empfangenen Bytes in einen Rinpuffer |
- | * Sind Bytes im Ringpuffer werden diese zurueckgeschickt | + | * Sind Bytes im Ringpuffer, werden diese zurueckgeschickt |
* Als Baudrate wird 9600Bd eingestellt | * Als Baudrate wird 9600Bd eingestellt | ||
* http:// | * http:// | ||
Zeile 20: | Zeile 20: | ||
// Defines: | // Defines: | ||
- | # | + | # |
+ | #define PUFFERSIZE 8 | ||
// globale Variablen | // globale Variablen | ||
- | // volatile ist noetig da die Variablen in der ISR veraendert werden | + | // volatile ist noetig, da 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 | + | // Schreibposition |
ring_schreibe++; | ring_schreibe++; | ||
- | //Schreibeposition | + | //Schreibposition |
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 | + | { // Puffer ist voll, Schreibposition |
+ | // 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, | // Receive-Interrupt einschalten, | ||
UCSRB |= (1<< | UCSRB |= (1<< | ||
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 |