Hi!

Versuche grade den Watchdogtimer zum Laufen zu bringen. Klappt aber noch nicht so ganz...
Hab zum Ausprobieren ein ganz einfaches Testprogramm geschrieben.
Watchdog Initialisierung, in der Hauptschleife "Hello World" ans Terminal senden (dort will ich später Delay einbauen, um einen System Reset vom Watchdog zu erzwingen) und dann noch ein Check ob Senderoutine korrekt ausgeführt wurde (wenn dieser OK war, gibts nen Watchdog Reset)
Problem ist, das nie ein "Hello World" am Terminal erscheint... sondern nur:
4
_4
__4
___4
usw. (die _ sollen Leerzeichen darstellen... Forum scheint das nicht zu checken)
Am Software UART kanns aber nicht liegen, da bin ich mir 100% sicher

Code:
#include <iom88.h>
#include <ina90.h>
#include <string.h>
#include "sw_uart.h"

void watchdog_init(void);
void sende_routine(void);
void health_check(void);

volatile unsigned char Flag;
#define SENDEROUTINE_M_OK   1

__task void main(void)
{
  watchdog_init();

  __enable_interrupt();

  __watchdog_reset();   // Reset Watchdog Timer und ab in die Hauptschleife

  while(1)
  {
    sende_routine();    // Hallo Welt senden (mit versch. Delays ausprobieren -> System Reset funktioniert?)

    health_check();     // Am Ende der Hauptschleife prüfen, ob sende_routine() ordnungsgemäß ausgeführt
  }
}


void watchdog_init(void)
{
  MCUSR = 0;  // Clear all flags previously set.
  Flag = 0;

  /* Setup Watchdog */
  WDTCSR |= (1<<WDCE);   // Watchdog Change Enable setzen

  WDTCSR |= (1<<WDE);    // Watchdog System Reset Mode einstellen

  WDTCSR |= (1<<WDP3);   // Timeout auf 4.0 Sekunden setzen

  sw_uart_init();
}


void sende_routine(void)
{
  char	bTxt[24] = "\r\nHello, World\r\n";
  unsigned char bIx;
  unsigned char bLn;

  bLn = strlen(bTxt);

  for (bIx = 0;bIx < bLn; bIx++)
  {
    send_one_byte(bTxt[bIx]);

    // hier später delay um System Reset zu simulieren....
  }

  Flag |= (1<<SENDEROUTINE_M_OK);   // Routine korrekt ausgeführt
}


void health_check(void)
{
  if(Flag & (1<<SENDEROUTINE_M_OK)) // alles ok ?
  {
    Flag &=~ (1<<SENDEROUTINE_M_OK);

    __watchdog_reset();   // dann Reset Watchdog
  }
}

Weis nicht woran das liegt..

Gruß
schamp