board_coretimer.c 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. /*
  2. * Copyright (c) 2006-2021, RT-Thread Development Team
  3. *
  4. * SPDX-License-Identifier: Apache-2.0
  5. *
  6. * Change Logs:
  7. * Date Author Notes
  8. * 2017-01-01 Urey first version
  9. */
  10. #include <rthw.h>
  11. #include <rtthread.h>
  12. #include "board.h"
  13. #include "board_coretimer.h"
  14. #include <stdint.h>
  15. static inline unsigned int readreg32(volatile unsigned int *addr)
  16. {
  17. return *(volatile unsigned int *)addr;
  18. }
  19. static inline void writereg32(unsigned int b, volatile unsigned int *addr)
  20. {
  21. *(volatile unsigned int *)addr = b;
  22. }
  23. void CKTimerInit(uint32_t timer_id, uint32_t freq)
  24. {
  25. uint32_t reg;
  26. writereg32(APB_DEFAULT_FREQ / freq, CORET_RVR);
  27. writereg32(0, CORET_CVR);
  28. reg = readreg32(CORET_CSR);
  29. reg |= CORETIM_TXCONTROL_ENABLE;
  30. reg |= CORETIM_TXCONTROL_INTMASK;
  31. writereg32(reg, CORET_CSR);
  32. return;
  33. }
  34. void CKTimerClear(uint32_t timer_id)
  35. {
  36. uint32_t reg;
  37. reg = readreg32(CORET_CSR);
  38. reg |= ~CORETIM_TXCONTROL_MODE;
  39. writereg32(reg, CORET_CSR);
  40. }
  41. uint32_t CKTimer_CurrentValue(void)
  42. {
  43. return readreg32(CORET_CVR);
  44. }
  45. void __attribute__((isr)) SysTick_Handler(void)
  46. {
  47. CKTimerClear(0x1);
  48. /* enter interrupt */
  49. rt_interrupt_enter();
  50. rt_tick_increase();
  51. /* leave interrupt */
  52. rt_interrupt_leave();
  53. }