test_timer.c 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. #include <stdlib.h>
  2. #include "ctest.h"
  3. #include "nuclei_sdk_soc.h"
  4. void eclic_msip_handler(void)
  5. {
  6. ASSERT_NOT_EQUAL(SysTimer_GetMsipValue() & SysTimer_MSIP_MSIP_Msk, 0);
  7. SysTimer_ClearSWIRQ();
  8. }
  9. CTEST(timer, timer_irq)
  10. {
  11. __disable_irq();
  12. ECLIC_ClearPendingIRQ(SysTimerSW_IRQn);
  13. ASSERT_EQUAL(ECLIC_GetPendingIRQ(SysTimerSW_IRQn), 0);
  14. ECLIC_Register_IRQ(SysTimerSW_IRQn, ECLIC_NON_VECTOR_INTERRUPT, ECLIC_LEVEL_TRIGGER, 1, 0, eclic_msip_handler); /* register system timer SW interrupt */
  15. SysTimer_SetSWIRQ();
  16. __RWMB();
  17. ASSERT_NOT_EQUAL(ECLIC_GetPendingIRQ(SysTimerSW_IRQn), 0);
  18. __enable_irq();
  19. for (uint32_t i = 10; i > 0; --i) {}
  20. ASSERT_EQUAL(ECLIC_GetPendingIRQ(SysTimerSW_IRQn), 0);
  21. ASSERT_NOT_EQUAL(SysTimer_GetControlValue(), 1);
  22. SysTimer_SetControlValue(1);
  23. ASSERT_EQUAL(SysTimer_GetControlValue(), 1);
  24. SysTimer_SetControlValue(0);
  25. ECLIC_DisableIRQ(SysTimerSW_IRQn);
  26. __disable_irq();
  27. }
  28. CTEST(timer, timer_start_stop)
  29. {
  30. SysTimer_Stop();
  31. uint64_t cur_value = SysTimer_GetLoadValue();
  32. uint32_t cur_ctrl = SysTimer_GetControlValue();
  33. ctest_delay(20);
  34. ASSERT_EQUAL(cur_value, SysTimer_GetLoadValue());
  35. ASSERT_NOT_EQUAL(cur_ctrl & SysTimer_MTIMECTL_TIMESTOP_Msk, 0);
  36. SysTimer_Start();
  37. cur_ctrl = SysTimer_GetControlValue();
  38. ctest_delay(20);
  39. ASSERT_EQUAL(cur_ctrl & SysTimer_MTIMECTL_TIMESTOP_Msk, 0);
  40. ASSERT_NOT_EQUAL(cur_value, SysTimer_GetLoadValue());
  41. }
  42. CTEST(timer, timer_set_msip)
  43. {
  44. __disable_irq();
  45. SysTimer_SetMsipValue(SysTimer_MSIP_Msk);
  46. ASSERT_NOT_EQUAL(SysTimer_GetMsipValue() & SysTimer_MSIP_MSIP_Msk, 0);
  47. SysTimer_SetMsipValue(0);
  48. ASSERT_EQUAL(SysTimer_GetMsipValue() & SysTimer_MSIP_MSIP_Msk, 0);
  49. SysTimer_ClearSWIRQ();
  50. }
  51. // CTEST(timer, timer_softreset) {
  52. // SysTimer_SoftwareReset();
  53. // Should reset here
  54. // }