From: Michel Pollet Date: Wed, 6 Jan 2010 22:38:25 +0000 (+0000) Subject: watchdog: Added a test module X-Git-Tag: v1.0a1~11 X-Git-Url: https://git.htl-mechatronik.at/public/?a=commitdiff_plain;h=eb090a5c1e8e418281c79081620896772f08e977;p=sx%2Fsimavr.git watchdog: Added a test module Small module that tests the watchdog timer Signed-off-by: Michel Pollet --- diff --git a/tests/Makefile b/tests/Makefile index 68db33c..0cf07f2 100644 --- a/tests/Makefile +++ b/tests/Makefile @@ -3,7 +3,6 @@ # And compile it into an ELF binary. # It also disassemble it for debugging purposes. # -# # Copyright 2008, 2009 Michel Pollet # # This file is part of simavr. @@ -26,7 +25,11 @@ SHELL = /bin/bash sources := $(wildcard at*.c) -all : ${sources:.c=.axf} ${sources:.c=.hex} ${sources:.c=.s} +all : ${sources:.c=.axf} +# if you want hex files +#all : ${sources:.c=.hex} +# if you need assembler output +#all : ${sources:.c=.s} include ../Makefile.common diff --git a/tests/atmega48_watchdog_test.c b/tests/atmega48_watchdog_test.c new file mode 100644 index 0000000..e622886 --- /dev/null +++ b/tests/atmega48_watchdog_test.c @@ -0,0 +1,83 @@ +/* + attiny13_watchdog_test.c + + Copyright 2008, 2009 Michel Pollet + + This file is part of simavr. + + simavr is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + simavr is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with simavr. If not, see . + */ + + +#include +#include +#include +#include +#include +#include + +/* + * This demonstrate how to use the avr_mcu_section.h file + * The macro adds a section to the ELF file with useful + * information for the simulator + */ +#include "avr_mcu_section.h" +AVR_MCU(F_CPU, "atmega48"); + +static int uart_putchar(char c, FILE *stream) { + if (c == '\n') + uart_putchar('\r', stream); + loop_until_bit_is_set(UCSR0A, UDRE0); + UDR0 = c; + return 0; +} + +static FILE mystdout = FDEV_SETUP_STREAM(uart_putchar, NULL, + _FDEV_SETUP_WRITE); + + +ISR(WDT_vect) +{ + // nothing to do here, we're just here to wake the CPU +} + +int main() +{ + stdout = &mystdout; + + wdt_enable(WDTO_120MS); + + // enable watchdog interupt + // NOTE: since the Change Enable bit is no longer on, it should not + // change the timer value that is already set! + WDTCSR = (1 << WDIE); + + sei(); + + printf("Watchdog is active\n"); + uint8_t count = 20; + while (count--) { + _delay_ms(10); + wdt_reset(); + } + printf("Waiting for Watchdog to kick\n"); + // now , stop calling the watchdog reset, and just sleep until it fires + sleep_cpu(); + printf("Watchdog kicked us!\n"); + + // when arriving here, the watchdog timer interupt was called and woke up + // the core from sleep, so we can just quit properly + cli(); + sleep_cpu(); +}