interface-avr.c 660 B

123456789101112131415161718192021222324252627282930313233343536373839
  1. #include <avr/io.h>
  2. #include <stdio.h>
  3. #include "interface.h"
  4. #include <stdint.h>
  5. #define special_output_port (*((volatile char *)0x20))
  6. static int output_char(char c, FILE *stream)
  7. {
  8. special_output_port = c;
  9. return 0;
  10. }
  11. static FILE mystdout = FDEV_SETUP_STREAM(output_char, NULL, _FDEV_SETUP_WRITE);
  12. void interface_init()
  13. {
  14. // Set timer 1 to count cycles
  15. TCCR1B = 1;
  16. // Set output to simulator
  17. stdout = &mystdout;
  18. stderr = &mystdout;
  19. }
  20. void start_timing()
  21. {
  22. TCNT1 = 0;
  23. }
  24. uint16_t end_timing()
  25. {
  26. return TCNT1 - 9;
  27. }
  28. void print_value(const char *label, int32_t value)
  29. {
  30. printf("%-20s %ld\n", label, value);
  31. }