timers.c 1.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. #include <os.h>
  2. #include "timers.h"
  3. #define TIMER 0x900D0000
  4. unsigned timer_ctl_bkp[2], timer_load_bkp[2];
  5. void timer_init(unsigned timer)
  6. {
  7. volatile unsigned *timer_ctl = (unsigned *) (TIMER + 0x08 + 0x20 * timer);
  8. volatile unsigned *timer_load = (unsigned *) (TIMER + 0x20 * timer);
  9. timer_ctl_bkp[timer] = *timer_ctl;
  10. timer_load_bkp[timer] = *timer_load;
  11. *timer_ctl &= ~(1 << 7);
  12. *timer_ctl = 0b01100011;
  13. *timer_ctl |= (1 << 7);
  14. }
  15. void timer_restore(unsigned timer)
  16. {
  17. volatile unsigned *timer_ctl = (unsigned *) (TIMER + 0x08 + 0x20 * timer);
  18. volatile unsigned *timer_load = (unsigned *) (TIMER + 0x20 * timer);
  19. *timer_ctl &= ~(1 << 7);
  20. *timer_ctl = timer_ctl_bkp[timer] & ~(1 << 7);
  21. *timer_load = timer_load_bkp[timer];
  22. *timer_ctl = timer_ctl_bkp[timer];
  23. }
  24. void timer_load(unsigned timer, unsigned value)
  25. {
  26. volatile unsigned *timer_load = (unsigned *) (TIMER + 0x20 * timer);
  27. *timer_load = value;
  28. }
  29. unsigned timer_read(unsigned timer)
  30. {
  31. volatile unsigned *timer_value = (unsigned *) (TIMER + 0x04 + 0x20 * timer);
  32. return *timer_value;
  33. }