1. void uart_TimerConfig(void) {
  2. uint16_t buffer = F_CPU/uart_getBaudrate()/254; // Berechne den minimalsten Wert fuer den Prescaler
  3. if(!buffer) { // Kein Prescaler notwendig
  4. prescaler = 1; // Wert fuer das TCCR0B-Register: 1
  5. buffer = 1;
  6. }
  7. else if(buffer < 8) { // 8er Prescaler
  8. prescaler = 2; // Wert fuer das TCCR0B-Register: 2
  9. buffer = 8;
  10. }
  11. else if(buffer < 64) { // 64er Prescaler
  12. prescaler = 3; // Wert fuer das TCCR0B-Register: 3
  13. buffer = 64;
  14. }
  15. else if(buffer < 256) { // 256er Prescaler
  16. prescaler = 4; // Wert fuer das TCCR0B-Register: 4
  17. buffer = 256;
  18. }
  19. else if(buffer < 1024) { // 1024er Prescaler
  20. prescaler = 5; // Wert fuer das TCCR0B-Register: 5
  21. buffer = 1024;
  22. }
  23. else prescaler = 0; // Die CPU Frequenz ist zu hoch oder die Baudrate ist zu niedrig
  24.  
  25. if(prescaler) setpoint = F_CPU/uart_getBaudrate()/buffer+1; // Wenn der Prescaler einen gueltigen Wert hat, dann berechne den Sollwert des Timers
  26. else setpoint = 0; // Die CPU Frequenz ist zu hoch oder die Baudrate ist zu niedrig
  27. }