luat_mcu_air101.c 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. #include "luat_base.h"
  2. #include "luat_mcu.h"
  3. #include "wm_include.h"
  4. #include "wm_cpu.h"
  5. #include "FreeRTOS.h"
  6. #include "task.h"
  7. #define LUAT_LOG_TAG "mcu"
  8. #include "luat_log.h"
  9. /*
  10. enum CPU_CLK{
  11. CPU_CLK_240M = 2,
  12. CPU_CLK_160M = 3,
  13. CPU_CLK_80M = 6,
  14. CPU_CLK_40M = 12,
  15. CPU_CLK_2M = 240,
  16. };
  17. */
  18. int luat_mcu_set_clk(size_t mhz) {
  19. switch(mhz) {
  20. case 240:
  21. tls_sys_clk_set(CPU_CLK_240M);
  22. break;
  23. case 160:
  24. tls_sys_clk_set(CPU_CLK_160M);
  25. break;
  26. case 80:
  27. tls_sys_clk_set(CPU_CLK_80M);
  28. break;
  29. case 40:
  30. tls_sys_clk_set(CPU_CLK_40M);
  31. break;
  32. case 2:
  33. tls_sys_clk_set(CPU_CLK_2M);
  34. break;
  35. default :
  36. return -1;
  37. }
  38. return 0;
  39. }
  40. int luat_mcu_get_clk(void) {
  41. tls_sys_clk sysclk;
  42. tls_sys_clk_get(&sysclk);
  43. return sysclk.cpuclk;
  44. }
  45. static u8 unique_id[18] = {0};
  46. static u8 unique_id_got = 0;
  47. const char* luat_mcu_unique_id(size_t* t) {
  48. if (!unique_id_got && tls_fls_read_unique_id(unique_id) == 0)
  49. unique_id_got = 1;
  50. *t = unique_id_got ? unique_id[1]+2 : 0;
  51. return unique_id;
  52. }
  53. long luat_mcu_ticks(void) {
  54. return xTaskGetTickCount();
  55. }
  56. uint32_t luat_mcu_hz(void) {
  57. return configTICK_RATE_HZ;
  58. }
  59. #include "wm_include.h"
  60. #include "wm_timer.h"
  61. #include "wm_regs.h"
  62. uint32_t us_timer_ticks = 0;
  63. u8 u64_tick_timer_id = 0;
  64. static void utimer_cb(void* arg) {
  65. us_timer_ticks ++;
  66. }
  67. void luat_mcu_tick64_init(void) {
  68. struct tls_timer_cfg cfg = {0};
  69. cfg.unit = TLS_TIMER_UNIT_US;
  70. cfg.timeout = (u32)(-1);
  71. cfg.is_repeat = 1;
  72. cfg.callback = utimer_cb;
  73. cfg.arg = NULL;
  74. u64_tick_timer_id = tls_timer_create(&cfg);
  75. tls_timer_start(u64_tick_timer_id);
  76. }
  77. uint64_t luat_mcu_tick64(void) {
  78. uint64_t ret = ((uint64_t) us_timer_ticks) << 32;
  79. ret += M32(HR_TIMER0_CNT + 4*u64_tick_timer_id);
  80. return ret;
  81. }
  82. int luat_mcu_us_period(void) {
  83. return 1;
  84. }
  85. uint64_t luat_mcu_tick64_ms(void) {
  86. return ((uint64_t) us_timer_ticks);
  87. }
  88. void luat_mcu_set_clk_source(uint8_t source_main, uint8_t source_32k, uint32_t delay) {
  89. LLOGE("not support setXTAL");
  90. }